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:
- Cài đặt môi trường lập trình cho Raspberry Pi
- Triển khai model AI nhận diện đối tượng MobileNet SSD lên Raspberry Pi
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.
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.
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:
git clone https://github.com/thangnch/MiAI_Sleep_Detection_Pi
Code language: PHP (php)
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):
pip install -r setup.txt
Code language: CSS (css)
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à
# Cau hinh duong dan den file alarm.wav
wav_path = "/home/pi/miai/landmark/alarm.wav"
Code language: PHP (php)
Sau đó các bạn chạy lệnh:
python pi_drow.py
Code language: CSS (css)
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:
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
Mì AI tuyệt vời quá, giúp “người cao tuổi” ko ngại khi học AI
Thanks bạn ủng hộ nha. Mì AI do người cao tuổi viết nên rất phù hợp người cao tuổi:D
#MìAI
Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup
Blog: https://miai.vn
Youtube: http://bit.ly/miai_youtube
Theo mình thấy trước bước 1 nên có thêm một bước nữa là detect face để cắt ra cái box chứ vừa đủ cái face. Vậy sẽ tăng dộ chính xác cho landmark detection sau này
Chuẩn bạn. Còn nhiều cái cài tiến nữa để tăng hiệu quả model.
Anh ơi em cho chạy thử trên linux đến đoạn pip install -r setup.txt thì gặp nhiều lỗi quá ạ anh có thể giải đáp giúp em được không ạ
Bạn post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup cho tiện trao đổi nhé!