Vous êtes sur la page 1sur 18

21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

Tutoriel de reconnaissance de visage Python


1 sept.2020 Tutoriels python la reconnaissance faciale pil hits 2112

Dans ce tutoriel, j'explique la configuration et l'utilisation de la bibliothèque Python face_recognition. Cette


bibliothèque peut être utilisée pour détecter les visages à l'aide de Python et identifier les traits du visage.

Le but
Installation de la bibliothèque "face_recognition"

Détection d'un visage dans une image

Détection de plusieurs visages dans une image

Identifier les traits du visage

Correspondance des visages détectés

Aide PIL supplémentaire

Le but
Dans ce didacticiel, je vais passer en revue quelques exemples d'utilisation de la bibliothèque Python face_recognition pour:

Détecter les visages dans les images


Détecter les traits du visage sur un visage détecté (comme les sourcils et le nez)
Vérifiez les correspondances des visages détectés

Toutes les images et extraits de code sont fournis sur cet article avec des instructions étape par étape et des explications sur ce qui se
passe. Ce didacticiel est destiné à Windows 10, mais les utilisateurs de Linux et de macOS trouveront probablement cela plus facile car
ils peuvent ignorer certaines des conditions préalables.

Voici quelques liens pertinents pour face_recognition si vous en avez besoin / voulez:

Documentation: face-recognition.readthedocs.io
Code source: github.com/ageitgey/face_recognition
PyPI: pypi.org/project/face-recognition

Installation de la bibliothèque "face_recognition"


Prérequis (Windows)
Pour installer la bibliothèque face_recognition sous Windows, vous aurez besoin des éléments suivants installés:

CMake
Outils de génération Visual Studio C ++

Si vous ne les avez pas, vous obtiendrez des erreurs comme,

CMake must be installed to build the following extensions: _dlib_pybind11

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 1/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

Tuya Sma Home Technology

Get Exclusive Information & Explore New Oppo unities


for IoT Business

Tuya Sma Sign Up

Ce qui vous indique que CMake n'est pas installé, ou,

Clothing On Functional

On functional, utilitarian, high tech fashion.

Blaroken Men's Shop Shop Now

You must use Visual Studio to build a python extension on windows. If you
are getting this error it means you have not installed Visual C++. Note
that there are many flavours of Visual Studio, like Visual Studio for C#
development. You need to install Visual Studio for C++.

Ce qui vous indique que vous avez besoin des outils de génération Visual Studio C ++.

CMake
Pour installer CMake, accédez à cmake.org/download/ et téléchargez le programme d'installation approprié pour votre machine. J'utilise
Windows 10 64 bits, donc je l'obtiendrai cmake-<version>-win64-x64.msi. Après avoir téléchargé le fichier d'installation, installez-le.

Lors de l'installation de CMake, ajoutez CMake à la variable d'environnement PATH système pour tous les utilisateurs ou l'utilisateur
actuel afin qu'il puisse être trouvé facilement.

Une fois l'installation terminée, ouvrez un terminal et exécutez cmake. Cela devrait montrer l'utilisation de CMake. Si ce n'est pas le cas,
assurez-vous d'avoir sélectionné l'option pour l'ajouter à la variable d'environnement PATH.

Vous devrez fermer et rouvrir votre terminal / application pour que la variable PATH se mette à jour afin que le cmakebinaire puisse
être identifié.

Outils de génération Visual Studio C ++


https://nitratine.net/blog/post/python-face-recognition-tutorial/ 2/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

Contrairement à Linux, les compilateurs C ++ pour Windows ne sont pas inclus par défaut dans le système d'exploitation. Si nous
visitons la page WindowsCompilers sur le wiki Python, nous pouvons voir qu'il existe des informations sur l'obtention d'une version
autonome du compilateur Visual C ++ 14.2 sans avoir besoin de Visual Studio . Si nous visitons le lien de cette section wiki, nous serons
amenés à une page de téléchargement Microsoft. Sur cette page de téléchargement, vous souhaiterez télécharger «Build Tools for
Visual Studio 2019».

