Computer Vision & Pi – Chương 3. Lắp đặt Pi trên xe hơi để phát hiện tài xế ngủ gật

Chào tuần mới anh em Mì AI, hôm nay chúng ta sẽ cùng nhau tìm cách lắp đặt Pi trên xe hơi và triển khai phần mềm phát hiện tài xế ngủ gật nhé!

Các bạn chưa đọc các bài trước trong series có thể đọc tại đây:

Bài toán lần này của chúng ta như sau, chúng ta sẽ mang Pi lên trên xe hơi, sau đó kết nối Pi với hệ thống loa và chạy phần mềm cảnh báo ngủ gật trên Pi. Phần mềm trên Pi sẽ theo dõi đôi mắt của tài xế thường xuyên. Nếu như tài xế nhắm mắt ngủ trong 1 khoảng thời gian nhất định do chúng ta quy định thì âm thanh chói tai sẽ phát ra từ hệ thống loa để cảnh báo làm giật mình tài xế hoặc khuyên tài xế nên dừng xe để nghỉ ngơi tránh các tai nạn đáng tiếc.

phát hiện ngủ gật

Okie bắt đầu cho nó ngầu nào!

Phần 1 – Chuẩn bị nguyên vật liệu

Để làm bài này các bạn chuẩn bị cho mình về mặt thiết bị như sau:

  • Một đôi loa PC nhỏ, chạy nguồn USB. Chú ý nếu bạn nào đấu nối âm thanh vào cổng AUX của hệ thống âm thanh xe hơi thì khỏi cần đôi loa PC này nhé.
  • Một máy Raspberry Pi
  • Một màn hình nhỏ gọn tầm 7 Inch là đủ, chạy nguồn USB.
phát hiện ngủ gật

Về phần mềm, các bạn chạy trên Termial của Pi (cách chạy xem lại Bài số 2 Triển khai model AI nhận diện đối tượng MobileNet SSD lên Raspberry Pi nhé) để tải mã nguồn phần mềm cảnh báo ngủ gật về máy bằng dòng lệnh:

Sau khi tải xong project về, các bạn tải file landmark predict tại đây và copy vào thư mục chứa mã nguồn (có file pi_drow.py đấy).

Tiếp theo, các bạn cài đặt các thư viện cần thiết bằng lệnh sau (chú ý mình khuyến cáo các bạn tạo môi trường ảo tránh lỗi nhé, cách tạo môi trường ảo cũng có trong Bài số 2 luôn):

Các bạn tiếp tục kiên nhẫn đợi cài thư viện vì cái máy Pi nó chậm lắm chứ ko nhanh như PC của các bạn.

Xong, bây giờ sang Phần 2 là Lý thuyết.

Phần 2 – Thuật toán của bài toán phát hiện buồn ngủ

Thuật toán của bài này khá đơn giản như sau:

  • Bước 1: Mình load module detect khuôn mặt bằng HAARCASCADE và module phát hiện 68 điểm trên mặt – gọi là Facial Landmark.
  • Bước 2: Mình tiến hành detect khuôn mặt từ camera của Pi, sau đó với mỗi khuôn mặt tìm được mình detect 68 điểm Landmark.
  • Bước 3: Mình chọn 2 cụm Landmark ở 2 mắt của khôn mặt. Tính toán khoảng cách giữa 2 mí mắt và đặt một ngưỡng để xác định xem mắt nhắm – khoảng cách nhỏ hay mở – khoảng cách lớn
  • Bước 4: Nếu trong X frame liên tiếp (do mình cấu hình) mà mắt nhắm thì mình coi là ngủ và tiến hành phát audio ra cổng 3.5 của Pi để cánh bảo.

Nói thêm về 68 điểm facial landmark như hình dưới để các bạn dễ hình dung:

Với hình trên thì 2 cụm mắt sẽ là các điểm: Từ 37 đến 42 và từ 43 đến 48 😀

Phần 3 – Tiến hành chạy thử chương trình

Trước khi chạy chương trình các bạn hãy đến dòng 13 và cấu hình lại đường dẫn đến file alarm.wav nhé. Cái này tùy vào các bạn đặt mã nguồn ở đâu trên Pi để cấu hình cho chuẩn. Như của mình là

Sau đó các bạn chạy lệnh:

Một cửa sổ sẽ hiện lên trên Pi để nhận diện xem bạn có nhắm mắt hay không như sau là okie:

phát hiện ngủ gật

Về mã nguồn của chương trình thì mình đã comment khá kỹ trong file pi_drow.py rồi. Các bạn xem chi tiết trong đó và compare với thuật toán bên trên là sẽ hiểu ngay. Nếu có gì vướng mắc các bạn cứ post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup để cùng trao đổi nhé.

Vậy là các bạn đã biết cách triển khai một bài toán thực tế là phát hiện tài xế ngủ gật trên Pi. Các bạn xem clip youtube của mình dưới đây để thấy cách mình triển khai thực tế trên xe oto nhé.

Xin chào và hẹn gặp lại trong các bài tiếp theo.

Chúc các bạn thành công!

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 tham khảo tuyệt vời của tác giả tại đây

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 *