- Componente necesare
- Instalarea OpenCV în Raspberry Pi
- Instalarea altor pachete necesare
- Programarea Raspberry Pi
- Testarea sistemului de detectare a somnolenței șoferului
Șoferii de camioane care transportă mărfurile și materialele grele pe distanțe lungi în timpul zilei și noaptea, suferă adesea de lipsă de somn. oboseala și somnolența sunt unele dintre principalele cauze ale accidentelor majore pe autostrăzi. Industriile auto lucrează la unele tehnologii care pot detecta somnolența și avertiza șoferul despre aceasta.
În acest proiect, vom construi un sistem de detectare și alertare a somnului pentru șoferi care utilizează modulul de cameră Raspberry Pi, OpenCV și Pi. Scopul de bază al acestui sistem este de a urmări starea feței și mișcările ochilor șoferului și dacă șoferul se simte somnoros, atunci sistemul va declanșa un mesaj de avertizare. Aceasta este extensia aplicației noastre anterioare de detectare a reperelor faciale și de recunoaștere a feței.
Componente necesare
Componente hardware
- Raspberry Pi 3
- Modul Camera Pi
- Cablu micro USB
- Buzzer
Software și servicii online
- OpenCV
- Dlib
- Python3
Înainte de a continua cu acest proiect de detectare a somnolenței driverului , mai întâi, trebuie să instalăm OpenCV, imutils, dlib, Numpy și alte dependențe în acest proiect. OpenCV este utilizat aici pentru procesarea digitală a imaginilor. Cele mai frecvente aplicații de procesare digitală a imaginilor sunt detectarea obiectelor, recunoașterea feței și contorul de persoane.
Aici folosim doar Raspberry Pi, Camera Pi și un buzzer pentru a construi acest sistem de detectare a somnului.
Instalarea OpenCV în Raspberry Pi
Înainte de a instala OpenCV și alte dependențe, Raspberry Pi trebuie să fie complet actualizat. Utilizați comenzile de mai jos pentru a actualiza Raspberry Pi la cea mai recentă versiune:
sudo apt-get update
Apoi utilizați următoarele comenzi pentru a instala dependențele necesare pentru instalarea OpenCV pe Raspberry Pi.
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
În cele din urmă, instalați OpenCV pe Raspberry Pi folosind comenzile de mai jos.
pip3 instalează opencv-contrib-python == 4.1.0.25
Dacă sunteți nou în OpenCV, consultați tutorialele noastre anterioare OpenCV cu Raspberry pi:
- Instalarea OpenCV pe Raspberry Pi folosind CMake
- Recunoaștere a feței în timp real cu Raspberry Pi și OpenCV
- Recunoașterea plăcuței de înmatriculare utilizând Raspberry Pi și OpenCV
- Estimarea dimensiunii mulțimii folosind OpenCV și Raspberry Pi
De asemenea, am creat o serie de tutoriale OpenCV începând de la nivelul pentru începători.
Instalarea altor pachete necesare
Înainte de a programa Raspberry Pi pentru Detector de somnolență, să instalăm celelalte pachete necesare.
Instalarea dlib: dlib este setul de instrumente modern care conține algoritmi de învățare automată și instrumente pentru probleme din lumea reală. Utilizați comanda de mai jos pentru a instala dlib.
pip3 instalează dlib
Instalarea NumPy: NumPy este biblioteca de bază pentru calcul științific care conține un obiect matricial puternic n-dimensional, oferă instrumente pentru integrarea C, C ++ etc.
pip3 instalează numpy
Instalarea modulului de recunoaștere a feței: această bibliotecă utilizată pentru a recunoaște și manipula fețele din Python sau din linia de comandă. Utilizați comanda de mai jos pentru a instala biblioteca de recunoaștere a feței.
Pip3 instalează recunoașterea feței
Și în ultima, instalați biblioteca eye_game folosind comanda de mai jos:
pip3 instalează eye-game
Programarea Raspberry Pi
Codul complet pentru detectorul de somnolență a șoferului care utilizează OpenCV este dat la sfârșitul paginii. Aici explicăm câteva părți importante ale codului pentru o mai bună înțelegere.
Deci, ca de obicei, porniți codul prin includerea tuturor bibliotecilor necesare.
import face_recognition import cv2 import numpy ca timp np import import cv2 import RPi.GPIO ca GPIO import eye_game
După aceea, creați o instanță pentru a obține fluxul video de la camera pi. Dacă utilizați mai multe camere, înlocuiți zero cu una în funcția cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Acum, în rândurile următoare, introduceți numele fișierului și calea acestuia. În cazul meu, atât codul, cât și fișierul se află în același folder. Apoi utilizați codurile feței pentru a obține locația feței în imagine.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
După aceea creați două matrice pentru a salva fețele și numele acestora. Folosesc o singură imagine; puteți adăuga mai multe imagini și căile lor în cod.
cunoștințe_față_cunoscute = nume_fațe_cunoscute =
Apoi creați câteva variabile pentru a stoca locațiile părților feței, numele fețelor și codificările.
face_locations = face_encodings = face_names = process_this_frame = Adevărat
În interiorul funcției while , capturați cadrele video din flux și redimensionați cadrele la dimensiuni mai mici și convertiți, de asemenea, cadrul capturat în culoare RGB pentru recunoașterea feței.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0.25, fy = 0.25) rgb_small_frame = small_frame
După aceea, rulați procesul de recunoaștere a feței pentru a compara fețele din videoclip cu imaginea. Și, de asemenea, obține locațiile părților feței.
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 (fișier, cadru mic)
Dacă fața recunoscută se potrivește cu fața din imagine, atunci apelați funcția jocului ocular pentru a urmări mișcările ochilor. Codul va urmări în mod repetat poziția ochiului și a globului ocular.
face_distances = face_recognition.face_distance (cunoscut_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) dacă se potrivește: nume = cunoscut_face_names direcție = eye_game.get_eyeball_direction (fișier) print (direcție)
Dacă codul nu detectează nicio mișcare a ochilor timp de 10 secunde, atunci va declanșa alarma pentru a trezi persoana.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print („Alertă! ! Alertă !! S-a detectat somnolența șoferului ”)
Apoi utilizați funcțiile OpenCV pentru a desena un dreptunghi în jurul feței și a pune un text pe ea. De asemenea, afișați cadrele video utilizând funcția cv2.imshow .
cv2.rectangle (frame, (left, top), (right, bottom), (0, 255, 0), 2) cv2.rectangle (frame, (left, bottom - 35), (right, bottom), (0, 255, 0), cv2.FILLED) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (cadru, nume, (stânga + 6, jos - 6), font, 1.0, (0, 0, 255), 1) cv2.imshow („Video”, cadru) Setați tasta „S” pentru a opri codul. if cv2.waitKey (1) & 0xFF == ord ('s'): break
Testarea sistemului de detectare a somnolenței șoferului
Odată ce codul este gata, conectați camera Pi și buzzer-ul la Raspberry Pi și rulați codul. După aproximativ 10 secunde, va apărea o fereastră cu fluxul live de pe camera dvs. Raspberry Pi. Când dispozitivul recunoaște fața, acesta va imprima numele dvs. pe cadru și va începe să urmărească mișcarea ochilor. Acum închideți ochii timp de 7 până la 8 secunde pentru a testa alarma. Când numărul devine mai mare de 10, va declanșa o alarmă, alertându-vă despre situație.
Acesta este modul în care puteți construi Detector de somnolență utilizând OpenCV și Raspberry Pi. Derulați în jos pentru videoclipul și codul de lucru.