- Components necessaris
- Instal·lació d’OpenCV a Raspberry Pi
- Instal·lació d'altres paquets necessaris
- Programació del Raspberry Pi
- Prova del sistema de detecció de somnolència del conductor
Els conductors de camions que transporten la càrrega i els materials pesats a llargues distàncies durant el dia i la nit, solen patir falta de son. la fatiga i la somnolència són algunes de les principals causes d’accidents importants a les carreteres. Les indústries de l'automòbil estan treballant en algunes tecnologies que poden detectar la somnolència i alertar-ne el conductor.
En aquest projecte, crearem un sistema d’alerta i detecció del son per a controladors que utilitzi el mòdul de càmera Raspberry Pi, OpenCV i Pi. El propòsit bàsic d’aquest sistema és fer un seguiment de l’estat facial i els moviments oculars del conductor i, si el conductor està adormit, el sistema activarà un missatge d’advertència. Aquesta és l'extensió de la nostra aplicació anterior de detecció de fites facials i reconeixement facial.
Components necessaris
Components de maquinari
- Raspberry Pi 3
- Mòdul de càmera Pi
- Cable micro USB
- Zumbador
Programari i serveis en línia
- OpenCV
- Dlib
- Python3
Abans de continuar amb aquest projecte de detecció de somnolència del controlador , primer hem d’instal·lar OpenCV, imutils, dlib, Numpy i algunes altres dependències en aquest projecte. Aquí s’utilitza OpenCV per al processament d’imatges digitals. Les aplicacions més habituals del processament d’imatges digitals són la detecció d’objectes, el reconeixement de cares i el comptador de persones.
Aquí només utilitzem Raspberry Pi, càmera Pi i un brunzidor per construir aquest sistema de detecció de son.

