Concevoir un détecteur de visage avec le langage Python

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

demo_finale_detecteur_de_face_avec_python

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.
  • A+
  • A-