Une fois vs_buildtools__<some other stuff>.exetéléchargé, exécutez l'exe et permettez-lui d'installer quelques éléments avant d'arriver
à l'écran ci-dessous. Lorsque vous arrivez à cet écran, effectuez les sélections que j'ai:

Après avoir cliqué sur "Installer", attendez que l'installation se termine et redémarrez.

Maintenant que CMake et les outils de construction requis sont installés, nous pouvons continuer à installer la bibliothèque
face_recognition.

Installation de face_recognition et vérification de l'installation


Pour installer la bibliothèque face_recognition, exécutez ce qui suit dans un terminal:

python -m pip install face-recognition

Cela peut prendre un peu plus de temps à installer que d'habitude car dlib doit être construit à l'aide des outils installés par le haut.
Pour valider que la bibliothèque a été installée avec succès, essayez d'importer la bibliothèque en Python en utilisant ce qui suit:

import face_recognition

Aucune erreur ne doit être signalée.

Installation de PIL
Pour ce tutoriel, nous utiliserons également Pillow / PIL qui nous aidera à recadrer et à dessiner sur des images. Cela n'est pas nécessaire
pour utiliser la bibliothèque face_recognition, mais sera nécessaire dans ce didacticiel pour prouver / afficher les résultats. Pour
l'installer, exécutez ce qui suit:

python -m pip install Pillow

Pour valider que la bibliothèque a été installée, essayez d'importer PIL dans Python en utilisant ce qui suit:

import PIL

Aucune erreur ne doit être signalée.

Détection d'un visage dans une image


https://nitratine.net/blog/post/python-face-recognition-tutorial/ 3/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

Maintenant que nous avons configuré la bibliothèque face_recognition et le PIL, nous pouvons maintenant commencer à détecter les
visages. Pour commencer, nous allons détecter un visage dans une image avec une seule personne.

single-person.jpg

Tout d'abord, nous voulons importer face_recognition et quelques helpers de PIL.

import face_recognition
from PIL import Image, ImageDraw

Clothing On
Functional
On functional, utilitarian,
high tech fashion.
Blaroken Men's Shop

Chargez maintenant votre image en utilisant face_recognition.load_image_file.

Open Company Offshore Offshore


in Belize Company in Company in
Hong Kong Vietnam
$709
$799 $399

Learn more Learn more Learn more

image = face_recognition.load_image_file('single-person.jpg')

imagecontient maintenant notre image dans un format avec lequel face_recognition peut détecter les visages. Pour identifier
l'emplacement du visage dans cette image, appelez face_recognition.face_locationset passez l'image.

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 4/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

face_locations = face_recognition.face_locations(image)

face_locationscontiendra désormais une liste d'emplacements de visage. Chaque emplacement de visage est un tuple de positions de
pixel pour (top, right, bottom, left)- nous devons nous en souvenir lorsque nous l'utilisons plus tard.

Puisqu'il n'y a qu'un seul visage dans cette image, nous nous attendrions à ce qu'il n'y ait qu'un seul élément dans cette liste. Pour
vérifier combien de visages ont été détectés, nous pouvons obtenir la longueur de la liste.

amount = len(face_locations)
print(f'There are {amount} face locations')

Pour l'exemple d'image que j'ai fourni ci-dessus et que j'utilise pour ce didacticiel, cela m'a indiqué qu'un visage avait été détecté.

Pour obtenir l'emplacement de ce visage à utiliser plus tard, nous pouvons simplement extraire le premier élément de la liste.

first_face_location = face_locations[0]

Pour voir ce qu'il y a dedans, vous pouvez appeler:

print(first_face_location)

Ce qui imprimera quelque chose comme:

(400, 1221, 862, 759)

Ce sont les positions de pixels pour (top, right, bottom, left)lesquelles nous allons bientôt créer une boîte et recadrer.

Identifier le visage détecté


