- Componenti richiesti
- Installazione di OpenCV in Raspberry Pi
- Installazione di altri pacchetti richiesti
- Programmazione del Raspberry Pi
- Test del sistema di rilevamento della sonnolenza del conducente
I camionisti che trasportano merci e materiali pesanti su lunghe distanze durante il giorno e la notte, soffrono spesso di mancanza di sonno. stanchezza e sonnolenza sono alcune delle principali cause di incidenti gravi sulle autostrade. Le industrie automobilistiche stanno lavorando su alcune tecnologie in grado di rilevare la sonnolenza e avvisare il guidatore al riguardo.
In questo progetto, costruiremo un sistema di rilevamento e avviso del sonno per i conducenti utilizzando il modulo fotocamera Raspberry Pi, OpenCV e Pi. Lo scopo principale di questo sistema è monitorare le condizioni del viso e dei movimenti degli occhi del conducente e se il conducente si sente assonnato, il sistema attiverà un messaggio di avviso. Questa è l'estensione della nostra precedente applicazione di rilevamento dei punti di riferimento facciale e riconoscimento facciale.
Componenti richiesti
Componenti hardware
- Raspberry Pi 3
- Modulo fotocamera Pi
- Cavo micro USB
- Cicalino
Software e servizi in linea
- OpenCV
- Dlib
- Python3
Prima di procedere con questo progetto di rilevazione dei driver sonnolenza , in primo luogo, abbiamo bisogno di installare OpenCV, imutils, dlib, Numpy, e alcune altre dipendenze in questo progetto. OpenCV viene utilizzato qui per l'elaborazione delle immagini digitali. Le applicazioni più comuni dell'elaborazione digitale delle immagini sono il rilevamento di oggetti, il riconoscimento dei volti e il contatore di persone.
Qui stiamo usando solo Raspberry Pi, Pi Camera e un cicalino per costruire questo sistema di rilevamento del sonno.
Installazione di OpenCV in Raspberry Pi
Prima di installare OpenCV e altre dipendenze, il Raspberry Pi deve essere completamente aggiornato. Usa i seguenti comandi per aggiornare il Raspberry Pi alla sua ultima versione:
sudo apt-get update
Quindi utilizza i seguenti comandi per installare le dipendenze richieste per l'installazione di OpenCV sul tuo 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
Infine, installa OpenCV su Raspberry Pi utilizzando i comandi seguenti.
pip3 installa opencv-contrib-python == 4.1.0.25
Se sei nuovo su OpenCV, controlla i nostri precedenti tutorial OpenCV con Raspberry pi:
- Installazione di OpenCV su Raspberry Pi utilizzando CMake
- Riconoscimento facciale in tempo reale con Raspberry Pi e OpenCV
- Riconoscimento della targa utilizzando Raspberry Pi e OpenCV
- Stima delle dimensioni della folla utilizzando OpenCV e Raspberry Pi
Abbiamo anche creato una serie di tutorial OpenCV partendo dal livello principiante.
Installazione di altri pacchetti richiesti
Prima di programmare Raspberry Pi per Drowsiness Detector, installiamo gli altri pacchetti richiesti.
Installazione di dlib: dlib è il moderno toolkit che contiene algoritmi e strumenti di Machine Learning per problemi del mondo reale. Usa il comando seguente per installare dlib.
pip3 installa dlib
Installazione di NumPy: NumPy è la libreria principale per il calcolo scientifico che contiene un potente oggetto array n-dimensionale, fornisce strumenti per l'integrazione di C, C ++, ecc.
pip3 installa numpy
Installazione del modulo face_recognition: questa libreria utilizzata per riconoscere e manipolare i volti da Python o dalla riga di comando. Utilizzare il comando seguente per installare la libreria di riconoscimento facciale.
Pip3 installa face_recognition
E nell'ultimo, installa la libreria eye_game usando il comando seguente:
pip3 installa eye-game
Programmazione del Raspberry Pi
Il codice completo per Driver Drowsiness Detector utilizzando OpenCV è fornito alla fine della pagina. Qui stiamo spiegando alcune parti importanti del codice per una migliore comprensione.
Quindi, come al solito, avvia il codice includendo tutte le librerie richieste.
import face_recognition import cv2 import numpy as np import time import cv2 import RPi.GPIO as GPIO import eye_game
Successivamente, crea un'istanza per ottenere il feed video dalla telecamera pi. Se stai utilizzando più di una fotocamera, sostituisci zero con uno nella funzione cv2.VideoCapture (0) .
video_capture = cv2.VideoCapture (0)
Ora nelle righe successive, inserisci il nome del file e il percorso del file. Nel mio caso, sia il codice che il file si trovano nella stessa cartella. Quindi utilizzare le codifiche dei volti per ottenere la posizione del viso nell'immagine.
img_image = face_recognition.load_image_file ("img.jpg") img_face_encoding = face_recognition.face_encodings (img_image)
Successivamente, crea due array per salvare i volti e i loro nomi. Sto usando solo un'immagine; puoi aggiungere più immagini e i loro percorsi nel codice.
known_face_encodings = known_face_names =
Quindi creare alcune variabili per memorizzare le posizioni delle parti della faccia, i nomi delle facce e le codifiche.
face_locations = face_encodings = face_names = process_this_frame = True
All'interno della funzione while , cattura i fotogrammi video dallo streaming e ridimensiona i fotogrammi a dimensioni inferiori e converti anche il fotogramma catturato in colore RGB per il riconoscimento facciale.
ret, frame = video_capture.read () small_frame = cv2.resize (frame, (0, 0), fx = 0.25, fy = 0.25) rgb_small_frame = small_frame
Successivamente, esegui il processo di riconoscimento facciale per confrontare i volti nel video con l'immagine. E ottieni anche le posizioni delle parti del viso.
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)
Se il viso riconosciuto corrisponde al viso nell'immagine, chiama la funzione eyegame per tracciare i movimenti degli occhi. Il codice seguirà ripetutamente la posizione dell'occhio e del bulbo oculare.
face_distances = face_recognition.face_distance (known_face_encodings, face_encoding) best_match_index = np.argmin (face_distances) se corrisponde a: name = known_face_names direction = eye_game.get_eyeball_direction (file) print (direction)
Se il codice non rileva alcun movimento degli occhi per 10 secondi, attiverà l'allarme per svegliare la persona.
altro: count = 1 + count print (count) if (count> = 10): GPIO.output (BUZZER, GPIO.HIGH) time.sleep (2) GPIO.output (BUZZER, GPIO.LOW) print ("Alert! ! Avviso !! Rilevata sonnolenza del conducente ")
Quindi usa le funzioni OpenCV per disegnare un rettangolo attorno al viso e mettere un testo su di esso. Inoltre, mostra i fotogrammi video utilizzando la funzione 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 (frame, name, (left + 6, bottom - 6), font, 1.0, (0, 0, 255), 1) cv2.imshow ("Video", frame) Impostare il tasto "S" per interrompere il codice. if cv2.waitKey (1) & 0xFF == ord ('s'): break
Test del sistema di rilevamento della sonnolenza del conducente
Una volta che il codice è pronto, collega la fotocamera e il cicalino Pi a Raspberry Pi ed esegui il codice. Dopo circa 10 secondi, verrà visualizzata una finestra con lo streaming live dalla fotocamera Raspberry Pi. Quando il dispositivo riconosce il viso, stamperà il tuo nome sulla cornice e inizierà a tracciare il movimento degli occhi. Ora chiudi gli occhi per 7-8 secondi per testare l'allarme. Quando il conteggio diventa superiore a 10, verrà attivato un allarme, avvisandoti della situazione.
È così che puoi costruire Drowsiness Detector usando OpenCV e Raspberry Pi. Scorri verso il basso per visualizzare il video e il codice funzionanti.