- Composants requis
- Installer OpenCV dans Raspberry Pi
- Comment détecter les parties du visage à l'aide de dlib
- Programmation du Raspberry Pi pour la détection des points de repère faciaux
- Test de la reconnaissance des parties du visage
La détection des points de repère du visage est le processus de détection de diverses parties du visage telles que les sourcils, les yeux, le nez, la bouche et la mâchoire. Il existe de nombreuses applications qui utilisent les techniques de détection des points de repère faciaux.
Auparavant, nous construisions un système de reconnaissance faciale utilisant OpenCV, aujourd'hui nous utiliserons le même OpenCV avec Raspberry Pi pour la détection des points de repère faciaux. Un module de détection de repère facial pré-formé de la bibliothèque dlib sera utilisé pour détecter l'emplacement des structures faciales clés sur le visage et python OpenCV sera utilisé pour visualiser les parties du visage détectées.
Composants requis
Composants matériels
- Raspberry Pi 3
- Module de caméra Pi
Logiciels et services en ligne
- OpenCV
- Dlib
- Python3
Avant de procéder à cette Raspberry Pi 3 Détection du visage Point de repère , d' abord, nous devons installer OpenCV, imutils, Dlib, Numpy, et d'autres dépendances dans ce projet. OpenCV est utilisé ici pour le traitement d'images numériques. Les applications les plus courantes du traitement numérique des images sont la détection d'objets, la reconnaissance faciale et le compteur de personnes.
Pour en savoir plus sur la façon d'interfacer la caméra Pi avec Raspberry Pi, suivez nos tutoriels précédents.
Installer OpenCV dans Raspberry Pi
Ici, la bibliothèque OpenCV sera utilisée pour le scanner QR Raspberry Pi. Pour installer OpenCV, mettez d'abord à jour le Raspberry Pi.
sudo apt-get mise à jour
Ensuite, installez les dépendances requises pour installer OpenCV sur votre 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
Après cela, installez OpenCV dans Raspberry Pi à l'aide de la commande ci-dessous.
pip3 installer opencv-contrib-python == 4.1.0.25
Nous avons précédemment utilisé OpenCV avec Raspberry pi et créé de nombreux tutoriels dessus.
- Installer OpenCV sur Raspberry Pi à l'aide de CMake
- Reconnaissance faciale en temps réel avec Raspberry Pi et OpenCV
- Reconnaissance de plaque d'immatriculation à l'aide de Raspberry Pi et OpenCV
- Estimation de la taille de la foule avec OpenCV et Raspberry Pi
Nous avons également créé une série de tutoriels OpenCV à partir du niveau débutant.
Installer imutils : imutils est utilisé pour exécuter quelques fonctions de traitement d'image nécessaires telles que la traduction, la rotation, le redimensionnement, le squelette et l'affichage des images Matplotlib plus facilement avec OpenCV. Alors installez imutils en utilisant la commande ci-dessous:
pip3 installer imutils
Installation de dlib: dlib est la boîte à outils moderne qui contient des algorithmes d'apprentissage automatique et des outils pour les problèmes du monde réel. Utilisez la commande ci-dessous pour installer le dlib.
pip3 installer dlib
Installation de NumPy : NumPy est la bibliothèque de base pour le calcul scientifique qui contient un puissant objet tableau à n dimensions, fournit des outils pour intégrer C, C ++, etc.
Pip3 installer numpy
Comment détecter les parties du visage à l'aide de dlib
Nous allons utiliser le détecteur de repère facial pré-formé de la bibliothèque dlib pour détecter l'emplacement de 68 coordonnées (x, y) qui correspondent aux structures faciales du visage. Le prédicteur de repère facial dlib est formé sur l'ensemble de données iBUG 300-W. Une image contenant les index des 68 coordonnées est donnée ci-dessous:
Programmation du Raspberry Pi pour la détection des points de repère faciaux
Le code Python complet pour la reconnaissance des parties du visage avec le détecteur de repère facial pré-formé de la dlib est donné à la fin de la page. Nous expliquons ici certaines parties importantes du code pour une meilleure compréhension.
Donc, comme d'habitude, démarrez le code en incluant toutes les bibliothèques requises.
depuis imutils importer face_utils importer numpy comme np importer argparse importer imutils importer dlib importer cv2 de picamera.array importer PiRGBArray depuis picamera importer PiCamera
Ensuite, initialisez l'objet caméra et réglez la résolution à (640, 480) et la fréquence d'images à 30 ips
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Dans les lignes suivantes, utilisez l'analyseur d'arguments pour fournir le chemin vers le prédicteur de repère facial.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", required = True, help = "chemin du prédicteur de repère facial") args = vars (ap.parse_args ())
Dans les lignes suivantes, initialisez le détecteur de visage pré-entraîné du dlib basé sur HOG et chargez le prédicteur de repère facial pré-entraîné.
detecteur = dlib.get_frontal_face_detector () prédicteur = dlib.shape_predictor (args)
Utilisez ensuite la fonction capture_continuous pour commencer à capturer les images de la caméra Raspberry Pi.
pour frame dans 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)
Utilisez la touche du clavier «S» pour capturer une image particulière. Redimensionnez ensuite l'image capturée et convertissez-la en niveaux de gris.
si clé == ord ("s"): image = imutils.resize (image, largeur = 400) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Utilisez la fonction de détection de la bibliothèque dlib pour détecter les visages dans l'image capturée.
rects = détecteur (gris, 1)
Prenez la photo sur laquelle la détection de visage a été effectuée, déterminez les repères faciaux et convertissez les 68 points en un tableau NumPy. Faites une boucle sur chacune des régions du visage individuellement.
for (i, rect) in enumerate (rects): shape = prédicteur (gris, rect) shape = face_utils.shape_to_np (shape)
Ensuite, prenez une copie de l'image originale et utilisez -la pour la boucle pour dessiner le nom de la partie du visage sur l'image. La couleur du texte sera rouge, vous pouvez la changer en une autre couleur en changeant les valeurs RVB.
pour (nom, (i, j)) dans face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clone, nom, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Nous allons maintenant boucler sur les parties de visage détectées et utiliser la fonction de dessin OpenCV pour dessiner des cercles sur ces parties de visage. Vous pouvez suivre ce document OpenCV pour plus d'informations sur les fonctions de dessin
pour (x, y) en forme: cv2.circle (clone, (x, y), 1, (0, 0, 255), -1)
Dans les lignes suivantes, nous allons extraire chaque partie de face comme une image distincte en calculant la boîte englobante des coordonnées d'une partie de face spécifique. L'image extraite sera redimensionnée à 250 pixels.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = image roi = imutils.resize (roi, largeur = 250, inter = cv2.INTER_CUBIC)
Maintenant, dans les dernières lignes du code, affichez les parties du visage avec leurs noms et une image distincte de cette partie. Utilisez la touche ÉCHAP pour changer la région du visage.
cv2.imshow ("ROI", roi) cv2.imshow ("Image", cloner) cv2.waitKey (0)
Test de la reconnaissance des parties du visage
Pour tester le projet, créez un répertoire et accédez-y à l'aide des commandes ci-dessous:
détecteur de partie de visage mkdir détecteur de partie de visage cd
Téléchargez maintenant le fichier shape_predictor_68_face_landmarks.dat à partir de ce lien, puis extrayez et copiez le fichier shape_predictor_68_face_landmarks.dat dans cette bibliothèque, puis ouvrez un nouveau fichier nommé detect.py et collez le code ci-dessous.
Maintenant, lancez le code python en utilisant la commande ci-dessous:
python3 detect.py --prédicteur de forme shape_predictor_68_face_landmarks.dat
Vous verrez une fenêtre montrant une vue en direct de votre caméra. Appuyez ensuite sur la touche «S» pour sélectionner une image dans le flux en direct. Vous verrez des points rouges sur votre bouche. Utilisez la touche ESC pour voir les autres parties du visage.
Le code Python complet et la vidéo de démonstration sont donnés ci-dessous.