Pour identifier où se trouve le visage qui a été détecté dans l'image, nous allons dessiner une boîte rouge sur les limites qui ont été
renvoyées par face_recognition.face_locations.

Tout d'abord, nous devons créer une image PIL à partir de l'image chargée à l'aide de face_recognition.load_image_file. Cela nous
permettra d'utiliser les fonctionnalités offertes par PIL.

img = Image.fromarray(image, 'RGB')

Maintenant que nous avons l'image PIL, nous devons créer un objet pour nous aider à dessiner sur l'image. Avant de faire cela, nous
allons également copier l'image dans un nouvel objet afin que lorsque nous rognerons le visage plus tard, il n'y aura plus de boîte rouge
autour de lui.

img_with_red_box = img.copy()
img_with_red_box_draw = ImageDraw.Draw(img_with_red_box)

Non-woven Fabric Machine

Technical Suppo Available. Chat Suppo Available. High


quality & manufacturer's price.

FangLi Group Open

Maintenant que nous avons un objet pour nous aider à dessiner sur l'image, nous allons dessiner un rectangle en utilisant les
dimensions renvoyées précédemment.

Pour dessiner une boîte, nous avons besoin de deux points, le haut à gauche et le bas à droite sous forme de coordonnées x et y. Depuis
notre retour (top, right, bottom, left), nous devons les fabriquer (left, top), (right, bottom); la traduction de base peut être vue
ci-dessous.

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 5/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

img_with_red_box_draw.rectangle(
[
(first_face_location[3], first_face_location[0]),
(first_face_location[1], first_face_location[2])
],
outline="red",
width=3
)

Nous devions (left, top), (right, bottom)obtenir (x, y) (x, y) points.

Dans cette étape, nous avons également décidé outline="red"de rendre la boîte rouge et width=3de faire la boîte de 3 pixels de large.

Pour voir le résultat final, nous appelons:

img_with_red_box.show()

Cela ouvrira l'image dans la visionneuse d'images par défaut. L'image doit ressembler à ceci:

Recadrer le visage détecté


En plus de dessiner une boîte, nous pouvons également rogner le visage dans une autre image.

