Détection de visages OpenCV
La détection de visages est un problème classique en vision par ordinateur, et OpenCV fournit une méthode de détection de visages basée sur le classificateur de caractéristiques Haar, simple à utiliser et efficace.
Cet article détaillera comment utiliser lecv2.CascadeClassifier()pour effectuer la détection de visages.
Introduction au classificateur de caractéristiques Haar
Le classificateur de caractéristiques Haar est une méthode d'apprentissage automatique basée sur les caractéristiques de type Haar, proposée par Paul Viola et Michael Jones en 2001. Il extrait des caractéristiques de type Haar des images et utilise l'algorithme AdaBoost pour l'entraînement, générant finalement un classificateur pour détecter des cibles (telles que des visages) dans les images.
Les caractéristiques de type Haar sont des caractéristiques rectangulaires simples, extraites en calculant les différences de valeurs de pixels entre différentes régions d'une image. Par exemple, une caractéristique de type Haar peut être la différence entre les sommes des valeurs de pixels de deux rectangles adjacents. Ces caractéristiques peuvent capturer des informations structurelles telles que des bords et des lignes dans une image.
Classificateur de caractéristiques Haar dans OpenCV
OpenCV fournit des classificateurs de caractéristiques Haar pré-entraînés qui peuvent être directement utilisés pour la détection de visages. Ces classificateurs sont stockés sous forme de fichiers XML contenant les paramètres du modèle entraîné.
Dans OpenCV, lacv2.CascadeClassifier()classe est utilisée pour charger et utiliser ces classificateurs.
Étapes de mise en œuvre pour la détection de visages
Charger le modèle de classificateur de caractéristiques Haar :Utilisez
cv2.CascadeClassifier()Charger le modèle pré-entraîné de détection de visages.Lire l'image :Utilisez
cv2.imread()Lire l'image à détecter.Convertir en niveaux de gris :Convertissez l'image en niveaux de gris, car le classificateur de caractéristiques Haar s'exécute plus rapidement sur les images en niveaux de gris.
Détecter les visages :Utilisez
detectMultiScale()la méthode pour détecter les visages dans l'image.Dessiner les résultats de détection :Dessinez des rectangles autour des visages détectés dans l'image.
Afficher le résultat :Affichez le résultat de la détection.
Chargement du classificateur de caractéristiques Haar
Avant d'utiliser le classificateur de caractéristiques Haar, vous devez d'abord charger le modèle de classificateur pré-entraîné. OpenCV fournit plusieurs classificateurs pré-entraînés, tels que celui pour la détection de visages.haarcascade_frontalface_default.xml。
Exemple
# Charger le classificateur de caractéristiques Haar
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
Lecture d'une image
Avant d'effectuer la détection de visages, vous devez lire l'image à détecter. OpenCV fournit lacv2.imread()fonction pour lire une image.
Exemple
image = cv2.imread('image.jpg')
Conversion en niveaux de gris
Le classificateur de caractéristiques Haar effectue généralement la détection sur des images en niveaux de gris, il est donc nécessaire de convertir l'image couleur en niveaux de gris.
Exemple
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Exécution de la détection de visages
Utilisercv2.CascadeClassifier.detectMultiScale()méthode pour effectuer la détection de visages. Cette méthode renvoie un rectangle (x, y, w, h) pour chaque région de visage détectée, où (x, y) est la coordonnée du coin supérieur gauche du rectangle, et w et h sont respectivement la largeur et la hauteur du rectangle.
Exemple
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
scaleFactor: Indique le rapport par lequel la taille de l'image est réduite à chaque fois, utilisé pour construire la pyramide d'images. La valeur par défaut est 1.1.minNeighbors: Indique le nombre de voisins que chaque rectangle candidat doit conserver. La valeur par défaut est 5.minSize: Indique la taille minimale de la cible de détection. La valeur par défaut est (30, 30).
Dessin des résultats de détection
Après avoir détecté des visages, vous pouvez utiliser lacv2.rectangle()méthode pour dessiner des rectangles sur l'image, en marquant les positions des visages.
Exemple
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
Affichage des résultats
Enfin, utilisez lacv2.imshow()méthode pour afficher les résultats de détection.
Exemple
cv2.imshow('Visages détectés', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Exemple de code complet
Voici un exemple complet de code de détection de visages OpenCV :
Exemple
# Charger le classificateur de caractéristiques Haar
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# Lire l'image
image = cv2.imread('image.jpg')
# Convertir en image en niveaux de gris
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Effectuer la détection de visages
faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# Dessiner les résultats de détection
for (x, y, w, h) in faces:
cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
# Afficher le résultat
cv2.imshow('Visages détectés', image)
cv2.waitKey(0)
cv2.destroyAllWindows()