Vous êtes-vous déjà demandé comment Snapchat applique avec précision divers filtres sur votre visage? Votre smartphone fait-il de la magie lorsqu'il se déverrouille en utilisant les traits de votre visage? Non, vous regardez simplement Face Detection en action.

La détection de visage est une technologie d'intelligence artificielle qui peut identifier les visages humains dans une image ou une vidéo numérique. Découvrez comment créer un programme de détection de visage en temps réel en moins de 25 lignes de code avec le légendaire algorithme Haar Cascade.

Qu'est-ce que la cascade de Haar ?

Haar Cascade est un algorithme de détection d'objets introduit par Paul Viola et Michael Jones pour détecter les visages dans les images ou les vidéos. Une fonction en cascade est entraînée à l'aide de nombreuses images positives et négatives qui peuvent ensuite être utilisées pour identifier n'importe quel objet ou visage dans d'autres médias. Ces fichiers entraînés sont disponibles dans le Référentiel OpenCV GitHub.

instagram viewer

En utilisant une approche de fenêtre glissante, une fenêtre de taille fixe itère sur une image de gauche à droite, de haut en bas. A chaque phase, la fenêtre s'arrête et classe si la zone contient un visage ou non.

OpenCV, un outil de vision par ordinateur, fonctionne avec un modèle Haar Cascade pré-formé pour classer les fonctionnalités. Chaque phase vérifie cinq entités: deux entités de bord, deux entités linéaires et une entité à quatre rectangles.

À l'observation, la zone des yeux apparaît plus sombre que la zone des joues tandis que la zone du nez semble plus claire que la zone des yeux. Vous pouvez visualiser ces fonctionnalités de la manière ci-dessous.

En utilisant ces fonctionnalités et le calcul des pixels, l'algorithme identifie plus de 100 000 points de données. Vous pouvez ensuite utiliser un algorithme Adaboost pour améliorer la précision et supprimer les fonctionnalités non pertinentes. Sur de nombreuses itérations, cette approche minimise le taux d'erreur et augmente le poids des caractéristiques jusqu'à ce qu'elle atteigne une précision acceptable.

Cependant, la technique de la fenêtre glissante s'arrête si un cas de test particulier échoue et cela coûte cher en calcul. Pour résoudre ce problème, vous pouvez appliquer le concept de cascade de classificateurs. Au lieu d'appliquer toutes les fonctionnalités dans une seule fenêtre, cette approche les regroupe et les applique par étapes.

Si la fenêtre échoue à la première étape, le processus la rejette, sinon elle continue. Cela conduit à une diminution drastique du nombre d'opérations à effectuer et rend son utilisation viable pour les applications en temps réel.

Flux de travail de détection de visage

Suivez cet algorithme pour créer votre programme de détection de visage :

  1. Chargez l'algorithme de face frontale en cascade de Haar.
  2. Initialisez la caméra.
  3. Lire les images de la caméra.
  4. Convertissez des images couleur en niveaux de gris.
  5. Obtenez les coordonnées du visage.
  6. Dessinez un rectangle et mettez le message approprié.
  7. Affichez la sortie.

Qu'est-ce qu'OpenCV ?

OpenCV est une bibliothèque open-source de vision par ordinateur et d'apprentissage automatique. Il dispose de plus de 2 500 algorithmes optimisés pour diverses applications. Celles-ci incluent la détection de visage/objet, la reconnaissance, la classification et bien d'autres.

Confidentialité de vos données faciales est une préoccupation distincte. Des centaines d'entreprises de premier plan telles que Google, IBM et Yahoo utilisent OpenCV dans leurs applications. Certaines personnes qui visent à garder leurs données privées ont démontré il existe des moyens d'éviter la reconnaissance faciale.

Pour installer OpenCV en Python, utilisez la commande :

pépin installer opencv-python

Comment créer un programme de détection de visage à l'aide de Python

Suivez ces étapes pour créer le détecteur de visage :