Instal·lació d’OpenCV a Raspberry Pi
Abans d’instal·lar l’OpenCV i altres dependències, el Raspberry Pi s’ha d’actualitzar completament. Utilitzeu les ordres següents per actualitzar el Raspberry Pi a la seva versió més recent:
sudo apt-get update
A continuació, utilitzeu les ordres següents per instal·lar les dependències necessàries per instal·lar OpenCV al vostre 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
Finalment, instal·leu l'OpenCV a Raspberry Pi mitjançant les ordres següents.
pip3 instal·la opencv-contrib-python == 4.1.0.25
Si no sou nou a OpenCV, consulteu els nostres tutorials anteriors d’OpenCV amb Raspberry pi:
- Instal·lació d’OpenCV a Raspberry Pi mitjançant CMake
- Reconeixement facial en temps real amb Raspberry Pi i OpenCV
- Reconeixement de matrícules mitjançant Raspberry Pi i OpenCV
- Estimació de la mida de la multitud mitjançant OpenCV i Raspberry Pi
També hem creat una sèrie de tutorials OpenCV a partir del nivell per a principiants.
Instal·lació d'altres paquets necessaris
Abans de programar el Raspberry Pi per al Detector de somnolència, instal·larem els altres paquets necessaris.
Instal·lació de dlib: dlib és el modern conjunt d’eines que conté algoritmes d’aprenentatge automàtic i eines per a problemes del món real. Utilitzeu l'ordre següent per instal·lar el dlib.
pip3 instal·la dlib
Instal·lació de NumPy: NumPy és la biblioteca bàsica per a la informàtica científica que conté un potent objecte de matriu n-dimensional, que proporciona eines per integrar C, C ++, etc.
pip3 instal·la numpy
Instal·lació del mòdul face_recognition: aquesta biblioteca s'utilitza per reconèixer i manipular cares des de Python o la línia d'ordres. Utilitzeu l'ordre següent per instal·lar la biblioteca de reconeixement facial.
Pip3 instal·la reconeixement facial
I, a la darrera, instal·leu la biblioteca eye_game mitjançant l'ordre següent:
pip3 instal·la eye-game
Programació del Raspberry Pi
Al final de la pàgina es dóna un codi complet per al Detector de somnolència del conductor que utilitza OpenCV. Aquí expliquem algunes parts importants del codi per a una millor comprensió.
Per tant, com és habitual, inicieu el codi incloent totes les biblioteques necessàries.
importació reconeixement facial importació cv2 importació numpy com a importació np importació cv2 importació RPi.GPIO com a importació GPIO eye_game
Després, creeu una instància per obtenir el canal de vídeo de la càmera pi. Si feu servir més d'una càmera, substituïu el zero per una a la funció cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Ara, a les línies següents, introduïu el nom i la ruta del fitxer. En el meu cas, tant el codi com el fitxer es troben a la mateixa carpeta. A continuació, utilitzeu les codificacions de la cara per obtenir la ubicació de la cara a la imatge.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Després, creeu dues matrius per desar les cares i els seus noms. Només faig servir una imatge; podeu afegir més imatges i els seus camins al codi.
codificacions_face_ conegudes = noms_face_ coneguts =
A continuació, creeu algunes variables per emmagatzemar les ubicacions de les parts de la cara, els noms de les cares i les codificacions.
face_locations = face_encodings = face_names = process_this_frame = Cert
Dins de la funció while , captureu els fotogrames de vídeo de la transmissió i canvieu la mida dels fotogrames a una mida més petita i, a més, convertiu el fotograma capturat en color RGB per al reconeixement de cares.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0,25, fy = 0,25) rgb_small_frame = small_frame
Després, executeu el procés de reconeixement de cares per comparar les cares del vídeo amb la imatge. I també obteniu les ubicacions de les parts de la cara.
si 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 (fitxer, small_frame)
Si la cara reconeguda coincideix amb la de la imatge, truqueu a la funció de joc ocular per fer un seguiment dels moviments oculars. El codi farà un seguiment repetit de la posició de l’ull i del globus ocular.
face_distances = face_recognition.face_distance (facial_encodings, face_encoding) best_match_index = np.argmin (face_distances) si coincideix: name = known_face_names direction = eye_game.get_eyeball_direction (file) print (direction)
Si el codi no detecta cap moviment ocular durant 10 segons, activarà l'alarma per despertar la persona.
else: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alerta!) ! Alerta !! S'ha detectat somnolència del conductor ")
A continuació, utilitzeu les funcions OpenCV per dibuixar un rectangle al voltant de la cara i posar-hi un text. A més, mostreu els marcs de vídeo mitjançant la funció cv2.imshow .
cv2.rectangle (marc, (esquerra, superior), (dreta, inferior), (0, 255, 0), 2) cv2.rectangle (marc, (esquerra, inferior - 35), (dreta, inferior), (0, 255, 0), cv2.FILLAT) font = cv2.FONT_HERSHEY_DUPLEX cv2.putText (marc, nom, (esquerra + 6, inferior - 6), font, 1.0, (0, 0, 255), 1) cv2.imshow ("Vídeo", marc) Establiu la tecla "S" per aturar el codi. si cv2.waitKey (1) & 0xFF == ord ('s'): trencar
Prova del sistema de detecció de somnolència del conductor
Un cop el codi estigui llest, connecteu la càmera Pi i el buzzer a Raspberry Pi i executeu el codi. Després d’uns 10 segons aproximadament, apareixerà una finestra amb la transmissió en directe des de la càmera Raspberry Pi. Quan el dispositiu reconeixi la cara, imprimirà el vostre nom al marc i començarà a rastrejar el moviment dels ulls. Ara tanqueu els ulls entre 7 i 8 segons per provar l'alarma. Quan el recompte sigui superior a 10, activarà una alarma que us avisarà sobre la situació.

Així és com podeu construir el Detector de somnolència mitjançant OpenCV i Raspberry Pi. Desplaceu-vos cap avall per veure el vídeo i el codi de treball.
