Accueil Technologies L’Intelligence Artificielle pour débutants – La reconnaissance faciale (2)
L'Intelligence Artificielle pour débutants - La reconnaissance faciale (2)

L’Intelligence Artificielle pour débutants – La reconnaissance faciale (2)

par Jérémy PASTOURET
Publié : Mis à jour le

Cet article présente et utilise des scripts d’exemples de la librairie face_recognition basée sur l’intelligence artificielle. Cette librairie de reconnaissance faciale est très simple d’utilisation. Son installation, ainsi que son utilisation basique, sont expliquées dans cet article. Les scripts suivants sont présents dans le répertoire examples. Les commandes doivent être lancées à la racine du projet de la librairie afin d’accéder au docker-compose.yml.

Identification faciale des personnes

Description

Le script se nomme recognize_faces_in_pictures.py. Il prend trois images en entrée :

  • 1. L’image d’apprentissage d’une personne A.
  • 2. Une seconde image d’apprentissage d’une personne B.
  • 3. Une troisième image inconnue pour la machine, avec une personne C, ou A, ou B.

Le programme doit simplement dire si la troisième photo contient la personne A et / ou la personne B, ou alors personne de connu.

Exécution du script et résultat

Pour lancer le script, il suffit d’utiliser la commande suivante :

docker-compose run face_recognition python3 -u recognize_faces_in_pictures.py

La console renvoie le résultat suivant :

Is the unknown face a picture of Biden? False
Is the unknown face a picture of Obama? True
Is the unknown face a new person that we've never seen before? False

Dans l’exemple de base, le programme doit identifier Obama.

Modification du code pour utiliser ses propres photos

Modifiez les lignes 4,5 et 6 en remplaçant les noms d’images entre guillemets par vos images :

biden_image = face_recognition.load_image_file("me.jpeg")
obama_image = face_recognition.load_image_file("obama.jpg")
unknown_image = face_recognition.load_image_file("jeremy.jpeg")

Par exemple, il suffit de mettre une photo de vous sur la ligne 4, puis sur la ligne 5 celle d’une autre personne. Pour finir, sur la ligne 6, la photo d’une personne à deviner (parmi les deux personnes renseignées).

Concernant le résultat généré, il est possible de changer le texte. Pour cela, modifiez les lignes 27 à 30.

print("Is the unknown face a picture of Biden? {}".format(results[0]))
print("Is the unknown face a picture of Obama? {}".format(results[1]))
print("Is the unknown face a new person that we've never seen before? {}".format(not True in results))

Identification et encadrement des visages reconnus

Description

Le script se nomme identify_and_draw_boxes_on_faces.py. Il prend trois images en entrée :

  • 1. L’image d’apprentissage d’une personne A.
  • 2. Une seconde image d’apprentissage d’une personne B.
  • 3. Une troisième image avec les deux personnes A & B à identifier.

Le programme identifie les visages et dessine des cadres pour les délimiter. Il ajoute aussi le nom de la personne identifiée quand il la reconnaît.

Modification du script

En l’état le script affiche directement l’image. Cependant si vous lancez ce script dans Docker, vous ne verrez rien. Il faut donc modifier le script et décommenter la dernière ligne :

pil_image.save("image_with_boxes.jpg")

Cette instruction crée un fichier de résultats se nommant image_with_boxes.jpg

Exécution du script et résultat

Pour lancer le script, il suffit d’utiliser la commande suivante :

docker-compose run face_recognition python3 -u identify_and_draw_boxes_on_faces.py

L’image obtenue est la suivante :

IA - encadrement et reconnaissance

Modification du code pour utiliser vos propres photos

Ce script est plutôt fun à utiliser sur vos photos personnelles. Mais il faut modifier quelques lignes :

  • La ligne 12 charge l’image d’une personne A.
  • La ligne 13 charge une autre image d’une personne B.
  • Puis la ligne 22 qui correspond au nom de la personne A.
  • Et la ligne 23 correspond au nom de la personne B.
  • Enfin, la ligne 27 correspondant à une photo sur laquelle on peut voir les deux personnes, afin d’obtenir un encadré qui identifie les visages et leur associe un nom.

On a essayé avec nos propres photos :

C’est plutôt bluffant : le modèle est bien entraîné ! En même temps, ça fait peur… car il suffit d’une seule image avec le nom de la personne pour la reconnaître sur d’autres photos. En termes de reconnaissance faciale, l’intelligence artificielle démontre son efficacité. Pour information, nos images de base sont les suivantes :

Identification des parties du visage (sourcils, yeux…)

Description

