Hi anh em, hôm nay chúng ta sẽ thử Kết hợp Object Detection và Object Tracking – xây dựng hệ thống đếm phương tiện giao thông trên đường nhé.
Trong bài trước tại đây chúng ta đã thử thuật toán Object Tracking (OT) và đã thấy rất hiểu quả trong theo vết, tracking đối tượng. Hôm nay chúng ta sẽ sử dụng MobileNet SSD để làm Object Detection và sau đó thực hiện OT để đếm số xe oto (mình làm với oto, bạn có thể làm với các đối tượng khác nhé).
Bắt tay vào làm nào!
Phần 1 – Chuẩn bị nguyên vật liệu
Đầu tiên các bạn tạo thử mục MiAI_Object_Tracking tải git của mình về cho nhanh nhé:
git clone https://github.com/thangnch/MiAI_Object_Detect_Tracking .
Tiếp theo ta cài đặt các thư viện cần thiết bằng lệnh:
pip install -r setup.txt
Do cài cả tensorflow và keras nên sẽ hơi lâu chút, các bạn đợi tẹo là okie.
Phần 2 – Thuật toán xử lý
Nói qua chút về thuật toán xử lý với bài toán đếm xe này. Chúng ta sẽ lần lượt làm các bước như sau:
- Bước 1. Load input video (mình có để sẵn file test.mp4) và load pretrain MobileNetSSD.
- Bước 2: Ta định nghĩa sẵn 1 đường kẻ ngang, mà mình tạm gọi là laser line. Các bạn cứ tưởng tượng có một đường laser chiếu ngang, khi xe đi qua thì sẽ đếm xe cho dễ hiểu.
- Bước 3: Ta tiến hành lặp qua các đối tượng đã được tracking để update vị trí mới (nếu có). Trong quá trình lặp, nếu đối tượng vượt qua đường laser thì tính thêm 1 xe mới, nếu đối tượng không vượt qua thì tiếp tục theo vết.
- Bước 4. Cứ mỗi 5 frame, chúng ta lại nhận diện lại các đối tượng 1 lần, nếu như là đối tượng mới xuất hiện (bằng cách kiểm tra centroid xem có gần đối tượng nào đang được tracking hay không) thì ta thêm vào danh sách tracking.
- Bước 5. Hiển thị lên màn hình và tiếp tục lặp lại bước 3.
Phần này hơi lằng nhằng tý, các bạn cứ đọc kỹ, nếu chưa hiểu thì post lên group Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup để tiện trao đổi nhé.
Phần 3 – Chạy thử chương trình đếm phương tiện giao thông
Trong mã nguồn mình có để file object_detect_tracking.py, các bạn có thể xem qua source và so sánh với thuật toán ở phần trên.
Trong file đó mình có để các tham số link đến pretrain model MobileNet SSD và đường dẫn đến file video. Các bạn có thể chỉnh lại tùy tý, ví dụ thay model khác, hoặc dùng OpenCV thuần, thay video khác để kiểm tra….
prototype_url = 'models/MobileNetSSD_deploy.prototxt'
model_url = 'models/MobileNetSSD_deploy.caffemodel'
video_path = 'test.mp4'
Để định nghĩa vị trí của đường laser line, các bạn sửa tham số này:
laser_line = input_h - 50
Còn bây giờ các bạn hãy chảy thử trước, nếu mọi thứ okie, các bạn sẽ thấy video như sau:
OK, như vậy qua bài này bước đầu các bạn đã biết cách phát hiện và tracking và đếm đối tượng. Mình xin tạm dừng và hẹn gặp lại các bạn nhé.
Hãy join cùng cộng đồng Mì AI nhé!
Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn
Youtube: http://bit.ly/miaiyoutube
Cảm ơn bài viết về realtime object regcog của tác giả C-Aniruddh và của 1 bạn trên mạng, mình down về đã lâu không nhớ nguồn. Nếu bạn có đọc được hãy comment mình sẽ update ngay!
anh viết mấy cái này bằng phần mềm gì ấy ạ !
Mình dùng Pycharm thôi! Ngôn ngữ thì Python.
Cần trao đổi thêm gì bạn vào group nhé
Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup
a cho e xin code đc ko a
Mình có share code trong bài mà!
Anh có viết về chương trình ước lượng xe cộ hay ước lượng đám đông chưa ạ ?
Anh chưa, chắc đợt tới làm thử 1,2 project 😀
Em muốn chuyển sang đếm người thì làm sao ạ
Ah thì em chỉ cần chuyển phần Object Detection từ xe thành người là xong. Cần thêm gì em post lên Group: https://www.facebook.com/groups/miaigroup các bạn sẽ hỗ trợ nhé!
Cho em hỏi lúc em chạy thì bị lỗi “AttributeError: module ‘cv2.cv2’ has no attribute ‘TrackerMOSSE_create'” thì fix như nào vậy anh
Eem post lên https://facebook.com/groups/miaigroup kèm màn hình cho tiện xem nhé!
Anh dùng thuật toán Object Tracking nào vậy a
Cái này dùng mấy cái đơn giản thôi bạn.
MOSSE Tracker: Tốc độ cao nhất, chính xác thấp nhất. Sử dụng trong các bài toán cần ưu tiên tốc độ.
KCF Tracker: Tốc độ chậm hơn MOSSE và chính xác cao hơn MOSSE.
CSRT Tracker: Tốc độ chậm nhất trong 3 món nhưng độ chính xác lại cao nhất trong 3 món.