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ố mét tương ứng với 1 pixel” – MPP. Vậy KCM = KC * MPP
  • 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 :D. Lý do có công thức trên là như sau:
    • Gói số giây xử lý được 1 Frame và tính được KCM là t (giây)
    • Suy ra số Frame xử lý trong 1 giây hay FPS =1/t.
    • KCM là trong t giây -> khoảng cách đi được trong 1 giây sẽ là KCM/t hay nói cách khác = KCM*FPS.

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 mét là 1 pixel và MPP = 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:

git clone https://github.com/thangnch/MiAI_Speed_Estimate .Code language: PHP (php)

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é:

pip install -r setup.txtCode language: CSS (css)

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

Related Post

4 Replies to “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”

  1. Neu su dung python 3.7 va cai OpenCV ver 4.4 tro di va gap loi sau voi cv2.imshow

    File “speed_estimate.py”, line 165, in
    cv2.imshow(‘video’, output_image)
    cv2.error: OpenCV(4.4.0) /tmp/pip-req-build-nnedsm3u/opencv/modules/highgui/src/window.cpp:651: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function ‘cvShowImage’

    thuc hien downgrade opencv xuong ban 4.3:
    pip3 install opencv-python==4.3.0.36

  2. Toán học kiểu này thì chết rồi. Nên xoá bài này nếu k muốn mất danh tiếng.

    1. Dạ chào bác. Em không xóa vì em có danh tiếng gì đâu mà mất ạ. Mấy anh em cùng học tập viết bài chia sẻ giúp đỡ nhau thôi.
      Nếu bác có gì góp ý thì em xin quý tính đại danh để cùng giao lưu cho vui ah. Không sao đâu bác. Chứ bác Anonymous thế kia em cũng không biết học hỏi kiểu gì.

Leave a Reply

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