Cet exemple de code, ainsi que le fichier d'algorithme Haar Cascade, sont disponibles dans un Référentiel GitHub et est libre d'utilisation sous la licence MIT.

  1. Télécharger le Haar Cascade Face frontale XML par défaut fichier et placez-le au même emplacement que votre programme Python.
  2. Importez la bibliothèque OpenCV.
    # importer les bibliothèques requises
    importer cv2
  3. Stockez le fichier d'algorithme Haar Cascade Frontal Face pour un référencement facile.
    # chargement du fichier d'algorithme de cas haar dans la variable alg
    alg = "haarcascade_frontalface_default.xml"
  4. Utilisez la classe CascadeClassifier pour charger un fichier XML dans OpenCV.
    # passage de l'algorithme à OpenCV
    haar_cascade = cv2.CascadeClassifier (alg)
  5. Capturez la vidéo de la caméra. Passez 0 au Capture vidéo() fonction pour utiliser votre appareil photo principal. Si vous avez connecté une caméra externe, vous pouvez utiliser les numéros successifs 1, 2, etc. pour l'utiliser à la place.
    # capturer le flux vidéo de la caméra
    cam = cv2.VideoCapture (0)
  6. Configurez une boucle infinie pour lire l'entrée de la caméra image par image. Le lire() La fonction renvoie deux paramètres. La première valeur est de type booléen indiquant si l'opération a réussi ou non. Le deuxième paramètre contient le cadre réel avec lequel vous allez travailler. Rangez ce cadre dans le image variable.
    alors queVrai:
    _, img = cam.read()
  7. Définissez le texte par défaut pour qu'il apparaisse comme Visage non détecté. Lorsqu'elle est détectée, mettez à jour la valeur de cette variable.
     texte = "Visage non détecté"
  8. L'entrée reçue du monde réel est colorée, au format BGR. BGR signifie bleu, vert et rouge. Cela crée beaucoup de traitement pour les applications de vision par ordinateur. Pour réduire cela, utilisez un format en niveaux de gris.
    # convertir chaque image de BGR en niveaux de gris
    grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY)
    Passer le format de trame et de code de conversion, COLOR_BGR2GRAY, pour cvtColor() pour changer chaque image de la vidéo de couleur en niveaux de gris.
  9. Utiliser detectMultiScale() pour détecter les visages. Cette méthode prend trois paramètres en entrée. La première est l'image source, grayImg. Le deuxième paramètre est le facteur d'échelle. Cela spécifie de combien vous devez réduire la taille de l'image à chaque échelle d'image. Utilisez la valeur par défaut 1,3 comme facteur d'échelle. Plus le facteur d'échelle est élevé, moins il y a d'étapes et plus l'exécution est rapide. Cependant, il y a aussi une plus grande probabilité de visages manquants. Le troisième paramètre est minNeighbors. Cela spécifie combien de voisins chaque rectangle candidat doit avoir pour le conserver. Plus la valeur est élevée, plus le risque de faux positif est faible, mais cela signifie également qu'il manque des traces de visage peu claires.
    # détecter les visages à l'aide de Haar Cascade 
    visage = haar_cascade.detectMultiScale (grayImg, 1.3, 4)
  10. Lorsque vous détectez un visage, vous obtenez quatre coordonnées. x représente la coordonnée x, y représente la coordonnée y, w représente la largeur et h représente la hauteur. Mettre à jour le texte pour Visage détecté et dessinez un rectangle en utilisant ces coordonnées. La couleur du rectangle est le format vert (BGR) avec une épaisseur de deux pixels.
    # dessinez un rectangle autour du visage et mettez à jour le texte sur Visage détecté
    pour (x, y, w, h) dans face :
    texte = "Visage détecté"
    cv2.rectangle(image, (X, y), (X + w, y + h), (0, 255, 0), 2)
  11. Imprimez éventuellement le texte sur la console de sortie. Affichez le texte à l'écran en utilisant le cadre capturé comme source, le texte tel qu'obtenu dans le texte ci-dessus, la police style de FONT_HERSHEY_SIMPLEX, facteur d'échelle de police de 1, couleur bleue, épaisseur de deux pixels et type de ligne de AA.
    # afficher le texte sur l'image
    imprimer(texte)
    image = cv2.putText (img, texte, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)
  12. Afficher la fenêtre avec le titre Détection facial et l'image. Utilisez le waitkey() méthode pour afficher la fenêtre pendant 10 millisecondes et vérifier si une touche a été enfoncée. Si un utilisateur appuie sur la Esc touche (valeur ASCII 27), sortir de la boucle.
    # affichez la fenêtre de sortie et appuyez sur la touche d'échappement pour quitter
    cv2.imshow("Détection facial", image)
    clé = cv2.waitKey (10)

    si clé == 27 :
    casser

  13. Enfin, libérez l'objet caméra du programme python et fermez toutes les fenêtres.
    came.libérer()
    cv2.destroyAllWindows()

Détection de visage à l'aide de Python en action

Lorsqu'un visage est en vue, vous devriez voir une sortie comme celle-ci :

Lorsqu'aucun visage n'est présent, vous verrez un message comme celui-ci :

Limitations de la détection des visages à l'aide de l'algorithme Haar Cascade

Bien que cet algorithme soit léger, avec une petite taille de modèle et fonctionne rapidement, il existe quelques limitations :

  • Dans une vidéo en temps réel, le visage doit être dans le champ de vision de la caméra. Si le visage est trop loin ou trop près ou trop incliné, l'algorithme ne parvient pas à capter les traits.
  • Il s'agit d'un algorithme de face frontale, vous ne pouvez donc pas détecter les vues latérales.
  • Résultats faux positifs élevés. Il détecte souvent des zones comme des visages même s'il n'y a pas de visage présent.
  • Nécessite des conditions d'éclairage optimales. Un éclairage excessif ou faible nuit à la précision de l'algorithme.

Les nombreuses applications de la détection de visage

La détection de visage a un large éventail d'applications dans le monde d'aujourd'hui. Vous pouvez l'utiliser pour la reconnaissance faciale dans les smartphones, les maisons, les véhicules et les points de contrôle de l'immigration. La détection faciale est déjà courante dans la surveillance CCTV, les filtres de médias sociaux et le suivi automatique des visages dans la cinématographie.

Ce n'est que le début de cette merveilleuse technologie. Avec les progrès, nous pourrions être en mesure d'identifier les enfants disparus, d'attraper des criminels et de prévenir des crimes tels que le vol d'identité.