- Componente necesare
- Instalarea OpenCV în Raspberry Pi
- Cum să detectați părțile feței folosind dlib
- Programarea Raspberry Pi pentru detectarea reperelor faciale
- Testarea dispozitivului de recunoaștere a părților feței
Detectarea reperelor faciale este procesul de detectare a diferitelor părți de pe față, cum ar fi sprâncenele, ochii, nasul, gura și maxilarul. Există multe aplicații care utilizează tehnici de detectare a reperelor faciale.
Anterior am construit un sistem de recunoaștere a feței folosind OpenCV, astăzi vom folosi același OpenCV cu Raspberry Pi pentru detectarea reperelor faciale. Un modul detector de reper facial pre-antrenat din biblioteca dlib va fi folosit pentru a detecta locația structurilor faciale cheie pe față și Python OpenCV va fi utilizat pentru a vizualiza părțile feței detectate.
Componente necesare
Componente hardware
- Raspberry Pi 3
- Modul Camera Pi
Software și servicii online
- OpenCV
- Dlib
- Python3
Înainte de a continua cu această Raspberry Pi 3 Facial Landmark Detection , 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.
Pentru a afla mai multe despre cum să interfațați camera Pi cu Raspberry Pi, urmați tutorialele noastre anterioare.
Instalarea OpenCV în Raspberry Pi
Aici biblioteca OpenCV va fi utilizată pentru scanerul QR Raspberry Pi. Pentru a instala OpenCV, mai întâi, actualizați Raspberry Pi.
sudo apt-get update
Apoi instalați 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
După aceea, instalați OpenCV în Raspberry Pi folosind comanda de mai jos.
pip3 instalează opencv-contrib-python == 4.1.0.25
Am folosit anterior OpenCV cu Raspberry pi și am creat o mulțime de tutoriale pe el.
- 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 imutils : imutils este utilizat pentru a executa câteva funcții necesare de procesare a imaginilor, cum ar fi traducerea, rotația, redimensionarea, scheletizarea și afișarea mai ușoară a imaginilor Matplotlib cu OpenCV. Deci, instalați imutils folosind comanda de mai jos:
pip3 instalează imutils
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
Cum să detectați părțile feței folosind dlib
Vom folosi detectorul de reper facial pre-instruit al bibliotecii dlib pentru a detecta locația coordonatelor 68 (x, y) care mapează structurile faciale de pe față. predictorul de reper facial dlib este instruit pe setul de date iBUG 300-W. O imagine care conține indexurile celor 68 de coordonate este dată mai jos:
Programarea Raspberry Pi pentru detectarea reperelor faciale
Codul complet python pentru recunoașterea părților feței cu detectorul de reper facial pre-antrenat al dlib 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.
din imutils import face_utils import numpy as np import argparse import imutils import dlib import cv2 from picamera.array import PiRGBArray from picamera import PiCamera
Apoi inițializați obiectul camerei și setați rezoluția la (640, 480) și rata cadrelor la 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Acum, în rândurile următoare, utilizați analizorul de argumente pentru a furniza calea către predictorul de reper facial.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", obligatoriu = Adevărat, ajutor = "calea predictorului reperului facial") args = vars (ap.parse_args ())
În rândurile următoare, inițializați detectorul de față pre-antrenat bazat pe HOG și încărcați predictorul de reper facial pre-antrenat.
detector = dlib.get_frontal_face_detector () predictor = dlib.shape_predictor (args)
Apoi utilizați funcția capture_continuous pentru a începe să capturați cadrele de pe camera Raspberry Pi.
pentru cadru în camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", imagine) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Folosiți tasta tastaturii „S” pentru a captura un anumit cadru. Apoi redimensionați imaginea capturată și convertiți-o în tonuri de gri.
if key == ord ("s"): image = imutils.resize (image, width = 400) gri = cv2.cvtColor (imagine, cv2.COLOR_BGR2GRAY)
Utilizați funcția de detector a bibliotecii dlib pentru a detecta fețele din imaginea capturată.
rects = detector (gri, 1)
Faceți fotografia pe care a fost efectuată detectarea feței, determinați reperele faciale și convertiți cele 68 de puncte într-o matrice NumPy. Buclați fiecare regiune a feței în mod individual.
for (i, rect) in enumerate (rects): shape = predictor (gray, rect) shape = face_utils.shape_to_np (shape)
Apoi, luați o copie a imaginii originale și utilizați- o pentru buclă pentru a desena numele părții feței pe imagine. Culoarea textului va fi roșie, o puteți schimba într-o altă culoare schimbând valorile RGB.
pentru (nume, (i, j)) în face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clonă, nume, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Acum vom face o buclă peste părțile feței detectate și vom folosi funcția de desen OpenCV pentru a desena cercuri pe aceste părți ale feței. Puteți urmări acest document OpenCV pentru mai multe informații despre funcțiile de desen
pentru (x, y) în formă: cv2.cerc (clonă, (x, y), 1, (0, 0, 255), -1)
Acum, în rândurile următoare, vom extrage fiecare parte a feței ca o imagine separată, calculând caseta de delimitare a coordonatelor unei anumite părți a feței. Imaginea extrasă va fi redimensionată la 250 pixeli.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = imagine roi = imutils.resize (roi, width = 250, inter = cv2.INTER_CUBIC)
Acum, în ultimele linii ale codului, afișați părțile feței cu numele lor și o imagine separată a părții respective. Utilizați tasta ESC pentru a schimba regiunea feței.
cv2.imshow ("ROI", roi) cv2.imshow ("Imagine", clonare) cv2.waitKey (0)
Testarea dispozitivului de recunoaștere a părților feței
Pentru a testa proiectul, creați un director și navigați la acesta folosind comenzile de mai jos:
mkdir face-part-detector cd face-part-detector
Acum descărcați fișierul shape_predictor_68_face_landmarks.dat din acest link, apoi extrageți și copiați fișierul shape_predictor_68_face_landmarks.dat din această bibliotecă, apoi deschideți un nou fișier numit detect.py și lipiți codul dat mai jos.
Acum lansați codul python folosind comanda de mai jos:
python3 detect.py --shape-predictor shape_predictor_68_face_landmarks.dat
Veți vedea o fereastră care arată o vizualizare live de pe camera dvs. Apoi apăsați tasta „S” pentru a selecta un cadru din fluxul live. Veți vedea puncte roșii pe zona gurii. Utilizați tasta ESC pentru a vedea celelalte părți ale feței.
Codul complet Python și videoclipul demonstrativ sunt prezentate mai jos.