Reconnaissance de visages avec Python et OpenCV

Share

.

Facebook
Twitter
WhatsApp

Dans cet article, nous saurons ce qu’est la reconnaissance des visages et en quoi elle est différente de la détection des visages. Nous passerons brièvement sur la théorie de la reconnaissance des visages, puis nous passerons à la section de codage. A la fin de cet article, vous serez en mesure de réaliser un programme de reconnaissance de visage pour reconnaître des visages dans des images ainsi que sur un flux de webcam en direct.

  1. Qu’est-ce que la détection de visage ?
  2. Qu’est-ce que la reconnaissance de visage ?
  3. La reconnaissance de visages à l’aide de Python
    1. La reconnaissance de visages dans un flux de webcam
    2. La reconnaissance de visages dans des images

Qu’est-ce que la détection de visages ?

En vision par ordinateur, un problème essentiel que nous essayons de comprendre est de détecter automatiquement des objets dans une image sans intervention humaine. La détection de visage peut être considérée comme un tel problème où nous détectons des visages humains dans une image. Il peut y avoir de légères différences entre les visages humains, mais globalement, on peut dire que certaines caractéristiques sont associées à tous les visages humains. Il existe plusieurs algorithmes de détection des visages, mais l’algorithme de Viola-Jones est l’une des plus anciennes méthodes utilisées aujourd’hui, et nous l’utiliserons plus tard dans cet article. Vous pouvez passer par l’Algorithme de Viola-Jones après avoir terminé cet article comme je vais le lier à la fin de cet article.

La détection des visages est généralement la première étape vers de nombreuses technologies liées aux visages, comme la reconnaissance ou la vérification des visages. Cependant, la détection de visage peut avoir des applications très utiles. L’application la plus aboutie de la détection de visage serait probablement la prise de photos. Lorsque vous prenez une photo de vos amis, l’algorithme de détection des visages intégré à votre appareil photo numérique détecte où se trouvent les visages et ajuste la mise au point en conséquence.

Pour un tutoriel sur la seule détection des visages, cliquez ici

Qu’est-ce que la reconnaissance des visages ?

Maintenant que nous avons réussi à faire de tels algorithmes qui peuvent détecter les visages, pouvons-nous également reconnaître à qui appartiennent ces visages ?

La reconnaissance des visages est une méthode d’identification ou de vérification de l’identité d’un individu en utilisant son visage. Il existe différents algorithmes qui peuvent faire de la reconnaissance de visage mais leur précision peut varier. Ici, je vais décrire comment nous faisons la reconnaissance des visages en utilisant l’apprentissage profond.

Alors maintenant, comprenons comment nous reconnaissons les visages en utilisant l’apprentissage profond. Nous utilisons l’intégration des visages dans laquelle chaque visage est converti en un vecteur et cette technique est appelée apprentissage métrique profond. Permettez-moi de diviser ce processus en trois étapes simples pour une compréhension facile :

Détection de visage : La toute première tâche que nous effectuons est de détecter les visages dans l’image ou le flux vidéo. Maintenant que nous connaissons l’emplacement exact/les coordonnées du visage, nous extrayons ce visage pour un traitement ultérieur à venir.

Extraction des caractéristiques : Maintenant que nous avons recadré le visage de l’image, nous en extrayons les caractéristiques. Ici, nous allons utiliser les face embeddings pour extraire les caractéristiques du visage. Un réseau neuronal prend une image du visage d’une personne en entrée et produit un vecteur qui représente les caractéristiques les plus importantes d’un visage. Dans l’apprentissage automatique, ce vecteur est appelé encastrement et nous l’appelons donc encastrement du visage. Maintenant, comment cela aide-t-il à reconnaître les visages de différentes personnes ?

Lors de l’entraînement du réseau neuronal, le réseau apprend à sortir des vecteurs similaires pour les visages qui se ressemblent. Par exemple, si j’ai plusieurs images de visages dans différents laps de temps, bien sûr, certaines des caractéristiques de mon visage peuvent changer mais pas jusqu’à une grande mesure. Dans ce cas, les vecteurs associés aux visages sont similaires ou, en bref, ils sont très proches dans l’espace vectoriel. Jetez un coup d’œil au diagramme ci-dessous pour avoir une idée approximative:

Maintenant, après l’entraînement du réseau, le réseau apprend à sortir des vecteurs qui sont plus proches les uns des autres(similaires) pour les visages de la même personne(qui se ressemblent). Les vecteurs ci-dessus se transforment maintenant en :

Nous n’allons pas entraîner un tel réseau ici car il faut une quantité importante de données et de puissance de calcul pour entraîner de tels réseaux. Nous allons utiliser un réseau pré-entraîné formé par Davis King sur un ensemble de données de ~3 millions d’images. Le réseau sort un vecteur de 128 nombres qui représentent les caractéristiques les plus importantes d’un visage.

Maintenant que nous savons comment ce réseau fonctionne, voyons comment nous utilisons ce réseau sur nos propres données. Nous passons toutes les images de nos données à ce réseau pré-entraîné pour obtenir les embeddings respectifs et sauvegarder ces embeddings dans un fichier pour l’étape suivante.

