- Componenti richiesti
- Installazione di OpenCV in Raspberry Pi
- Come rilevare le parti del viso utilizzando dlib
- Programmazione del Raspberry Pi per il rilevamento dei punti di riferimento del viso
- Prova del riconoscimento della parte del viso
Il rilevamento dei punti di riferimento del viso è il processo di rilevamento di varie parti del viso come le sopracciglia, gli occhi, il naso, la bocca e la mascella. Esistono molte applicazioni che utilizzano le tecniche di rilevamento dei punti di riferimento facciale.
In precedenza abbiamo costruito un sistema di riconoscimento facciale utilizzando OpenCV, oggi useremo lo stesso OpenCV con Raspberry Pi per il rilevamento dei punti di riferimento del viso. Un modulo rilevatore di punti di riferimento facciale pre-addestrato dalla libreria dlib verrà utilizzato per rilevare la posizione delle strutture facciali chiave sul viso e verrà utilizzato python OpenCV per visualizzare le parti del viso rilevate.
Componenti richiesti
Componenti hardware
- Raspberry Pi 3
- Modulo fotocamera Pi
Software e servizi in linea
- OpenCV
- Dlib
- Python3
Prima di procedere con questo Raspberry Pi 3 Facial Landmark Detection , innanzitutto, dobbiamo 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.
Per saperne di più su come interfacciare la fotocamera Pi con Raspberry Pi, segui i nostri tutorial precedenti.
Installazione di OpenCV in Raspberry Pi
Qui la libreria OpenCV verrà utilizzata per lo scanner QR Raspberry Pi. Per installare OpenCV, prima aggiorna il Raspberry Pi.
sudo apt-get update
Quindi installa 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
Successivamente, installa OpenCV in Raspberry Pi utilizzando il comando seguente.
pip3 installa opencv-contrib-python == 4.1.0.25
In precedenza abbiamo utilizzato OpenCV con Raspberry pi e abbiamo creato molti tutorial su di esso.
- 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 imutils : imutils viene utilizzato per eseguire poche funzioni di elaborazione delle immagini necessarie come traduzione, rotazione, ridimensionamento, scheletrizzazione e visualizzazione di immagini Matplotlib più facilmente con OpenCV. Quindi installa imutils usando il comando seguente:
pip3 installa imutils
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
Come rilevare le parti del viso utilizzando dlib
Useremo il rilevatore di punti di riferimento facciale pre-addestrato della libreria dlib per rilevare la posizione di 68 (x, y)-coordinate che mappano alle strutture facciali sul viso. Il predittore di punti di riferimento facciale dlib è addestrato sul set di dati iBUG 300-W. Di seguito un'immagine contenente gli indici delle 68 coordinate:
Programmazione del Raspberry Pi per il rilevamento dei punti di riferimento del viso
Il codice Python completo per il riconoscimento delle parti del viso con il rilevatore di punti di riferimento facciale pre-addestrato di dlib è 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.
da imutils importa face_utils importa numpy come np importa argparse importa imutils importa dlib importa cv2 da picamera.array importa PiRGBArray da picamera importa PiCamera
Quindi inizializza l'oggetto della telecamera e imposta la risoluzione su (640, 480) e la frequenza dei fotogrammi a 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Ora nelle righe successive, usa l'argomento parser per fornire il percorso al predittore del punto di riferimento facciale.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predittore", richiesto = True, help = "percorso di previsione del punto di riferimento facciale") args = vars (ap.parse_args ())
Nelle righe successive, inizializza il rilevatore facciale pre-addestrato di dlib basato su HOG e carica il predittore facciale pre-addestrato.
rilevatore = dlib.get_frontal_face_detector () predittore = dlib.shape_predictor (args)
Quindi utilizza la funzione capture_continuous per iniziare a catturare i frame dalla fotocamera Raspberry Pi.
per il frame in camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Utilizzare il tasto della tastiera "S" per acquisire un particolare fotogramma. Quindi ridimensiona l'immagine catturata e convertila in scala di grigi.
if key == ord ("s"): image = imutils.resize (image, width = 400) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Utilizzare la funzione di rilevamento della libreria dlib per rilevare i volti nell'immagine acquisita.
rects = rilevatore (grigio, 1)
Scatta la foto su cui è stato eseguito il rilevamento del viso, determina i punti di riferimento del viso e converti i 68 punti in un array NumPy. Esegui il ciclo su ciascuna delle regioni del viso individualmente.
for (i, rect) in enumerate (rects): shape = predicitor (gray, rect) shape = face_utils.shape_to_np (shape)
Quindi, prendi una copia dell'immagine originale e usala per il ciclo per disegnare il nome della parte del viso sull'immagine. Il colore del testo sarà rosso, puoi cambiarlo in un altro colore cambiando i valori RGB.
for (name, (i, j)) in face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Ora eseguiremo il loop sulle parti del viso rilevate e utilizzeremo la funzione di disegno OpenCV per disegnare cerchi su queste parti del viso. Puoi seguire questo documento OpenCV per ulteriori informazioni sulle funzioni di disegno
for (x, y) in forma: cv2.circle (clone, (x, y), 1, (0, 0, 255), -1)
Ora nelle righe successive, estrarremo ciascuna parte della faccia come immagine separata calcolando il riquadro di delimitazione delle coordinate di una parte della faccia specifica. L'immagine estratta verrà ridimensionata a 250 pixel.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = immagine roi = imutils.resize (roi, larghezza = 250, inter = cv2.INTER_CUBIC)
Ora nelle ultime righe del codice, visualizza le parti del viso con i loro nomi e un'immagine separata di quella parte. Utilizzare il tasto ESC per modificare la regione del viso.
cv2.imshow ("ROI", roi) cv2.imshow ("Image", clone) cv2.waitKey (0)
Prova del riconoscimento della parte del viso
Per testare il progetto, creare una directory e raggiungerla utilizzando i comandi seguenti:
mkdir rilevatore di parti del viso cd rilevatore di parti del viso
Ora scarica il file shape_predictor_68_face_landmarks.dat da questo link, quindi estrai e copia il file shape_predictor_68_face_landmarks.dat all'interno di questa libreria, quindi apri un nuovo file chiamato detect.py e incolla il codice indicato di seguito.
Ora avvia il codice python usando il comando seguente:
python3 detect.py --shape-predittore shape_predictor_68_face_landmarks.dat
Vedrai una finestra che mostra una vista dal vivo dalla tua telecamera. Quindi premere il tasto "S" per selezionare un fotogramma dal live streaming. Vedrai dei punti rossi sulla zona della bocca. Utilizzare il tasto ESC per vedere le altre parti del viso.
Di seguito sono riportati il codice Python completo e il video dimostrativo.