- Thành phần bắt buộc
- Cài đặt OpenCV trong Raspberry Pi
- Cài đặt các Gói bắt buộc khác
- Lập trình Raspberry Pi
- Kiểm tra Hệ thống Phát hiện Buồn ngủ của Người lái xe
Những người lái xe tải vận chuyển hàng hóa, vật liệu nặng trên quãng đường dài cả ngày lẫn đêm, họ thường xuyên bị thiếu ngủ. mệt mỏi và buồn ngủ là một trong những nguyên nhân hàng đầu gây ra các vụ tai nạn lớn trên đường cao tốc. Các ngành công nghiệp ô tô đang nghiên cứu một số công nghệ có thể phát hiện cơn buồn ngủ và cảnh báo cho người lái xe về nó.
Trong dự án này, chúng tôi sẽ xây dựng Hệ thống cảnh báo và cảm biến giấc ngủ cho Trình điều khiển bằng cách sử dụng mô-đun máy ảnh Raspberry Pi, OpenCV và Pi. Mục đích cơ bản của hệ thống này là theo dõi tình trạng khuôn mặt và chuyển động mắt của người lái xe và nếu người lái xe cảm thấy buồn ngủ thì hệ thống sẽ kích hoạt một thông báo cảnh báo. Đây là phần mở rộng của ứng dụng nhận diện khuôn mặt và phát hiện mốc khuôn mặt trước đây của chúng tôi.
Thành phần bắt buộc
Các thành phần phần cứng
- Raspberry Pi 3
- Mô-đun máy ảnh Pi
- Cáp Micro USB
- Buzzer
Phần mềm và Dịch vụ Trực tuyến
- OpenCV
- Dlib
- Python3
Trước khi tiếp tục với dự án phát hiện trình điều khiển buồn ngủ này , trước tiên, chúng ta cần cài đặt OpenCV, imutils, dlib, Numpy và một số phụ thuộc khác trong dự án này. OpenCV được sử dụng ở đây để xử lý hình ảnh kỹ thuật số. Các ứng dụng phổ biến nhất của Xử lý hình ảnh kỹ thuật số là phát hiện đối tượng, Nhận dạng khuôn mặt và bộ đếm người.
Ở đây chúng tôi chỉ sử dụng Raspberry Pi, Pi Camera và một bộ rung để xây dựng hệ thống phát hiện Ngủ này.
Cài đặt OpenCV trong Raspberry Pi
Trước khi cài đặt OpenCV và các phụ thuộc khác, Raspberry Pi cần được cập nhật đầy đủ. Sử dụng các lệnh dưới đây để cập nhật Raspberry Pi lên phiên bản mới nhất:
sudo apt-get cập nhật
Sau đó, sử dụng các lệnh sau để cài đặt các phụ thuộc cần thiết để cài đặt OpenCV trên Raspberry Pi của bạn.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Cuối cùng, cài đặt OpenCV trên Raspberry Pi bằng các lệnh dưới đây.
pip3 cài đặt opencv-Contrib-python == 4.1.0.25
Nếu bạn chưa quen với OpenCV, hãy xem các hướng dẫn OpenCV trước đây của chúng tôi với Raspberry pi:
- Cài đặt OpenCV trên Raspberry Pi bằng CMake
- Nhận dạng khuôn mặt thời gian thực với Raspberry Pi và OpenCV
- Nhận dạng biển số bằng Raspberry Pi và OpenCV
- Ước tính quy mô đám đông bằng OpenCV và Raspberry Pi
Chúng tôi cũng đã tạo một loạt các hướng dẫn OpenCV bắt đầu từ cấp độ người mới bắt đầu.
Cài đặt các Gói bắt buộc khác
Trước khi lập trình Raspberry Pi cho Máy phát hiện buồn ngủ, hãy cài đặt các gói bắt buộc khác.
Cài đặt dlib: dlib là bộ công cụ hiện đại chứa các thuật toán và công cụ Máy học cho các vấn đề trong thế giới thực. Sử dụng lệnh dưới đây để cài đặt dlib.
pip3 cài đặt dlib
Cài đặt NumPy: NumPy là thư viện cốt lõi cho tính toán khoa học chứa đối tượng mảng n-chiều mạnh mẽ, cung cấp các công cụ để tích hợp C, C ++, v.v.
pip3 cài đặt numpy
Cài đặt mô-đun face_recognition: Thư viện này được sử dụng để nhận dạng và thao tác các khuôn mặt từ Python hoặc dòng lệnh. Sử dụng lệnh dưới đây để cài đặt thư viện nhận dạng khuôn mặt.
Pip3 cài đặt face_recognition
Và cuối cùng, hãy cài đặt thư viện eye_game bằng lệnh dưới đây:
pip3 cài đặt trò chơi mắt
Lập trình Raspberry Pi
Mã hoàn chỉnh cho Trình phát hiện buồn ngủ của trình điều khiển bằng OpenCV được đưa ra ở cuối trang. Ở đây chúng tôi giải thích một số phần quan trọng của mã để hiểu rõ hơn.
Vì vậy, như thường lệ, hãy bắt đầu mã bằng cách bao gồm tất cả các thư viện được yêu cầu.
import face_recognition import cv2 import numpy as np import time import cv2 import RPi.GPIO as GPIO import eye_game
Sau đó, tạo một phiên bản để lấy nguồn cấp dữ liệu video từ camera pi. Nếu bạn đang sử dụng nhiều máy ảnh, hãy thay thế số 0 bằng một máy ảnh trong chức năng cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Bây giờ trong các dòng tiếp theo, hãy nhập tên tệp và đường dẫn của tệp. Trong trường hợp của tôi, cả mã và tệp đều nằm trong cùng một thư mục. Sau đó, sử dụng bảng mã khuôn mặt để lấy vị trí khuôn mặt trong hình.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Sau đó, tạo hai mảng để lưu các khuôn mặt và tên của chúng. Tôi chỉ sử dụng một hình ảnh; bạn có thể thêm nhiều hình ảnh và đường dẫn của chúng trong mã.
known_face_encodings = known_face_names =
Sau đó, tạo một số biến để lưu trữ vị trí các bộ phận khuôn mặt, tên khuôn mặt và mã hóa.
face_locations = face_encodings = face_names = process_this_frame = True
Bên trong chức năng while , chụp các khung video từ quá trình phát trực tuyến và thay đổi kích thước khung thành kích thước nhỏ hơn và cũng chuyển đổi khung đã chụp thành màu RGB để nhận dạng khuôn mặt.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0,25, fy = 0,25) rgb_small_frame = small_frame
Sau đó, chạy quy trình nhận dạng khuôn mặt để so sánh khuôn mặt trong video với hình ảnh. Và cũng có được vị trí các bộ phận trên khuôn mặt.
if process_this_frame: face_locations = face_recognition.face_locations (rgb_small_frame) face_encodings = face_recognition.face_encodings (rgb_small_frame, face_locations) cv2.imwrite (file, small_frame)
Nếu khuôn mặt được nhận dạng khớp với khuôn mặt trong ảnh, thì hãy gọi chức năng trò chơi mắt để theo dõi chuyển động của mắt. Mã sẽ liên tục theo dõi vị trí của mắt và nhãn cầu.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) nếu khớp với: name = known_face_names direction = eye_game.get_eyeball_direction (file) print (direction)
Nếu mã không phát hiện bất kỳ chuyển động nào của mắt trong 10 giây, thì nó sẽ kích hoạt báo động để đánh thức người đó.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Cảnh báo! ! Cảnh báo !! Đã phát hiện thấy tài xế buồn ngủ ")
Sau đó, sử dụng các chức năng OpenCV để vẽ một hình chữ nhật xung quanh khuôn mặt và đặt một văn bản trên đó. Ngoài ra, hiển thị các khung video bằng chức năng cv2.imshow .
cv2.rectangle (khung, (trái, trên), (phải, dưới), (0, 255, 0), 2) cv2.rectangle (khung, (trái, dưới - 35), (phải, dưới), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (frame, name, (left + 6, bottom - 6), font, 1.0, (0, 0, 255), 1) cv2.imshow ('Video', khung) Đặt Phím 'S' để dừng mã. if cv2.waitKey (1) & 0xFF == ord ('s'): break
Kiểm tra Hệ thống Phát hiện Buồn ngủ của Người lái xe
Khi mã đã sẵn sàng, hãy kết nối máy ảnh Pi và bộ rung với Raspberry Pi và chạy mã. Sau khoảng 10 giây, một cửa sổ sẽ xuất hiện với tính năng phát trực tiếp từ máy ảnh Raspberry Pi của bạn. Khi thiết bị nhận diện khuôn mặt, nó sẽ in tên bạn lên khung và bắt đầu theo dõi chuyển động của mắt. Bây giờ hãy nhắm mắt lại từ 7 đến 8 giây để kiểm tra báo thức. Khi số lượng trở nên nhiều hơn 10, nó sẽ kích hoạt báo động, cảnh báo cho bạn về tình huống.
Đây là cách bạn có thể xây dựng Máy phát hiện buồn ngủ bằng OpenCV và Raspberry Pi. Cuộn xuống để xem video và Mã đang hoạt động.