Comparaison des visages : Maintenant que nous avons des embeddings de visage pour chaque visage de nos données sauvegardés dans un fichier, l’étape suivante consiste à reconnaître une nouvelle image t qui n’est pas dans nos données. La première étape est donc de calculer l’intégration du visage pour l’image en utilisant le même réseau que nous avons utilisé ci-dessus, puis de comparer cette intégration avec le reste des intégrations que nous avons. Nous reconnaissons le visage si l’encastrement généré est plus proche ou similaire à tout autre encastrement comme indiqué ci-dessous :

Donc nous avons passé deux images, l’une des images est de Vladimir Poutine et l’autre de George W. Bush. Dans notre exemple ci-dessus, nous n’avons pas sauvegardé les embeddings de Poutine mais nous avons sauvegardé les embeddings de Bush. Ainsi, lorsque nous avons comparé les deux nouveaux embeddings avec ceux existants, le vecteur pour Bush est plus proche des autres embeddings du visage de Bush alors que les embeddings du visage de Poutine ne sont pas plus proches d’aucun autre embedding et donc le programme ne peut pas le reconnaître.

Reconnaissance des visages à l’aide de Python

Dans cette section, nous allons mettre en œuvre la reconnaissance des visages en utilisant OpenCV et Python. Tout d’abord, voyons les bibliothèques dont nous aurons besoin et comment les installer :

  • OpenCV
  • dlib
  • Face_recognition

OpenCV est une bibliothèque de traitement d’images et de vidéos et est utilisée pour l’analyse d’images et de vidéos, comme la détection faciale, la lecture de plaques d’immatriculation, l’édition de photos, la vision robotique avancée, la reconnaissance optique de caractères, et bien plus encore.

La bibliothèque dlib, maintenue par Davis King, contient notre mise en œuvre de « l’apprentissage métrique profond » qui est utilisé pour construire nos embeddings de visage utilisés pour le processus de reconnaissance réel.

La bibliothèque face_recognition, créée par Adam Geitgey, enveloppe autour de la fonctionnalité de reconnaissance faciale de dlib, et cette bibliothèque est super facile à travailler avec et nous allons l’utiliser dans notre code. N’oubliez pas d’installer la bibliothèque dlib d’abord avant d’installer face_recognition.

Pour installer OpenCV, tapez dans l’invite de commande

pip install opencv-python

J’ai essayé plusieurs façons d’installer dlib sur Windows, mais la plus simple de toutes est via Anaconda. Tout d’abord, installez Anaconda (voici un guide pour l’installer) puis utilisez cette commande dans votre invite de commande :

conda install -c conda-forge dlib

Puis pour installer la reconnaissance faciale, tapez dans l’invite de commande

pip install face_recognition

Maintenant que nous avons toutes les dépendances installées, commençons à coder. Nous devrons créer trois fichiers, l’un prendra notre jeu de données et extraira les embedding de visage pour chaque visage en utilisant dlib. Ensuite, nous allons enregistrer ces embedding dans un fichier.

Dans le fichier suivant, nous allons comparer les visages avec l’existant la reconnaissance des visages dans les images et ensuite nous ferons la même chose mais reconnaître les visages dans le flux de la webcam en direct

Extraction des caractéristiques du visage

D’abord, vous devez obtenir un ensemble de données ou même créer un de vos propres. Assurez-vous simplement de disposer toutes les images dans des dossiers, chaque dossier contenant les images d’une seule personne.

Puis, enregistrez le jeu de données dans un dossier identique à celui que vous allez créer. Maintenant, voici le code:

Maintenant que nous avons stocké l’incorporation dans un fichier nommé « face_enc », nous pouvons les utiliser pour reconnaître les visages dans les images ou le flux vidéo en direct.

Reconnaissance de visages dans un flux de webcam en direct

Voici le script pour reconnaître des visages sur un flux de webcam en direct:

Bien que dans l’exemple ci-dessus nous ayons utilisé la cascade haar pour détecter les visages, vous pouvez également utiliser face_recognition.face_locations pour détecter un visage comme nous l’avons fait dans le script précédent

Reconnaissance des visages dans les images

Le script pour détecter et reconnaître les visages dans les images est presque similaire à ce que vous avez vu ci-dessus. Essayez-le vous-même et si vous ne pouvez pas jeter un coup d’œil au code ci-dessous :

Sortie :

  • Input
  • Output

Cela nous amène à la fin de cet article où nous avons appris la reconnaissance des visages. Vous pouvez obtenir un cours gratuit sur Great learning academy sur différents cours. Cliquez sur la bannière ci-dessous pour en savoir plus

Vous pouvez également vous perfectionner avec le cours PGP Artificial Intelligence and Machine Learning de Great Learning. Le cours offre un mentorat de la part des leaders de l’industrie, et vous aurez également l’occasion de travailler sur des projets en temps réel pertinents pour l’industrie.

Lectures complémentaires

  1. Détection de visage à l’aide de l’algorithme de Viola-Jones
  2. Détection de visage en temps réel | Détection de masque de visage à l’aide d’OpenCV
  3. Détection d’objet en temps réel à l’aide de TensorFlow
  4. Détection d’objet YOLO à l’aide d’OpenCV
  5. Détection d’objet dans Pytorch | Qu’est-ce que la détection d’objet ?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.