Trong bài Thực hành viết ứng dụng Phát hiện đối tượng, chúng ta đã viết ứng dụng sử dụng mô hình Mask-RCNN có sẵn trên TensorFlow hub để phát hiện đối tượng trong một bức ảnh. Trong bài này, chúng ta sẽ sử dụng lại các đoạn code trong bài trước để viết chương trình phát hiện đối tượng trong một video.

Tương tự như trong bài Thực hành viết ứng dụng Phát hiện đối tượng, chúng ta tiến hành cài đặt Object Detection API, import các thư viện, load detection model như sau:

Trong bài này, chúng ta sẽ sử dụng thư viện opencv-python để xử lý video. Ta sử dụng hàm cv2.VideoCapture() để đọc video cho trước và xử lý từng fame của video này. Mỗi một frame của video được coi là một bức ảnh, do đó ta sẽ sử dụng mô hình Mask-RCNN để nhận diện các đối tượng trong từng frame này (Lưu ý: Mask-RCNN có tốc độ nhận diện chậm nên thường ít được sử dụng trong bài toán real-time). Mỗi frame sử dụng cv2 sẽ là một numpy array với shape là (H, W, 3). Do đó ta sử dụng lại code của bài trước để viết hàm objectDetector(image_array) như sau (image_array là frame với shape là (H, W, 3)):

Cuối cùng ta sử dụng thư viện opencv-python để đọc video và phát hiện đối tượng trong từng frame với hàm objectDetector() như sau:

– Ở đây chúng ta sử dụng hàm cv2.VideoCapture() để đọc video cho trước. Tuy nhiên chúng ta có thể sử dụng cv2.VideoCapture(0) để lấy dữ liệu từ webcam và xử lý real-time

– Sau khi xử lý xong, chúng ta sẽ lưu lại video với tên output.avi sử dụng hàmcv2.VideoWriter() (các bạn thao khảo thêm về việc lưu video trong opencv tại đây)

Cuối cùng ta được kết quả trả về là video đã được xử lý với bounding box của các đối tượng trong video và class lable của đối tượng như sau:

Như vậy chúng ta đã hoàn thành việc xây dựng một ứng dụng phát hiện đối tượng trong video. Các bạn có thể tham khảo Colab notebook của bài viết này trên trang Github của ITechSeeker tại đây.

Tháng Một 28, 2022
ITechSeeker