Reconnaissance faciale en temps réel sur Raspberry Pi – Guide complet
Ce tutoriel vous guide dans la construction d'un système de reconnaissance faciale en temps réel sur un Raspberry Pi en utilisant OpenCV et une Pi-Cam. De la configuration matérielle à l'entraînement du reconnaisseur, chaque étape est présentée avec des extraits de code clairs et des conseils pratiques.
Vous verrez ci-dessous une démonstration en direct de la Pi-Cam détectant des visages en temps réel.
Le projet repose sur la bibliothèque open-source OpenCV, optimisée pour les performances en temps réel. Bien que nous nous concentrions sur un Raspberry Pi sous Raspbian, le même code fonctionne sur macOS et Windows avec seulement de légers ajustements.
3 Phases
Un flux de travail complet de reconnaissance faciale peut être décomposé en trois étapes distinctes :
- Détection de visages et collecte de données
- Entraînement du reconnaisseur
- Reconnaissance faciale en temps réel
Étape 1 : Liste du matériel (BOM)
Composants essentiels :
- Raspberry Pi 3 – 32,00 $
- Module caméra mini 5 MP 1080p OV5647 – 13,00 $
Étape 2 : Installation d'OpenCV 3
Nous recommandons de suivre le guide d'Adrian Rosebrock pour une installation propre d'OpenCV 3 sur Raspbian Stretch. Après le tutoriel, activez l'environnement virtuel Python dédié :
source ~/.profile
workon cv
Une fois dans l'environnement, vérifiez la version Python et l'installation d'OpenCV :
python
>>> import cv2
>>> cv2.__version__
Vous devriez voir un numéro de version comme 3.3.0 ou plus récent.
Étape 3 : Test de votre caméra
Si la caméra n'est pas détectée, activez le pilote avec :
sudo modprobe bcm2835-v4l2
L'extrait Python suivant ouvre le flux Pi-Cam, l'affiche en couleur et en niveaux de gris, et le retourne verticalement (ajustez si l'orientation de votre caméra diffère) :
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, frame = cap.read()
frame = cv2.flip(frame, -1)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame', frame)
cv2.imshow('gray', gray)
if cv2.waitKey(30) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
Exécutez avec python simpleCamTest.py (disponible sur le GitHub du projet). Appuyez sur ESC pour quitter.
Étape 4 : Détection de visages
Le classifieur en cascade de Haar d'OpenCV est une approche d'apprentissage automatique légère pour détecter les visages. Téléchargez le fichier XML pré-entraîné (haarcascade_frontalface_default.xml) et placez-le dans un dossier Cascades. Le script suivant démontre la détection de visages en temps réel avec des cadres englobants :
import cv2
faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
while True:
ret, img = cap.read()
img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(
gray, scaleFactor=1.2, minNeighbors=5, minSize=(20, 20)
)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
cv2.imshow('video', img)
if cv2.waitKey(30) & 0xff == 27:
break
cap.release()
cv2.destroyAllWindows()
Les paramètres detectMultiScale contrôlent la sensibilité : scaleFactor réduit la taille de l'image à chaque itération, minNeighbors filtre les faux positifs, et minSize définit la plus petite taille de visage détectable.
Exemples supplémentaires
Explorez plus d'options de détection sur le GitHub du projet :
- faceEyeDetection.py
- faceSmileDetection.py
- faceSmileEyeDetection.py
Tutoriel Haar Cascade Object Detection – Face & Eye
Étape 5 : Collecte de données
La collecte d'un jeu de données étiqueté est essentielle pour l'entraînement. Créez un dossier de projet (ex: FacialRecognitionProject) et un sous-répertoire dataset :
mkdir FacialRecognitionProject
cd FacialRecognitionProject
mkdir dataset
Téléchargez le fichier Haar Cascade à la racine du projet. Puis exécutez 01_face_dataset.py pour capturer 30 images de visage par utilisateur :
import cv2
import os
cam = cv2.VideoCapture(0)
cam.set(3, 640)
cam.set(4, 480)
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face_id = input('\nEntrez l\'ID utilisateur (numérique) et appuyez sur <Entrée> → ')
print('\n[INFO] Initialisation de la capture faciale. Regardez la caméra…')
count = 0
while True:
ret, img = cam.read()
img = cv2.flip(img, -1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_detector.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
count += 1
cv2.imwrite(f'dataset/User.{face_id}.{count}.jpg', gray[y:y+h, x:x+w])
cv2.imshow('image', img)
if cv2.waitKey(100) & 0xff == 27 or count >= 30:
break
if count >= 30:
break
cam.release()
cv2.destroyAllWindows()
print('\n[INFO] Fin du programme et nettoyage.')
Chaque image est nommée User.{id}.{count}.jpg (ex: User.1.4.jpg). Ajustez le nombre d'échantillons selon les besoins.
Étape 6 : Entraînement
En utilisant les images collectées, entraînez un reconnaisseur facial OpenCV. Le modèle résultant est sauvegardé sous forme de fichier .yml dans un dossier trainer. Consultez le script d'entraînement complet dans le dépôt du projet pour les détails d'implémentation.
En savoir plus : Reconnaissance faciale en temps réel – Projet complet
Processus de fabrication
- Maîtriser les opérateurs Python : Guide complet
- Maîtriser les dictionnaires Python : création, manipulation et techniques avancées
- Installer Google Assistant sur un MATRIX Voice Raspberry Pi – Guide étape par étape
- Speathe : Communication pilotée par la respiration pour utilisateurs paralysés
- Construire une porte à reconnaissance faciale sécurisée avec Windows IoT et Raspberry Pi
- Suivi d'objets automatisé par vision avec Raspberry Pi et OpenCV
- Créer un Reconnaissance de Chiffres sur Raspberry Pi avec TensorFlow et OpenCV
- Construire un Rover Windows IoT Core avec Raspberry Pi 2 – Guide débutant à avancé
- Étendre GoPiGo v2 sur Windows 10 IoT Core pour Raspberry Pi 3