Vous pouvez également lire une version traduite de ce fichier en chinois 简体中文版 ou en coréen 한국어 ou en japonais 日本語.
Reconnaître et manipuler les visages de Python ou de la ligne de commande avec la bibliothèque de reconnaissance de visage la plus simple du monde.
Construit en utilisant la reconnaissance faciale de pointe de DLIB construite avec un apprentissage en profondeur. Le modèle a une précision de 99,38% sur les faces marquées dans la référence sauvage.
Cela fournit également un outil de ligne de commande face_recognition
simple qui vous permet de faire une reconnaissance face à un dossier d'images de la ligne de commande!
Trouvez tous les visages qui apparaissent sur une image:
import face_recognition
image = face_recognition . load_image_file ( "your_file.jpg" )
face_locations = face_recognition . face_locations ( image )
Obtenez les emplacements et les contours des yeux, du nez, de la bouche et du menton de chaque personne.
import face_recognition
image = face_recognition . load_image_file ( "your_file.jpg" )
face_landmarks_list = face_recognition . face_landmarks ( image )
Trouver des caractéristiques faciales est super utile pour beaucoup de choses importantes. Mais vous pouvez également l'utiliser pour des trucs vraiment stupides comme l'application de maquillage numérique (pensez à «Meitu»):
Reconnaissez qui apparaît sur chaque photo.
import face_recognition
known_image = face_recognition . load_image_file ( "biden.jpg" )
unknown_image = face_recognition . load_image_file ( "unknown.jpg" )
biden_encoding = face_recognition . face_encodings ( known_image )[ 0 ]
unknown_encoding = face_recognition . face_encodings ( unknown_image )[ 0 ]
results = face_recognition . compare_faces ([ biden_encoding ], unknown_encoding )
Vous pouvez même utiliser cette bibliothèque avec d'autres bibliothèques Python pour faire la reconnaissance du visage en temps réel:
Voir cet exemple pour le code.
Démo de carnet de cahier de jupyter partagé par l'utilisateur (non pris en charge officiellement):
Tout d'abord, assurez-vous que DLIB soit déjà installé avec des liaisons Python:
Ensuite, assurez-vous que Cmake soit installé:
brew install cmake
Enfin, installez ce module à partir de PYPI à l'aide de pip3
(ou pip2
pour Python 2):
pip3 install face_recognition
Alternativement, vous pouvez essayer cette bibliothèque avec Docker, voir cette section.
Si vous rencontrez des problèmes avec l'installation, vous pouvez également essayer une machine virtuelle préconfigurée.
pkg install graphics/py-face_recognition
Bien que Windows ne soit pas officiellement pris en charge, les utilisateurs utiles ont publié des instructions sur la façon d'installer cette bibliothèque:
Lorsque vous installez face_recognition
, vous obtenez deux programmes de ligne de commande simples:
face_recognition
- Reconnaissez les visages sur une photographie ou un dossier complet pour les photographies.face_detection
- Trouvez des visages sur une photographie ou un dossier complet pour les photographies. face_recognition
COMMAND LINE TOLL La commande face_recognition
vous permet de reconnaître les visages dans une photographie ou un dossier complet pour les photographies.
Tout d'abord, vous devez fournir un dossier avec une image de chaque personne que vous connaissez déjà. Il devrait y avoir un fichier image pour chaque personne avec les fichiers nommés selon qui est dans l'image:
Ensuite, vous avez besoin d'un deuxième dossier avec les fichiers que vous souhaitez identifier:
Ensuite, vous exécutez simplement la commande face_recognition
, passant dans le dossier des personnes connues et le dossier (ou image unique) avec des personnes inconnues et il vous dit qui est dans chaque image:
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/
/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person
Il y a une ligne dans la sortie pour chaque visage. Les données sont séparées par les virgules avec le nom de fichier et le nom de la personne trouvée.
Un unknown_person
est un visage dans l'image qui ne correspond à personne dans votre dossier de personnes connues.
face_detection
La commande face_detection
vous permet de trouver l'emplacement (coordonnées Pixel) de toutes les visages d'une image.
Exécutez simplement la commande face_detection
, en passant dans un dossier d'images pour vérifier (ou une seule image):
$ face_detection ./folder_with_pictures/
examples/image1.jpg,65,215,169,112
examples/image2.jpg,62,394,211,244
examples/image2.jpg,95,941,244,792
Il imprime une ligne pour chaque visage détecté. Les coordonnées rapportées sont les coordonnées supérieure, droite, inférieure et gauche du visage (en pixels).
Si vous obtenez plusieurs matchs pour la même personne, il se peut que les personnes de vos photos soient très similaires et une valeur de tolérance plus faible est nécessaire pour rendre les comparaisons de visage plus strictes.
Vous pouvez le faire avec le paramètre --tolerance
. La valeur de tolérance par défaut est de 0,6 et des nombres inférieurs rendent les comparaisons du visage plus strictes:
$ face_recognition --tolerance 0.54 ./pictures_of_people_i_know/ ./unknown_pictures/
/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person
Si vous souhaitez voir la distance du visage calculée pour chaque correspondance afin d'ajuster le paramètre de tolérance, vous pouvez utiliser --show-distance true
:
$ face_recognition --show-distance true ./pictures_of_people_i_know/ ./unknown_pictures/
/unknown_pictures/unknown.jpg,Barack Obama,0.378542298956785
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person,None
Si vous voulez simplement connaître les noms des personnes sur chaque photo mais que vous ne vous souciez pas des noms de fichiers, vous pouvez le faire:
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d ' , ' -f2
Barack Obama
unknown_person
La reconnaissance du visage peut être effectuée en parallèle si vous avez un ordinateur avec plusieurs cœurs CPU. Par exemple, si votre système dispose de 4 cœurs de processeur, vous pouvez traiter environ 4 fois plus d'images dans le même temps en utilisant tous vos cœurs de CPU en parallèle.
Si vous utilisez Python 3.4 ou plus récent, passez un paramètre --cpus <number_of_cpu_cores_to_use>
:
$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/
Vous pouvez également transmettre --cpus -1
pour utiliser tous les cœurs CPU de votre système.
Vous pouvez importer le module face_recognition
, puis manipuler facilement les faces avec seulement quelques lignes de code. C'est super facile!
API Docs: https://face-recognition.readthedocs.io.
import face_recognition
image = face_recognition . load_image_file ( "my_picture.jpg" )
face_locations = face_recognition . face_locations ( image )
# face_locations is now an array listing the co-ordinates of each face!
Voir cet exemple pour l'essayer.
Vous pouvez également vous opposer à un modèle de détection de visage basé sur un apprentissage en profondeur un peu plus précis.
Remarque: L'accélération du GPU (via la bibliothèque CUDA de Nvidia) est requise pour de bonnes performances avec ce modèle. Vous voudrez également activer le support CUDA lors du complisation dlib
.
import face_recognition
image = face_recognition . load_image_file ( "my_picture.jpg" )
face_locations = face_recognition . face_locations ( image , model = "cnn" )
# face_locations is now an array listing the co-ordinates of each face!
Voir cet exemple pour l'essayer.
Si vous avez beaucoup d'images et un GPU, vous pouvez également trouver des visages par lots.
import face_recognition
image = face_recognition . load_image_file ( "my_picture.jpg" )
face_landmarks_list = face_recognition . face_landmarks ( image )
# face_landmarks_list is now an array with the locations of each facial feature in each face.
# face_landmarks_list[0]['left_eye'] would be the location and outline of the first person's left eye.
Voir cet exemple pour l'essayer.
import face_recognition
picture_of_me = face_recognition . load_image_file ( "me.jpg" )
my_face_encoding = face_recognition . face_encodings ( picture_of_me )[ 0 ]
# my_face_encoding now contains a universal 'encoding' of my facial features that can be compared to any other picture of a face!
unknown_picture = face_recognition . load_image_file ( "unknown.jpg" )
unknown_face_encoding = face_recognition . face_encodings ( unknown_picture )[ 0 ]
# Now we can see the two face encodings are of the same person with `compare_faces`!
results = face_recognition . compare_faces ([ my_face_encoding ], unknown_face_encoding )
if results [ 0 ] == True :
print ( "It's a picture of me!" )
else :
print ( "It's not a picture of me!" )
Voir cet exemple pour l'essayer.
Tous les exemples sont disponibles ici.
Si vous souhaitez créer un exécutable autonome qui peut s'exécuter sans avoir besoin d'installer python
ou face_recognition
, vous pouvez utiliser Pyinstaller. Cependant, cela nécessite une configuration personnalisée pour fonctionner avec cette bibliothèque. Voir ce problème sur la façon de le faire.
face_recognition
Si vous voulez savoir comment l'emplacement du visage et la reconnaissance fonctionnent au lieu de dépendre d'une bibliothèque de boîtes noires, lisez mon article.
Étant donné que face_recognition
dépend de dlib
qui est écrit en C ++, il peut être difficile de déployer une application en utilisant un fournisseur d'hébergement cloud comme Heroku ou AWS.
Pour faciliter les choses, il y a un exemple de dockerfile dans ce dépôt qui montre comment exécuter une application construite avec face_recognition
dans un conteneur docker. Avec cela, vous devriez être en mesure de déployer sur tout service qui prend en charge les images Docker.
Vous pouvez essayer l'image docker localement en fonctionnant: docker-compose up --build
Il existe également plusieurs images Docker prédéfinies.
Les utilisateurs de Linux avec un GPU (Drivers> = 384.81) et Nvidia-Docker installés peuvent exécuter l'exemple sur le fichier GPU: ouvrir le fichier docker-compose.yml et non commises le dockerfile: Dockerfile.gpu
et runtime: nvidia
Lines.
Si vous rencontrez des problèmes, veuillez lire la section des erreurs communes du wiki avant de déposer un problème GitHub.