- Components necessaris
- Instal·lació d’OpenCV a Raspberry Pi
- Com detectar les parts facials mitjançant dlib
- Programació del Raspberry Pi per a la detecció de punts de referència facials
- Prova del reconeixedor de peces facials
La detecció de fites facials és el procés de detectar diverses parts de la cara com ara les celles, els ulls, el nas, la boca i la mandíbula. Hi ha moltes aplicacions que fan servir tècniques de detecció de punts de referència facials.
Anteriorment, vam crear un sistema de reconeixement facial mitjançant OpenCV, avui utilitzarem el mateix OpenCV amb Raspberry Pi per a la detecció de punts de referència facial. S’utilitzarà un mòdul de detector de fites facials pre-entrenat de la biblioteca dlib per detectar la ubicació de les estructures facials clau a la cara i s’utilitzarà OpenCV de pitó per visualitzar les parts de la cara detectades.
Components necessaris
Components de maquinari
- Raspberry Pi 3
- Mòdul de càmera Pi
Programari i serveis en línia
- OpenCV
- Dlib
- Python3
Abans de continuar amb aquesta Raspberry Pi 3 Facial Landmark Detection , 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.

Per obtenir més informació sobre com connectar la càmera Pi amb Raspberry Pi, seguiu els nostres tutorials anteriors.
Instal·lació d’OpenCV a Raspberry Pi
Aquí s’utilitzarà la biblioteca OpenCV per a l’escàner QR Raspberry Pi. Per instal·lar l'OpenCV, primer, actualitzeu el Raspberry Pi.
sudo apt-get update
A continuació, instal·leu 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
Després, instal·leu l'OpenCV a Raspberry Pi mitjançant l'ordre següent.
pip3 instal·la opencv-contrib-python == 4.1.0.25
Anteriorment hem utilitzat OpenCV amb Raspberry pi i hi hem creat molts tutorials.
- 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’ imutils : imutils s’utilitza per executar poques funcions de processament d’imatges necessàries com ara traducció, rotació, redimensionament, esqueletització i visualització d’imatges de Matplotlib més fàcils amb OpenCV. Per tant, instal·leu imutils amb l'ordre següent:
pip3 instal·lar imutils
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
Com detectar les parts facials mitjançant dlib
Utilitzarem el detector de fites facials pre-entrenat de la biblioteca dlib per detectar la ubicació de les coordenades de 68 (x, y) que mapen a les estructures facials de la cara. El predictor de fites facials dlib s’entren en el conjunt de dades iBUG 300-W. A continuació es mostra una imatge que conté els índexs de les 68 coordenades:


Programació del Raspberry Pi per a la detecció de punts de referència facials
Al final de la pàgina es proporciona un codi python complet per al reconeixement de parts facials amb el detector de punts de referència facial prèviament entrenat del dlib. 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.
d'importació d'imutils importació face_utils importació numpy com importació np importació d'arguts importació d'imutils importació dlib cv2 de picamera.array importació PiRGBArray d'importació de càmera PiCamera
A continuació, inicialitzeu l'objecte de la càmera i configureu la resolució a (640, 480) i la velocitat de fotogrames a 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Ara, a les línies següents, utilitzeu l'analitzador d'arguments per proporcionar el camí cap al predictor de fites facials.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", required = True, help = "camí de predicció del punt de referència facial") args = vars (ap.parse_args ())
A les següents línies, inicialitzeu el detector de cares pre-entrenat del dlib basat en HOG i carregueu el predictor de fites facials pre-entrenat.
detector = dlib.get_frontal_face_detector () predictor = dlib.shape_predictor (args)
A continuació, utilitzeu la funció capture_continuous per començar a capturar els fotogrames des de la càmera Raspberry Pi.
per al fotograma a 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)
Utilitzeu la tecla "S" del teclat per capturar un marc concret. A continuació, canvieu la mida de la imatge capturada i converteu-la a escala de grisos.
if key == ord ("s"): image = imutils.resize (image, width = 400) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Utilitzeu la funció de detector de la biblioteca dlib per detectar les cares de la imatge capturada.
rects = detector (gris, 1)
Feu la foto en què s'ha realitzat la detecció de cares, determineu les fites facials i convertiu els 68 punts en una matriu NumPy. Feu un bucle sobre cadascuna de les regions de la cara individualment.
per a (i, rect) en enumerar (rectes): forma = predictor (gris, rect) forma = cara_utils.shape_to_np (forma)
A continuació, agafeu una còpia de la imatge original i utilitzeu -la per al bucle per dibuixar el nom de la part de la cara a la imatge. El color del text serà vermell; podeu canviar-lo per un altre color canviant els valors RGB.
per a (nom, (i, j)) a face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clon, nom, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Ara farem un bucle sobre les parts de la cara detectades i utilitzarem la funció de dibuix OpenCV per dibuixar cercles en aquestes parts de la cara. Podeu seguir aquest document OpenCV per obtenir més informació sobre les funcions de dibuix
per a (x, y) en forma: cv2.circle (clon, (x, y), 1, (0, 0, 255), -1)
Ara, a les línies següents, extreurem cada part de la cara com una imatge independent calculant el quadre de delimitació de les coordenades d’una part de la cara específica. La imatge extreta es redimensionarà a 250 píxels.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = imatge roi = imutils.resize (roi, amplada = 250, inter = cv2.INTER_CUBIC)
Ara, a les darreres línies del codi, mostreu les parts de la cara amb els seus noms i una imatge independent d’aquesta part. Utilitzeu la tecla ESC per canviar la regió de la cara.
cv2.imshow ("ROI", roi) cv2.imshow ("Imatge", clonar) cv2.waitKey (0)
Prova del reconeixedor de peces facials
Per provar el projecte, creeu un directori i aneu-hi utilitzant les ordres següents:
mkdir face-part-detector cd face-part-detector
Ara descarregueu el fitxer shape_predictor_68_face_landmarks.dat des d’aquest enllaç i, a continuació, extraieu i copieu el fitxer shape_predictor_68_face_landmarks.dat dins d’aquesta biblioteca i, a continuació, obriu un fitxer nou anomenat detect.py i enganxeu el codi que es mostra a continuació.
Ara inicieu el codi python mitjançant l'ordre següent:
python3 detect.py --shape-predictor shape_predictor_68_face_landmarks.dat

Veureu una finestra que mostra una visualització en directe des de la càmera. A continuació, premeu la tecla "S" per seleccionar un marc de la reproducció en directe. Veureu punts vermells a la zona de la boca. Utilitzeu la tecla ESC per veure les altres parts de la cara.
A continuació es mostra el codi complet de Python i el vídeo de demostració.
