Hế lô xin chào anh em Mì. Hôm nay chúng ta lại cùng trở về với chủ đề Thị giác máy tính – Computer Vision nhé. Thời gian qua hẳn là các anh em đã thấy có quá nhiều vụ tai nạn do tài xế ngủ gật gây ra, rất thảm khốc và buồn đau. Do đó, hôm nay chúng ta sẽ cùng chung tay với Ủy ban an toàn giao thông quốc gia với bài toán “Cảnh báo ngủ gật cho tài xế oto”. Hi vọng từ ví dụ đơn giản này sẽ có bạn triển khai giải pháp vào đời thực để góp phần giảm tai nạn giao thông cho nước nhà nhé!
Hệ thống của chúng ta sẽ thực hiện cảnh báo ngủ gật bằng cách theo dõi liên tục xem tài xế có nhắm mắt hay không, nếu như trong vài frame liên tiếp mà tài xế vẫn nhắm mắt thì hệ thống sẽ thực hiện cảnh báo bằng còi, đèn, loa, …hay thậm chí chích điện (haha) nếu các bạn có kết nối đến các thiết bị ngoại vi đó.
Phần 1. Chuẩn bị nguyên vật liệu
Như thường lệ chúng ta tạo một thư mục MiAI_drow_detection trên máy tính của các bạn. Thư mục này sẽ lưu mọi thứ liên quan đến bài này.
Tiếp theo, các bạn chuyển vào trong thư mục này và gõ lệnh (trên Terminal hoặc Command Promt nhé) đẻ lấy source code mình đã viết sẵn về nhé:
git clone https://github.com/thangnch/drowsiness_detection .
Hãy chú ý câu lệnh trên có một dấu chấm (.) ở cuối lệnh nhé! Nhầm là hỏng việc đấy.
Nếu clone thành công thì trong thư mục MiAI_drow_detection sẽ xuất hiện các file của chương trình cảnh báo ngủ gật. Bạn chạy lệnh sau để cài đặt các thư viện cần thiết nhé:
pip install -r setup.txt
Bây giờ các bạn tải weight pretrain của model Tại đây (nếu các bạn gặp khó khăn trong quá trình tải, hãy xem hướng dẫn tải Tại đây nhé) và copy vào thư mục MiAI_drow_detection nhé (file này nặng gần 100MB nên không đưa lên github được).
Xong rồi! Sang phần tiếp theo nào!
Phần 2. Viết code phát hiện và cảnh báo ngủ gật
Phần này các bạn mở file sleep_detect.py nhé. File này thực hiện các nhiệm vụ cơ bản như:
- Load model dlib để detect các điểm trên mặt như: mắt, mũi, miệng… Tuy nhiên trong bài này mình chỉ chú ý đến 2 mắt.
- Load model resnet đã train sẵn để phát hiện xem mắt nhắm hay mở
- Đọc ảnh từ webcam của máy tính hoặc camera của hệ thống khi triển khai thực tế và thực hiện:
- Nếu mắt mở thì bỏ qua
- Nếu mắt nhắm thì đếm số frame nhắm mắt. Nếu số đếm quá ngưỡng định trước thì hiện chữ cảnh báo lên màn hình. Trong thực tế các bạn có thể kết nối với loa, đèn…để cảnh báo cho tài xế tỉnh ngủ nhé.
Chi tiết source code từng dòng mình đã comment trong file rồi, các bạn xem và cần hỏi gì thì post lên group để cùng chia sẻ nhé (Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup ).
Rồi, bây giờ các bạn chạy file sleep_detect.py bằng IDE của các bạn hoặc bằng dòng lệnh python sleep_detect.py
và tận hưởng thành quả. Các bạn thử nhắm mắt quá 5 giây xem hệ thống có cảnh báo không nhé.
Phần 3. Hướng phát triển vào thực tế
Các bạn nên triển khai model này trên Rasberry Pi hoặc Jetson Nano sau đó đặt ở trên taplo của oto để cảnh báo ngủ gật. Hệ thống cũng sẽ kết nối vào loa, đèn để thông báo, cảnh báo khi thấy buồn ngủ nhé.
Trong thư viện Mì AI hiện nay có khá nhiều sách liên quan đến Rasberry Pi, các bạn có thể tìm đọc tại đây: https://miai.vn/thu-vien-mi-ai.
Chúc các bạn thành công!
Các bạn xem và cần hỏi gì thì post lên group để cùng chia sẻ nhé (Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup ).
dạ trong chương trình này, anh dùng python mấy vậy ạ, do em tải dlib mãi mà không được ạ
Anh dùng 3.7. Em bị lỗi gì post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup cho tiện trao đổi nhé!
Dạ a có thể cho em xin model resnet để kiểm tra mắt nhắm hay mở với ạ.Em cảm ơn ạ
Ủa tất cả anh để hết trong source rồi mà. Cần thêm gì em post lên Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup nhé!
Em đang gặp khó khắn khi tải weight pretrain. Mong anh sửa lại để dễ dàng tải hơn ạ
Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup trao đổi cho dễ nha!
em đang không tải được weight pretrain. Mong anh xem lại ạ
Báo lỗi gì em .Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup trao đổi cho dễ nha!
có thể cho e xin dataset của bài này không ạ
Bạn post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup cho tiện trao đổi nhé!