Trong bài viết này, tôi muốn chia sẻ kinh nghiệm của bản thân về việc phát triển camera thông minh cho người đi xe đạp với thuật toán thị giác máy tính tiên tiến để phát hiện các nguy cơ tiềm ẩn trên đường và ngăn ngừa va chạm. Tôi đã mô tả ngắn gọn toàn bộ quá trình tạo mẫu và thu thập dữ liệu video từ đầu bên dưới. Nó có thể thú vị đối với cả kỹ sư Embedded và Machine Learning. Một chút tiết lộ trước khi chúng tôi bắt đầu: tập dữ liệu được thu thập sau đó là nguồn mở.
Tôi là một tay đua xe đạp cuồng nhiệt với 30 năm kinh nghiệm, 20 trong số đó là trên đường công cộng. Một lần tôi bị tai nạn giao thông trên đường: một chiếc ô tô chạy từ bên cạnh cán qua chiếc xe đạp của tôi. May mắn thay, tôi thoát chết với một vết bầm nhẹ và bong gân. Vì vậy, tôi đặc biệt hiểu các vấn đề an toàn mà người đi xe đạp trên đường công cộng gặp phải.
Một trong những giải pháp cho vấn đề này là sử dụng camera xe đạp để ghi lại các sự cố. Như chúng ta đã biết, đạp xe trên đường sẽ trở nên an toàn hơn khi được trang bị camera ghi lại góc nhìn của bạn. Trong một cuộc xung đột với người lái xe, cảnh quay có thể đóng vai trò như một lớp bảo vệ bổ sung. Nếu không có bằng chứng, người lái xe vô đạo đức có thể từ chối trách nhiệm, nhưng việc trang bị camera cho người đi xe đạp có thể là cứu cánh trong tình huống như vậy. Tại Vương quốc Anh, thậm chí còn có một trang web tên là Nextbase tạo điều kiện thuận lợi cho việc gửi cảnh quay hành động cho cảnh sát, hợp lý hóa quy trình và giảm bớt sự phức tạp.
Nói cách khác, bạn có thể ghi lại vụ tai nạn trên camera, nhưng bạn phải thừa nhận rằng, tốt hơn hết là nên tránh một tình huống nguy hiểm. Khi tôi bắt đầu dự án, không có giải pháp chủ động nào để ngăn chặn các tình huống nguy hiểm trên đường. Vì vậy, tôi quyết định tạo đèn nền xe đạp thông minh của mình bằng máy ảnh. Nhiệm vụ của dự án là giảm tử vong và thương tích cho những người đi xe đạp.
Ban đầu, thiết bị được lên kế hoạch cài đặt thuật toán thị giác máy tính tiên tiến, thường được gọi là "trí tuệ nhân tạo" trên các phương tiện truyền thông, có thể phát hiện những nguy cơ tiềm ẩn trên đường đối với người đi xe đạp. Hãy để tôi giải thích khái niệm này bằng những từ đơn giản: nếu phần mềm phát hiện nguy hiểm, thiết bị sẽ phát ra ánh sáng nhấp nháy để thu hút sự chú ý của người lái xe. Ngoài ra, hệ thống an toàn còn phát ra âm thanh lớn báo cho xe phía sau trước khi va chạm, giúp ngăn chặn va chạm.
Để đào tạo mạng thần kinh phát hiện đối tượng của tôi (một phần của thuật toán thị giác máy tính, được sử dụng để nhận thức), tôi cần tìm một tập dữ liệu lớn về các tình huống khác nhau từ các con đường công cộng được camera phía sau ghi lại. Thật không may, những bộ dữ liệu nguồn mở như vậy không có sẵn trên web khi tôi bắt đầu.
Toàn bộ các nghiên cứu về hành vi lái xe của nó cực kỳ hữu ích trong kỹ thuật giao thông vận tải, phục vụ các mục đích khác nhau như thu thập dữ liệu để phân tích thống kê, xác định mô hình lái xe và ước tính các tham số mô hình. Dữ liệu và mô hình có thể được áp dụng trong một số lĩnh vực, bao gồm phân tích an toàn đường bộ, mô hình vi mô để mô phỏng giao thông, dự báo và kiểm soát cũng như logic điều khiển cho các hệ thống hỗ trợ lái xe tiên tiến.
Trước mắt, cần phải nói rằng trong khi thực hiện dự án này, tôi đã tạo bộ dữ liệu từ các con đường công cộng ở Ukraine do camera quan sát phía sau của những người dùng MVP đầu tiên ghi lại vào năm 2021.\
Hoàn toàn hiểu được tầm quan trọng của công chúng và xã hội của việc có các bộ dữ liệu như vậy trong phạm vi công cộng, tôi đã tải kết quả công việc của mình lên đây .
Để dạy mạng thần kinh dự đoán tai nạn, tôi phải thu thập rất nhiều dữ liệu. Đối với trường hợp này, tôi cần phát triển các nguyên mẫu máy ảnh để cung cấp cho những người thử nghiệm bản beta đầu tiên của mình để ghi lại hành trình của họ. May mắn thay, mạng lưới cộng đồng đạp xe của tôi bao gồm rất nhiều nhà hoạt động vì an toàn giao thông. Điều duy nhất còn lại phải làm là lắp ráp một vài thiết bị để giao chúng cho những người dùng đầu tiên của tôi.
Hãy để tôi mô tả ngắn gọn quá trình phát triển và giải thích logic của việc lựa chọn các giải pháp kỹ thuật cụ thể dưới đây.
Cấu hình phần cứng: vỏ được in 3D. Mô-đun máy tính Raspberry Pi 3B+ được chọn làm nền tảng và PCB tùy chỉnh được tạo ra để giữ cho vỏ máy nhỏ gọn và nhẹ.
Tôi đã sử dụng cảm biến Raspberry Pi IMX219 tiêu chuẩn cho máy ảnh, nhưng tôi đã sử dụng ống kính 120 độ. Đèn LED công suất cao và thấu kính màu đỏ (cũng được in 3D) đã được thêm vào để có tầm nhìn tốt hơn trên đường.
Tôi đã sử dụng Google Coral Edge TPU (có ảnh), một bộ tăng tốc thần kinh 4 TOP mạnh mẽ và chi phí thấp, để chạy các mạng thần kinh trên thiết bị. TPU được kết nối qua USB. \
Tất cả các thiết bị điện tử này tiêu thụ 7-8W khi tải tối đa (quay video, vận hành mạng thần kinh thời gian thực và đèn LED nhấp nháy). Pin Li-ion 8Ah (có ảnh chụp bên trong vỏ) được sử dụng để đảm bảo hoạt động trong 4-5 giờ.
Đối với hệ điều hành, tôi đã sử dụng Raspbian tiêu chuẩn vì nó được hỗ trợ tốt hơn và tất cả các trình điều khiển tôi cần đều được cài đặt dễ dàng mà không gặp sự cố nào. Mã chính mà tôi quyết định viết sau khi khởi động hệ điều hành là bằng C++.
Tôi không khuyên bạn nên bắt đầu với điều này - vì mục đích thử nghiệm, tôi tin rằng Python có thể là một lựa chọn tốt hơn cho người mới bắt đầu. Tuy nhiên, nếu bạn muốn kiểm soát hiệu quả và chính xác tất cả các tài nguyên hạn chế trên Raspberry Pi với khả năng phần cứng tối đa, bạn nên viết bằng C/C++.
Một trong những giải pháp thú vị nhất mà tôi thực hiện trong dự án này là cơ chế OTA (cập nhật qua mạng) và cơ chế thu thập các bản ghi video từ các thiết bị.
Quá trình này diễn ra như sau: khi người dùng kết thúc chuyến đi và trở về nhà, họ cắm bộ điều hợp USB Wi-Fi, kết nối với Wi-FI tại nhà và thiết bị bắt đầu đồng bộ hóa.
Tất cả các video đã được đồng bộ hóa qua Google Drive - Tôi đã tạo một tài khoản Google riêng cho từng thiết bị. Google Drive có rất nhiều lợi thế trong trường hợp của tôi: Tôi có thể xem video ngay lập tức qua giao diện web của Google Drive, dễ dàng xóa hoặc thêm tệp mới theo cách thủ công và cuối cùng nhưng không kém phần quan trọng, nó miễn phí cho các thử nghiệm của tôi ( lên đến 20GB cho mỗi tài khoản). ( Google , làm ơn đừng xấu xa, chỉ có bốn MVP khi khởi nghiệp mới thành lập của tôi).
Sử dụng mã hóa video H.264 giúp lưu giữ hàng trăm video trên một Google Drive mà không bị hết dung lượng.
Hãy để tôi mô tả quy trình OTA: sau khi biên dịch chương trình cơ sở mới, tôi tải nó lên Google Drive. Lần tiếp theo trong quá trình đồng bộ hóa với Google Drive, thiết bị sẽ tải xuống phiên bản chương trình cơ sở mới hơn và thay thế phiên bản cũ.
Tôi đã sử dụng một tiện ích gdrive đơn giản cho việc này. Đây là mã mà tôi sử dụng để tải lên tệp chương trình cơ sở mới:
gdrive upload -p “gdrive folder id” “file”
Dưới đây tôi đưa ra một dòng mã để tải chương trình cơ sở mới trên thiết bị:
gdrive update “id” “file”
Sau khi kiểm tra phiên bản chương trình cơ sở, quá trình đồng bộ hóa video sẽ diễn ra và tất cả các bản ghi mới sẽ được tải lên Google Drive.
Đây là cách video tải xuống đĩa từ thiết bị:
gdrive sync upload “local folder” “gdrive folder id”
Mỗi ngày một lần, tôi chạy một tập lệnh trên máy chủ của mình để đồng bộ hóa tất cả Google Drive với các thư mục cục bộ của mình và tải xuống tất cả các video mới.
gdrive sync download “gdrive folder id” “local folder”
Do đó, sau vài tháng làm việc, các thiết bị của tôi đã thu thập được hơn 200 video sẵn sàng để dán nhãn.
Sau khi thu thập video, tôi đã xử lý, lọc và tạo tập dữ liệu. Sau đó, tôi tập hợp một nhóm nhỏ để dán nhãn thủ công. Nhóm bao gồm 4 người dán nhãn cho từng bức ảnh.
Cuối cùng, như đã đề cập trước đây, tôi đã cung cấp tập dữ liệu cho mã nguồn mở. Bạn có thể tìm thấy nó qua liên kết: Liên kết GitHub.
Tôi tin rằng các bộ dữ liệu nguồn mở là một nguồn tài nguyên quý giá cho cộng đồng nghiên cứu và chúng có thể đóng góp to lớn vào việc phát triển các thuật toán và mô hình mới trong lĩnh vực an toàn đường bộ.