Le script se nomme find_facial_features_in_picture.py. Il ne prend qu’une seule image en entrée. Le programme doit définir une suite de points représentant des éléments du visage : la bouche, les yeux, les sourcils, etc. Ce genre d’IA est principalement utilisé pour ajouter des filtres en live – par exemple sur des vidéos Snapchat ou autres.

Modification du script

En l’état, le script affiche directement l’image avec des contours blancs sur les éléments détectés. Cependant, si vous lancez ce script dans Docker, vous n’aurez pas l’image. Il faut donc modifier le script et ajouter la ligne suivante à la toute fin :

pil_image.save("find_facial_element.jpg")

Cette instruction crée un fichier de résultats se nommant find_facial_element.jpg

Exécution du script et résultat

Pour lancer le script, il suffit d’utiliser la commande suivante :

docker-compose run face_recognition python3 -u find_facial_features_in_picture.py

La console renvoie le résultat suivant :

I found 2 face(s) in this photograph.
The chin in this face has the following points: [(789, 129), (788, 150), (787, 171), (788, 191), (795, 211), (808, 227), (824, 239), (842, 249), (862, 253), (881, 254), (897, 247), (911, 236), (921, 222), (928, 206), (933, 188), (937, 171), (940, 153)]
The left_eyebrow in this face has the following points: [(821, 110), (831, 102), (845, 101), (860, 104), (872, 111)]
The right_eyebrow in this face has the following points: [(891, 117), (905, 116), (918, 118), (929, 124), (935, 135)]
The nose_bridge in this face has the following points: [(881, 128), (880, 141), (880, 154), (879, 167)]
The nose_tip in this face has the following points: [(857, 174), (865, 178), (874, 181), (881, 181), (888, 180)]
The left_eye in this face has the following points: [(834, 124), (843, 122), (851, 124), (858, 129), (850, 129), (841, 127)]
The right_eye in this face has the following points: [(896, 138), (906, 136), (914, 138), (920, 143), (913, 144), (904, 142)]
The top_lip in this face has the following points: [(838, 198), (852, 196), (863, 196), (870, 200), (878, 199), (887, 203), (895, 209), (891, 207), (877, 203), (869, 202), (862, 200), (842, 198)]
The bottom_lip in this face has the following points: [(895, 209), (884, 210), (875, 208), (867, 207), (859, 205), (850, 202), (838, 198), (842, 198), (861, 199), (869, 201), (877, 202), (891, 207)]
The chin in this face has the following points: [(231, 119), (233, 138), (235, 156), (239, 175), (247, 192), (260, 205), (277, 215), (296, 222), (317, 226), (337, 225), (352, 218), (365, 206), (373, 192), (378, 177), (382, 161), (384, 144), (385, 129)]
The left_eyebrow in this face has the following points: [(259, 92), (270, 81), (285, 74), (301, 73), (317, 78)]
The right_eyebrow in this face has the following points: [(339, 80), (352, 78), (366, 82), (377, 91), (382, 105)]
The nose_bridge in this face has the following points: [(328, 95), (328, 105), (329, 114), (329, 124)]
The nose_tip in this face has the following points: [(306, 138), (315, 140), (326, 143), (334, 142), (343, 141)]
The left_eye in this face has the following points: [(275, 101), (284, 95), (293, 95), (302, 101), (293, 102), (284, 102)]
The right_eye in this face has the following points: [(344, 106), (353, 102), (362, 104), (369, 111), (361, 110), (352, 108)]
The top_lip in this face has the following points: [(285, 170), (301, 160), (314, 156), (324, 158), (332, 157), (342, 164), (351, 176), (346, 175), (332, 167), (323, 166), (313, 165), (291, 170)]

L’analyse apporte comme information le nombre de visages identifiés et les coordonnées de points (X,Y) des éléments qui définissent chaque visage.

L’image générée est la suivante :

Modification du code pour utiliser vos propres photos

Là encore, il s’agit d’un script sympa à tester sur vos propres photos. D’autant qu’il est très simple d’utilisation. Il suffit simplement de modifier l’image de la ligne 5.

image = face_recognition.load_image_file("two_people.jpg")

Pour notre photo, le résultat généré est le suivant :

Conclusion

Il nous reste quelques scripts à découvrir ensemble, mais l’article est déjà bien conséquent. Alors je vous propose de poursuivre cette aventure en lisant la suite. D’ici-là, amusez-vous bien ! Et si vous avez des questions ou des remarques portant sur ces outils d’intelligence artificielle, les commentaires sont là pour cela.

Vous pourriez aussi aimer

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.