Trong bài Phát hiện đối tượng trong video, chúng ta đã thực hành 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 video. Tuy mô hình Mask-RCNN có độ chính xác cao nhưng nó có nhược điểm là tốc độ xử lý chậm, khó đáp ứng yêu cầu trong việc xử lý video thời gian thực. Do đó, trong bài này, chúng ta sẽ sử dụng mô hình YOLOv5 với tốc độ xử lý nhanh để ứng dụng trong bài toán xử lý video thời gian thực.

Trước hết, chúng ta tiến hành cài đặt thư viện pafy để xử lý video trực tiếp tử YouTube url (khi chúng ta sử dụng pip install pafy sẽ có lỗi dislike_count, do đó chúng ta cài đặt trực tiếp từ git):

Tiếp theo chúng ta tiến hành import các thư viện cần thiết sau:

Hiện tại, TensorFlow hub chưa hỗ trợ mô hình YOLOv5, do đó trong bài này chúng ta sẽ sử dụng Torch thay vì Tensorflow. Ta thực hiện load YOLOv5 như sau:

Tương tự như trong bài Phát hiện đối tượng trong video, chúng ta viết hàm objectDetector(image_array) với input là image_array có shape (H, W, 3) là các frame đọc bởi thư viện opencv:

– Torch YOLOv5 nhận đầu vào là URL, Filename, PIL, OpenCV, Numpy và PyTorch (các bạn tham khảo thêm cách sử dụng YOLOv5 trên Torch hub tại đây). Do đó, ta có thể sử dụng trực tiếp image_array mà không cần các bước xử lý dữ liệu thêm.

– Để hiển thị các bounding box, chúng ta sử dụng hàm torchvision.utils.draw_bounding_boxes(). Hàm này nhận đầu vào là image tensor với shape (C x H x W), kiểu dữ liệu là uint8 và giá trị trong khoảng [0, 255]. Do đó, với dữ liệu là numpy array, chúng ta cần sử dụng hàm transforms.ToTensor() để chuyển từ numpy array về Tensor với shape (C x H x W). Tuy nhiên, hàm này chuyển các giá trị về khoảng [0,0 , 1,0] do đó ta cần nhân lại với 255 để đảm bảo đúng giá trị input của hàm torchvision.utils.draw_bounding_boxes() (các bạn tham khảo thêm cách sử dụng hàm transforms.ToTensor() tại đây).

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

Sau khi kết thúc việc xử lý video, ta được kết quả thu về là video Yolo_output.avi 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 thời gian thực với mô hình YOLOv5. 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 Hai 6, 2022
ITechSeeker