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

  1. Charger le modèle de classificateur de caractéristiques Haar :Utilisezcv2.CascadeClassifier()Charger le modèle pré-entraîné de détection de visages.

  2. Lire l'image :Utilisezcv2.imread()Lire l'image à détecter.

  3. 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.

  4. Détecter les visages :UtilisezdetectMultiScale()la méthode pour détecter les visages dans l'image.

  5. Dessiner les résultats de détection :Dessinez des rectangles autour des visages détectés dans l'image.

  6. 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

import cv2

# 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

# Lire l'image
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

# Convertir en image en niveaux de gris
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

# Effectuer la détection de visages
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

# 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)

Affichage des résultats

Enfin, utilisez lacv2.imshow()méthode pour afficher les résultats de détection.

Exemple

# Afficher le résultat
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

import cv2

# 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()
Autres extensions