Kết hợp Object Detection và Object Tracking – Chương 3. Thử làm hệ thống đo tốc độ xe hơi trên cao tốc

Hiện tại do công việc bị xáo trộn vì em Corona nên mình không có nhiều thời gian ngâm cứu do vậy nên mình xin tạm dừng series Pi làm xe tự hành để sau nhé. Hôm nay chúng ta sẽ tìm hiểu tiếp về việc sử dụng Object Detection và Object Tracking để thử làm hệ thống đo tốc độ xe hơi trên cao tốc nhé.

bắn tốc độ xe hơi

Bài này là bài tiếp theo trong series về OD và OT mình đã viết tại đâytại đây. Trong bài này chúng ta sẽ cùng nhau làm một hệ thống giám sát, đo tốc độ của xe hơi chạy trên cao tốc và hiển thị lên màn hình nhé.

Cùng bắt tay luôn cho nóng nào!

Phần 1 – Tư tưởng bài toán đo tốc độ xe hơi

Mình gọi thế cho nó mĩ miều thôi, chứ thực ra là bài toán dự đoán tốc độ phương tiện dựa vào xử lý ảnh bằng OpenCV. Tại sao mình lại gọi là dự đoán chứ không phải tính toán, lý do vì đây là phép tính dựa vào xử lý ảnh và nó có sai số chứ không đúng 100% nhé. Muốn đúng 100% thì sử dụng súng laser của CSGT nhé.

Cách làm của chúng ta như sau:

  • Bước 1: Chúng ta tiến hành detect các xe hơi trong ảnh và thực hiện gán nhãn và tracking các xe hơi đó.
  • Bước 2: Chúng ta xác định tọa độ của các xe (đã được tracking) giữa 02 frame gọi là TD1 và TD2
  • Bước 3: Dựa vào TD1 và TD2 chúng ta tính ra được khoảng cách di chuyển gọi là KC theo pixel bằng công thức KC = |TD1 – TD2|
  • Bước 4: Chúng ta tính khoảng cách ước lượng theo mét – KCM – dựa vào tham số Số pixel tương ứng với 1 mét – PPM. Vậy KCM = KC / PPM
  • Bước 5: Tính tốc độ bằng m/s bằng công thức TDs = KCM * FPS (số frame xử lý trong 1 giây) sau đó quy đổi sang km/h để hiển thị cho chuẩn 😀

Vậy thôi, thuật toán cũng không có gì phức tạp lắm tuy nhiên các bạn phải xác định tham số PPM cho chính xác. Chúng ta phải dựa vào đo đạc thực tế và dựa vào hình ảnh trên video để xác định xem bao nhiêu pixel trên ảnh thì ứng với 1 mét ngoài đời thực.

Cách làm như sau: Chọn 2 điểm neo A và B dùng để tính tốc độ, ví dụ cái cây trong ảnh và cái cột gỗ trong ảnh. Sau đó ta đo thực tế ví dụ là 400 mét, Tiếp theo ta tính toán trong hình ảnh camera và xác định được khoảng cách là 40pixel. Vậy có nghĩa cứ 10 pixel là 1 mét và PPM = 10.

tốc độ xe hơi

Các bạn đã rõ thuật toán chưa? Nếu chưa hãy đặt câu hỏi trên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup nhé. Còn bây giờ chúng ta sang phần 2 nhé.

Phần 2 – Tải mã nguồn và chạy thử

Các bạn tạo một project MiAI_Speed_Estimate ở trong Pycharm nhé (nên cài nhé các bạn, mọi việc sẽ đơn giản hơn rất nhiều với Pycharm). Sau đó các bạn chuyển vào thư mục và chạy lệnh git như sau:

Sau khi gõ lệnh thì đợi trong giây lát mọi thứ sẽ về thư mục. Bây giờ, các bạn tiến hành cài đặt các thư mục cần thiết để chạy nhé:

Cài đặt có dlib nên cá bạn sử dụng window có thể sẽ gặp lỗi, các bạn cứ post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup để thảo luận nhé.

Xong, bây giờ chúng ta mở file speed_estimate.py để xem mã nguồn nhé! Mình đã comment đầy đủ rồi, các bạn kết hợp với phần thuật toán bên trên là ổn thôi.

Bây giờ các bạn chạy file speed_estimae.py nhé, và kết quả sẽ có dạng như này:

Có 2 lưu ý cho các bạn:

  • Mình dùng detect object bằng haar cascade chứ ko phải YOLO hay SSD. Các bạn có thể thay thuật toán detect nhé, ko khó lắm.
  • Bài này mình ước lượng thông số PPM 1 cách tương đối, do mình ko có mặt ở đó để đo đạc được nên tốc độ chỉ mang tính tham khảo nhé.

Như vậy mình đã chỉ các bạn cách làm một hệ thống đo tốc độ xe hơi trên cao tốc bằng OpenCV. Xin tạm biệt và hẹn gặp lại các bạn trong các bài tiếp 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

mm
Nguyễn Chiến Thắng

Một người đam mê những điều mới mẻ và công nghệ hiện đại. Uớc mơ cháy bỏng dùng AI, ML để làm cho cuộc sống tốt đẹp hơn! Liên hệ: thangnch@gmail.com hoặc facebook.com/thangnch

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *