Concevoir un détecteur de visage avec le langage Python
La détection de visage est une technologie fascinante qui permet de repérer et d'identifier des visages dans des images ou des vidéos. Dans cet article, nous allons apprendre à créer un détecteur de visage simple en utilisant Python et la bibliothèque OpenCV.
Objectif
L'objectif de cet article est de vous fournir les instructions et le code nécessaires pour créer un programme Python capable de détecter des visages en temps réel à partir de votre webcam.
1. Installation des modules
Avant de commencer, assurez-vous d'avoir installé les modules suivants : * Python 3 * OpenCV (>= 4.5.1)
Pour installer OpenCV sous Windows,Linux vous pouvez utiliser la commande suivante :
pip install opencv-python
2. Chargement du classifieur de visages
Le classifieur de visages est un fichier XML qui contient les informations nécessaires pour détecter les visages dans une image. Nous allons utiliser le classifieur "haarcascade_frontalface_default.xml" qui est disponible gratuitement sur le site web d'OpenCV.
import cv2
# Chargement du classifieur de visages pré-entrainé
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
3. Démarrage de la capture vidéo
Nous allons utiliser la fonction VideoCapture d'OpenCV pour capturer des frames vidéo à partir de la webcam.
# Démarrage de la capture vidéo
cap = cv2.VideoCapture(0)
4. Détection des visages
La fonction detectMultiScale du classifieur de visages permet de détecter les visages dans une image.
# Detection
while True:
# Capture d'une frame
ret, frame = cap.read()
# Conversion de l'image en niveaux de gris pour la détection des visages
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Détection des visages dans l'image
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
5. Affichage des résultats
Pour chaque visage détecté, nous allons dessiner un rectangle autour de celui-ci.
# Dessin du rectangle autour des visages détectés
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
# Affichage du résultat
cv2.imshow('Face Detection', frame)
# Sortie de la boucle si la touche 'q' est enfoncée
if cv2.waitKey(1) & 0xFF == ord('q'):
break
6. Libération des ressources
Enfin, nous libérons la capture vidéo et fermons toutes les fenêtres OpenCV.
# Libération des ressources
cap.release()
cv2.destroyAllWindows()
Code complet
Double taper sur le code pour copier :)
import cv2
# Chargement du classifieur de visages pré-entrainé
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# Démarrage de la capture vidéo
cap = cv2.VideoCapture(0)
while True:
# Capture d'une frame
ret, frame = cap.read()
# Conversion de l'image en niveaux de gris pour la détection des visages
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Détection des visages dans l'image
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# Dessin du rectangle autour des visages détectés
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
# Affichage du résultat
cv2.imshow('Face Detection', frame)
# Sortie de la boucle si la touche 'q' est enfoncée
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Libération des ressources
cap.release()
cv2.destroyAllWindows()
Explication rapide du code
Le code ci-dessus utilise la bibliothèque OpenCV pour capturer des frames vidéo à partir de la webcam et pour détecter les visages dans chaque frame.
- import cv2: Importe la bibliothèque OpenCV.
- face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'): Charge le classifieur de visages pré-entrainé "haarcascade_frontalface_default.xml".
- cap = cv2.VideoCapture(0): Démarre la capture vidéo à partir de la webcam (index 0).
- while True: Boucle infinie pour capturer et traiter les frames en temps réel.
- ret, frame = cap.read(): Capture une frame et stocke l'image dans la variable `frame`.
- gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY): Convertit l'image en niveaux de gris pour améliorer la détection des visages.
- faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)): Détecte les visages dans l'image en niveaux de gris et stocke les coordonnées des rectangles dans la variable `faces`.
- for (x, y, w, h) in faces: Boucle pour dessiner un rectangle autour de chaque visage détecté.
- cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2): Dessine un rectangle bleu autour du visage avec les coordonnées `x`, `y`, `w` et `h`.
- cv2.imshow('Face Detection', frame): Affiche la frame avec les visages détectés.
- if cv2.waitKey(1) & 0xFF == ord('q'): break: Attends une pression sur la touche `q` pour quitter la boucle.
- cap.release(): Libère la capture vidéo.
- cv2.destroyAllWindows(): Ferme toutes les fenêtres OpenCV.
Commentaires