En utilisant l'image originale sur laquelle nous n'avons pas dessiné (parce que nous avons dessiné sur l'image copiée), nous pouvons
appeler img.cropfournir les dimensions d'avant.

Non-woven Fabric
Machine
Technical Support Available.
Chat Support Available. High
quality & manufacturer's
FangLi Group price.

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 6/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

img_cropped = img.crop((
first_face_location[3], # Left x
first_face_location[0], # Top y
first_face_location[1], # Right x
first_face_location[2] # Bottom y
))

img.crop renvoie une copie de l'image originale en cours de recadrage afin que vous n'ayez pas besoin de copier au préalable si
vous voulez faire autre chose avec l'image originale.

img_croppedcontient maintenant une nouvelle image recadrée, pour l'afficher, nous pouvons appeler à .show()nouveau.

img_cropped.show()

Code final de cette section


import face_recognition
from PIL import Image, ImageDraw

# Detecting the faces


image = face_recognition.load_image_file('single-person.jpg') # Load the image
face_locations = face_recognition.face_locations(image) # Detect the face locations
first_face_location = face_locations[0] # Get the first face

# Convert the face_recognition image to a PIL image


img = Image.fromarray(image, 'RGB')

# Creating the image with red box


img_with_red_box = img.copy() # Create a copy of the original image so there is not red box in the cropped image later
img_with_red_box_draw = ImageDraw.Draw(img_with_red_box) # Create an image to draw with
img_with_red_box_draw.rectangle( # Draw the rectangle on the image
[
(first_face_location[3], first_face_location[0]), # (left, top)
(first_face_location[1], first_face_location[2]) # (right, bottom)
],
outline="red", # Make the box red
width=3 # Make the box 3px in thickness
)
img_with_red_box.show() # Open the image in the default image viewer

# Creating the cropped image


img_cropped = img.crop(( # Crop the original image
first_face_location[3],
first_face_location[0],
first_face_location[1],
first_face_location[2]
))
img_cropped.show() # Open the image in the default image viewer

Détection de plusieurs visages dans une image


Nous avons vu précédemment que face_recognition.face_locationsrenvoie un tableau de tuples correspondant aux emplacements
des faces. Cela signifie que nous pouvons utiliser les mêmes méthodes ci-dessus, mais en boucle sur le résultat
face_recognition.face_locationslors du dessin et du recadrage.

J'utiliserai ce qui suit comme image. Il présente 5 faces visibles, dont 2 sont légèrement floues.

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 7/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

groupe-de-personnes.jpg

Une fois de plus, nous voulons importer face_recognition et quelques helpers de PIL.

import face_recognition
from PIL import Image, ImageDraw

Non-woven Fabric Machine

Technical Suppo Available. Chat Suppo Available. High


quality & manufacturer's price.

FangLi Group Open

Ensuite, chargez la nouvelle image en utilisant face_recognition.load_image_fileet détectez les visages en utilisant les mêmes
méthodes qu'auparavant.

image = face_recognition.load_image_file('group-of-people.jpg')
face_locations = face_recognition.face_locations(image)

Si nous imprimons face_locations ( print(face_locations)), nous pouvons voir que 5 visages ont été détectés.

[
(511, 1096, 666, 941),
(526, 368, 655, 239)
(283, 1262, 390, 1154),
(168, 1744, 297, 1615),
(271, 390, 378, 282)
]

Puisque nous avons maintenant plus d'un visage, prendre le premier n'a pas de sens - nous devrions boucler sur eux tous et effectuer
nos opérations dans la boucle.

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 8/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

Avant de continuer, nous devons également créer l'image PIL avec laquelle nous allons travailler.

img = Image.fromarray(image, 'RGB')

Identification des visages détectés


Comme avant, nous devons copier l'image originale pour plus tard (facultatif) et créer un objet pour nous aider à dessiner.

img_with_red_box = img.copy()
img_with_red_box_draw = ImageDraw.Draw(img_with_red_box)

Maintenant, nous pouvons boucler toutes les faces et créer des rectangles.

for face_location in face_locations:


img_with_red_box_draw.rectangle(
[
(face_location[3], face_location[0]),
(face_location[1], face_location[2])
],
outline="red",
width=3
)

Et encore une fois, regardez l'image:

img_with_red_box.show()

Pas mal hein!

Recadrer les visages détectés


Tout comme pour dessiner de nombreuses cases, nous pouvons également recadrer tous les visages détectés. Utilisez à nouveau une
boucle for, recadrez l'image dans chaque boucle, puis affichez l'image.

for face_location in face_locations:


img_cropped = img.crop((face_location[3], face_location[0], face_location[1], face_location[2]))
img_cropped.show()

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 9/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

Non-woven Fabric
Machine
Technical Support Available.
Chat Support Available. High
quality & manufacturer's
FangLi Group price.

Vous aurez de nombreuses images ouvertes sur votre machine dans des fenêtres séparées; les voici tous ensemble:

J'ai réduit ces images pour le didacticiel, mais les vôtres seront recadrées à la résolution que vous avez définie.

Code final de cette section


import face_recognition
from PIL import Image, ImageDraw

# Load image and detect faces


image = face_recognition.load_image_file("group-of-people.jpg")
face_locations = face_recognition.face_locations(image)

# Create the PIL image to copy and crop


img = Image.fromarray(image, 'RGB')

img_with_red_box = img.copy() # Make a single copy for all the red boxes
img_with_red_box_draw = ImageDraw.Draw(img_with_red_box) # Get our drawing object again
for face_location in face_locations: # Loop over all the faces detected this time
img_with_red_box_draw.rectangle( # Draw a rectangle for the current face
[
(face_location[3], face_location[0]),
(face_location[1], face_location[2])
],
outline="red",
width=3
)
img_with_red_box.show() # Open the image in the default image viewer

for face_location in face_locations: # Loop over all the faces detected


img_cropped = img.crop(( # Crop the current image like we did last time
face_location[3],
face_location[0],
face_location[1],
face_location[2]
))
img_cropped.show() # Show the image for the current iteration

Identifier les traits du visage


face_recognition a également une fonction face_recognition.face_landmarksqui fonctionne comme
face_recognition.face_locationsmais qui renverra une liste de dictionnaires contenant les positions des traits du visage plutôt que les
positions des visages détectés eux-mêmes.

Pour en revenir à l'image avec une personne, nous pouvons tout réimporter, charger l'image et appeler
face_recognition.face_landmarks.

import face_recognition
from PIL import Image, ImageDraw

image = face_recognition.load_image_file('single-person.jpg')
face_landmarks_list = face_recognition.face_landmarks(image) # The new call

Maintenant, si nous imprimons face_landmarks_list, l'objet sera un peu différent.

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 10/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

[
{
'chin': [(315, 223), (318, 248), (321, 273), (326, 296), (335, 319), (350, 339), (370, 354), (392, 365), (415, 367),
(436, 363), (455, 351), (469, 336), (479, 318), (486, 296), (488, 273), (490, 251), (489, 229)],
'left_eyebrow': [(329, 194), (341, 183), (358, 180), (375, 182), (391, 189)],
'right_eyebrow': [(434, 189), (448, 184), (461, 182), (474, 184), (483, 194)],
'nose_bridge': [(411, 209), (411, 223), (412, 238), (412, 253)],
'nose_tip': [(394, 269), (403, 272), (412, 275), (421, 272), (428, 269)],
'left_eye': [(349, 215), (360, 208), (373, 207), (384, 216), (372, 218), (359, 219)],
'right_eye': [(436, 216), (446, 208), (458, 208), (467, 216), (459, 219), (447, 219)],
'top_lip': [(374, 309), (388, 300), (402, 296), (411, 298), (420, 296), (434, 301), (448, 308), (442, 308), (420, 307),
(411, 308), (402, 307), (380, 309)],
'bottom_lip': [(448, 308), (434, 317), (421, 321), (411, 322), (401, 321), (388, 317), (374, 309), (380, 309), (402,
309), (411, 310), (421, 309), (442, 308)]
}
]

Il y a pas mal de choses ici. Pour chaque caractéristique du visage (c'est-à-dire le menton, le sourcil gauche, le sourcil droit, etc.), une
liste correspondante contient des tuples x et y - ces points x et y sont des coordonnées x et y sur l'image.

PIL propose une .line()méthode sur l'objet de dessin que nous avons utilisé et qui prend une liste de points x et y qui est parfaite pour
cette situation. Pour commencer, nous aurons besoin d'un objet de dessin.

img = Image.fromarray(image, 'RGB') # Make a PIL image from the loaded image
img_draw = ImageDraw.Draw(img) # Create the draw object

Dans cet exemple, nous ne copierons pas l'image car c'est la seule fois que nous l'utiliserons

Maintenant que nous avons l'objet pour nous aider à dessiner, tracez toutes ces lignes en utilisant le premier dictionnaire de la liste
retournée ci-dessus.

face_landmarks = face_landmarks_list[0] # Get the first dictionary of features


img_draw.line(face_landmarks['chin'])
img_draw.line(face_landmarks['left_eyebrow'])
img_draw.line(face_landmarks['right_eyebrow'])
img_draw.line(face_landmarks['nose_bridge'])
img_draw.line(face_landmarks['nose_tip'])
img_draw.line(face_landmarks['left_eye'])
img_draw.line(face_landmarks['right_eye'])
img_draw.line(face_landmarks['top_lip'])
img_draw.line(face_landmarks['bottom_lip'])

Maintenant, nous pouvons faire appel .show()à notre image pour la regarder:

img_draw.show()

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 11/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

Code final de cette section


import face_recognition
from PIL import Image, ImageDraw

# Load the image and detect face landmarks for each face within
image = face_recognition.load_image_file('single-person.jpg')
face_landmarks_list = face_recognition.face_landmarks(image)

# Make a PIL image from the loaded image and then get a drawing object
img = Image.fromarray(image, 'RGB')
img_draw = ImageDraw.Draw(img)

# Draw all the features for the first face


face_landmarks = face_landmarks_list[0] # Get the first object corresponding to the first face
img_draw.line(face_landmarks['chin'])
img_draw.line(face_landmarks['left_eyebrow'])
img_draw.line(face_landmarks['right_eyebrow'])
img_draw.line(face_landmarks['nose_bridge'])
img_draw.line(face_landmarks['nose_tip'])
img_draw.line(face_landmarks['left_eye'])
img_draw.line(face_landmarks['right_eye'])
img_draw.line(face_landmarks['top_lip'])
img_draw.line(face_landmarks['bottom_lip'])

img_with_face_landmarks.show() # Show the image for the current iteration

Correspondance des visages détectés


La bibliothèque face_recognition fournit également la fonction face_recognition.compare_facesqui peut être utilisée pour comparer les
visages détectés pour voir s'ils correspondent.

Il y a deux arguments pour cette fonction que nous utiliserons:

known_face_encodings: Une liste des encodages de visage connus


face_encoding_to_check: Un encodage face unique à comparer avec la liste

Pour cette section, nous allons obtenir 2 encodages de visage pour la même personne et vérifier s'ils sont dans une autre image.

Voici les deux images avec un visage connu dans chacune:

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 12/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

elon-musc-1.jpg elon-musc-2.png

Et voici les images que nous allons vérifier pour voir si Elon est en eux:

elon-musc-in-group.jpg groupe-de-personnes.jpg

Obtenir des encodages de visage


Pour obtenir des encodages de visage connus, nous pouvons utiliser face_recognition.face_encodings. Cette fonction prend une image
contenant un visage et les emplacements des visages dans les images à utiliser.

En règle générale, vous n'utilisez qu'un seul emplacement d'un visage dans une seule image pour créer un encodage, mais si vous
avez plusieurs du même visage dans une image, vous pouvez fournir plusieurs emplacements.

Le processus de ce que nous devons faire pour obtenir nos encodages de visage connus est:

1. Charger dans la première image


2. Détectez les visages dans l'image pour obtenir les emplacements des visages
3. Vérifiez qu'il n'y a qu'une seule face et sélectionnez la première face
4. Appelez face_recognition.face_encodingsavec l'image et l'emplacement d'un visage
5. Répétez 1 à 5 pour la deuxième image

Nous avons déjà effectué les étapes 1 à 3, nous pouvons donc le refaire ici:

import face_recognition

# Load image and detect faces


image = face_recognition.load_image_file("elon-musk-1.jpg")
face_locations = face_recognition.face_locations(image)

Et pour valider un visage a été détecté:

print(len(face_locations)) # Should be 1

Maintenant, nous pouvons appeler face_recognition.face_encodingset fournir l'image et l'emplacement trouvé.

face_location = face_locations[0] # We only want an encoding for the first face. There may be more than one face in images you
use so I am leaving this here as a note.
face_encodings = face_recognition.face_encodings(image, [face_location])

Le paramètre known_face_locationsest facultatif et face_recognition détectera automatiquement tous les visages de l'image lors de
l'obtention des encodages de visage s'il known_face_locationsn'est pas fourni. Pour cette partie, je le démontre de cette manière
pour valider qu'il n'y a qu'un seul visage détecté dans l'image.

Puisque nous avons spécifié un tableau de known_face_locations, nous savons qu'il n'y aura qu'un seul encodage retourné afin que
nous puissions prendre le premier.

elon_musk_knwon_face_encoding_1 = face_encodings[0]

Nous pouvons maintenant répéter ce processus pour l'autre image


https://nitratine.net/blog/post/python-face-recognition-tutorial/ 13/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

image = face_recognition.load_image_file("elon-musk-2.png") # Load the image


face_locations = face_recognition.face_locations(image) # Get face locations
face_location = face_locations[0] # Only use the first detected face

face_encodings = face_recognition.face_encodings(image, [face_location]) # Get all face encodings


elon_musk_knwon_face_encoding_2 = face_encodings[0] # Pull out the one returned face encoding

Maintenant que nous avons elon_musk_knwon_face_encoding_1et elon_musk_knwon_face_encoding_2, nous pouvons voir s'ils existent dans
nos deux autres images.

Vérification des correspondances


Pour vérifier les correspondances dans une image avec face_recognition.compare_faces, nous avons besoin de codages de visage
connus (que nous venons d'obtenir ci-dessus) et d'un codage de visage unique à vérifier.

Puisque nous travaillons avec des groupes d'images, nous devrons boucler les visages détectés - bien que cela fonctionnera également
de la même manière avec une seule personne dans l'image.

Tout d'abord, nous devons extraire tous les décodages de visage de notre première image à comparer. J'avais noté ci-dessus que le
deuxième paramètre,, known_face_locationsà face_recognition.face_encodingsétait facultatif, le laisser de côté détectera
automatiquement tous les visages de l'image et renverra les encodages de visage pour chaque visage de l'image; c'est exactement ce
que nous voulons et supprimera l'étape intermédiaire de détection des visages.

image = face_recognition.load_image_file("elon-musk-in-group.jpg") # Load the image we are comparing


unknwon_face_encodings = face_recognition.face_encodings(image) # Get face encodings for everyone in the image

Maintenant que nous avons nos encodages de visage inconnus pour tous les visages de l'image de groupe, nous pouvons les parcourir
en boucle et vérifier si l'un ou l'autre correspond:

for unknwon_face_encoding in unknwon_face_encodings:


matches = face_recognition.compare_faces(
[elon_musk_knwon_face_encoding_1, elon_musk_knwon_face_encoding_2], # The known face encodings (can be only 1 - less is
faster)
unknwon_face_encoding # The single unknown face encoding
)
print(matches)

Si vous exécutez ceci, vous verrez quelque chose comme:

[True, True]
[False, False]
[False, False]
[False, False]

Chaque ligne est une comparaison (stockée dans matches) et chaque booléen correspond à un codage de visage connu et s'il
correspond au codage de visage inconnu.

À partir des valeurs ci-dessus, nous pouvons voir que le premier visage inconnu de l'image de groupe correspond aux deux codages de
visage connus et que les trois autres visages inconnus ne correspondent à aucun des codages. L'utilisation de plusieurs encodages de
visage peut vous permettre de calculer une meilleure probabilité mais vous coûtera en vitesse.

Si vous exécutez ceci sur l'autre image, tout retourne faux.

Code final de cette section

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 14/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

import face_recognition

# Load elon-musk-1.jpg and detect faces


image = face_recognition.load_image_file("elon-musk-1.jpg")
face_locations = face_recognition.face_locations(image)

# Get the single face encoding out of elon-musk-1.jpg


face_location = face_locations[0] # Only use the first detected face
face_encodings = face_recognition.face_encodings(image, [face_location])
elon_musk_knwon_face_encoding_1 = face_encodings[0] # Pull out the one returned face encoding

# Load elon-musk-2.jpg and detect faces


image = face_recognition.load_image_file("elon-musk-2.png")
face_locations = face_recognition.face_locations(image)

# Get the single face encoding out of elon-musk-2.jpg


face_location = face_locations[0]
face_encodings = face_recognition.face_encodings(image, [face_location])
elon_musk_knwon_face_encoding_2 = face_encodings[0]

# Load the image with unknown to compare


image = face_recognition.load_image_file("elon-musk-in-group.jpg") # Load the image we are comparing
unknwon_face_encodings = face_recognition.face_encodings(image)

# Loop over each unknwon face encoding to see if the face matches either known encodings
print('Matches for elon-musk-in-group.jpg')
for unknwon_face_encoding in unknwon_face_encodings:
matches = face_recognition.compare_faces(
[elon_musk_knwon_face_encoding_1, elon_musk_knwon_face_encoding_2], # The known face encodings (can be only 1 - less is
faster)
unknwon_face_encoding # The single unknown face encoding
)
print(matches)

# Load the other image with unknown to compare


image = face_recognition.load_image_file("group-of-people.jpg") # Load the image we are comparing
unknwon_face_encodings = face_recognition.face_encodings(image)

# Loop over each unknwon face encoding to see if the face matches either known encodings
print('Matches for group-of-people.jpg')
for unknwon_face_encoding in unknwon_face_encodings:
matches = face_recognition.compare_faces(
[elon_musk_knwon_face_encoding_1, elon_musk_knwon_face_encoding_2],
unknwon_face_encoding
)
print(matches)

Aide PIL supplémentaire


Ce didacticiel ne se concentre pas sur PIL mais une fonction que vous pouvez trouver utile est img.save(); cela enregistre un fichier. Un
exemple de ses utilisations est img.save('my_image.png')de sauvegarder une image PIL dans my_image.png.

Vous pouvez trouver plus d'informations sur PIL dans sa documentation et il existe de nombreuses autres aides en ligne car il s'agit
d'une bibliothèque très ancienne.

← Comment servir une application React Fr ... Comment configurer Open Drone Ma ... →

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 15/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

Sponsored

This Picture of Prince Harry & Father at The Same Age Will Shock You
Trading Blvd

Meghan Markle breaks up royal family


Cleverst

Nancy Sinatra Is Almost 80, Try Not To Smile When You See Her Now
MisterStocks

This Is The Car Rowan Atkinson Drives In Real-Life


TeleHealth Dave

This Is Why Putting an Onion in Your Sock Can Do Wonders


Tips and Tricks

We Ranked These Beautiful Women - Who Is Number 1?


Habit Tribe

Moments That Surprised even Airport Security


St d tS

ALSO ON NITRATINE

Google Publisher Simulate Mouse Python


Toolbar: Please … Events In Python Python Retweet Bot Decrypt
2 years ago • 10 comments 3 years ago • 16 comments 3 years ago • 9 comments 2 years ag

When first installing Google This demonstrates how to This bot retweets tweets in PyCrypto
Publisher Toolbar, you may control the mouse with python. It looks for PyCrypto
be asked, "Please copy … Python. Using pynput we … competitions which state … enhancem

What do you think?


4 Responses

It worked! Thank you so much It won't work for me Oh wow

0 Comments Nitratine 🔒 Disqus' Privacy Policy 


1 Login

 Recommend t Tweet f Share Sort by Best

Start the discussion…

LOG IN WITH
OR SIGN UP WITH DISQUS ?

Name

Be the first to comment.

✉ Subscribe d Add Disqus to your siteAdd DisqusAdd ⚠ Do Not Sell My Data

À propos de
Propriétaire de PyTutorials et créateur d' auto-py-to-exe . J'aime créer des didacticiels rapides pour les personnes qui découvrent
des sujets particuliers en Python et des outils qui aident à résoudre de petites choses.
https://nitratine.net/blog/post/python-face-recognition-tutorial/ 16/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

Chercher Chercher

Catégories
📱 Applications 2
📰 Général 7
🔍 Enquêtes 2
💾 Projets 15
✂ Extraits 1

🛠 Outils 4
📖 Tutoriels 26
🎥 YouTube 15

PyTutorials sur YouTube


PyTutorials

YouTube 32 k

Vidéos récentes

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 17/18
21/03/2021 Tutoriel de reconnaissance faciale Python - Nitratine

Sites en vedette

Naviguer Projets populaires Suivre

Maison auto-py-to-exe GitHub


Blog compteur de coups Youtube
Catégories qui-sur-mon-réseau Flux RSS Nitratine
Mots clés monopole-argent
Archiver
Portefeuille
À propos de

© 2021 Brent Vollebregt

https://nitratine.net/blog/post/python-face-recognition-tutorial/ 18/18

Vous aimerez peut-être aussi