DeepFace est un framework léger de reconnaissance faciale et d'analyse des attributs faciaux (âge, sexe, émotion et race) pour Python. Il s'agit d'un cadre de reconnaissance faciale hybride enveloppant des modèles de pointe : VGG-Face
, FaceNet
, OpenFace
, DeepFace
, DeepID
, ArcFace
, Dlib
, SFace
et GhostFaceNet
.
Experiments
montrent que les êtres humains ont une précision de 97,53 % dans les tâches de reconnaissance faciale, alors que ces modèles ont déjà atteint et dépassé ce niveau de précision.
Le moyen le plus simple d'installer Deepface est de le télécharger depuis PyPI
. Il va installer la bibliothèque elle-même ainsi que ses prérequis.
$ pip install deepface
Alternativement, vous pouvez également installer Deepface à partir de son code source. Le code source peut contenir de nouvelles fonctionnalités qui ne sont pas encore publiées dans la version pip.
$ git clone https://github.com/serengil/deepface.git
$ cd deepface
$ pip install -e .
Une fois la bibliothèque installée, vous pourrez alors l'importer et utiliser ses fonctionnalités.
from deepface import DeepFace
Un pipeline moderne de reconnaissance faciale – Demo
Un pipeline de reconnaissance faciale moderne se compose de 5 étapes communes : détecter, aligner, normaliser, représenter et vérifier. Bien que DeepFace gère toutes ces étapes courantes en arrière-plan, vous n'avez pas besoin d'acquérir des connaissances approfondies sur tous les processus qui les sous-tendent. Vous pouvez simplement appeler sa fonction de vérification, de recherche ou d’analyse avec une seule ligne de code.
Vérification faciale – Demo
Cette fonction vérifie les paires de visages comme étant la même personne ou des personnes différentes. Il attend des chemins d’image exacts comme entrées. La transmission d'images codées numpy ou base64 est également la bienvenue. Ensuite, il renverra un dictionnaire et vous devrez vérifier uniquement sa clé vérifiée.
result = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
)
Reconnaissance faciale - Demo
La reconnaissance faciale nécessite d'appliquer la vérification faciale plusieurs fois. Ici, deepface dispose d'une fonction de recherche prête à l'emploi pour gérer cette action. Il va rechercher l'identité de l'image d'entrée dans le chemin de la base de données et renverra la liste des trames de données pandas en sortie. Pendant ce temps, les intégrations faciales de la base de données faciale sont stockées dans un fichier pickle pour une recherche plus rapide la prochaine fois. Le résultat sera la taille des visages apparaissant dans l'image source. En outre, les images cibles dans la base de données peuvent également avoir plusieurs visages.
dfs = DeepFace . find (
img_path = "img1.jpg" ,
db_path = "C:/workspace/my_db" ,
)
Intégrations - Demo
Les modèles de reconnaissance faciale représentent essentiellement les images faciales sous forme de vecteurs multidimensionnels. Parfois, vous avez besoin directement de ces vecteurs d’intégration. DeepFace est livré avec une fonction de représentation dédiée. La fonction Represent renvoie une liste d’intégrations. Le résultat sera la taille des visages apparaissant dans le chemin de l'image.
embedding_objs = DeepFace . represent (
img_path = "img.jpg"
)
Cette fonction renvoie un tableau sous forme d'intégration. La taille du tableau d'intégration serait différente en fonction du nom du modèle. Par exemple, VGG-Face est le modèle par défaut et représente les images faciales sous forme de vecteurs à 4 096 dimensions.
for embedding_obj in embedding_objs :
embedding = embedding_obj [ "embedding" ]
assert isinstance ( embedding , list )
assert (
model_name == "VGG-Face"
and len ( embedding ) == 4096
)
Ici, l'intégration est également tracée avec 4096 emplacements horizontalement. Chaque emplacement correspond à une valeur de dimension dans le vecteur d'intégration et la valeur de dimension est expliquée dans la barre de couleurs à droite. Semblable aux codes-barres 2D, la dimension verticale ne stocke aucune information dans l’illustration.
Modèles de reconnaissance faciale - Demo
DeepFace est un package hybride de reconnaissance faciale. Il englobe actuellement de nombreux modèles de reconnaissance faciale de pointe : VGG-Face
, FaceNet
, OpenFace
, DeepFace
, DeepID
, ArcFace
, Dlib
, SFace
et GhostFaceNet
. La configuration par défaut utilise le modèle VGG-Face.
models = [
"VGG-Face" ,
"Facenet" ,
"Facenet512" ,
"OpenFace" ,
"DeepFace" ,
"DeepID" ,
"ArcFace" ,
"Dlib" ,
"SFace" ,
"GhostFaceNet" ,
]
#face verification
result = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
model_name = models [ 0 ],
)
#face recognition
dfs = DeepFace . find (
img_path = "img1.jpg" ,
db_path = "C:/workspace/my_db" ,
model_name = models [ 1 ],
)
#embeddings
embedding_objs = DeepFace . represent (
img_path = "img.jpg" ,
model_name = models [ 2 ],
)
FaceNet, VGG-Face, ArcFace et Dlib sont surperformants sur la base d'expériences - voir BENCHMARKS
pour plus de détails. Vous pouvez trouver les scores mesurés de différents modèles dans DeepFace et les scores rapportés de leurs études originales dans le tableau suivant.
Modèle | Score mesuré | Score déclaré |
---|---|---|
Facenet512 | 98,4% | 99,6% |
Les êtres humains | 97,5% | 97,5% |
Facenet | 97,4% | 99,2% |
Dlib | 96,8% | 99,3 % |
VGG-Visage | 96,7% | 98,9% |
ArcFace | 96,7% | 99,5% |
GhostFaceNet | 93,3% | 99,7% |
SVisage | 93,0% | 99,5% |
Face ouverte | 78,7% | 92,9% |
Visage profond | 69,0% | 97,3% |
ID profond | 66,5% | 97,4% |
Mener des expériences avec ces modèles dans DeepFace peut révéler des disparités par rapport aux études originales, en raison de l'adoption de techniques de détection ou de normalisation distinctes. De plus, certains modèles ont été commercialisés uniquement avec leur colonne vertébrale, sans poids pré-entraînés. Ainsi, nous utilisons leurs réimplémentations au lieu des poids pré-entraînés d'origine.
Similitude – Demo
Les modèles de reconnaissance faciale sont des réseaux de neurones convolutifs réguliers et ils sont chargés de représenter les visages sous forme de vecteurs. Nous nous attendons à ce qu’une paire de visages d’une même personne soit plus similaire qu’une paire de visages de personnes différentes.
La similarité pourrait être calculée par différentes métriques telles que la similarité cosinus, la distance euclidienne ou l'euclidienne normalisée L2. La configuration par défaut utilise la similarité cosinus. Selon les expériences, aucune mesure de distance n’est plus performante qu’une autre.
metrics = [ "cosine" , "euclidean" , "euclidean_l2" ]
#face verification
result = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
distance_metric = metrics [ 1 ],
)
#face recognition
dfs = DeepFace . find (
img_path = "img1.jpg" ,
db_path = "C:/workspace/my_db" ,
distance_metric = metrics [ 2 ],
)
Analyse des attributs du visage – Demo
DeepFace est également livré avec un puissant module d'analyse des attributs du visage comprenant age
, gender
, facial expression
(y compris la colère, la peur, le neutre, la tristesse, le dégoût, la joie et la surprise) et race
(y compris asiatique, blanc, moyen-oriental, indien, latino et noir). prédictions. Le résultat sera la taille des visages apparaissant dans l'image source.
objs = DeepFace . analyze (
img_path = "img4.jpg" ,
actions = [ 'age' , 'gender' , 'race' , 'emotion' ],
)
Le modèle d'âge a obtenu ± 4,65 MAE ; le modèle de genre a obtenu une précision de 97,44 %, une précision de 96,29 % et un rappel de 95,05 %, comme mentionné dans son didacticiel.
Détection et alignement des visages - Demo
La détection et l’alignement des visages sont des premières étapes importantes d’un pipeline moderne de reconnaissance faciale. Des expériences montrent que la détection augmente la précision de la reconnaissance faciale jusqu'à 42 %, tandis que l'alignement l'augmente jusqu'à 6 %. Les détecteurs OpenCV
, Ssd
, Dlib
, MtCnn
, Faster MtCnn
, RetinaFace
, MediaPipe
, Yolo
, YuNet
et CenterFace
sont enveloppés dans deepface.
Toutes les fonctions Deepface acceptent le backend du détecteur en option et alignent les arguments d'entrée. Vous pouvez basculer entre ces détecteurs et modes d'alignement avec ces arguments. OpenCV est le détecteur par défaut et l'alignement est activé par défaut.
backends = [
'opencv' ,
'ssd' ,
'dlib' ,
'mtcnn' ,
'fastmtcnn' ,
'retinaface' ,
'mediapipe' ,
'yolov8' ,
'yunet' ,
'centerface' ,
]
alignment_modes = [ True , False ]
#face verification
obj = DeepFace . verify (
img1_path = "img1.jpg" ,
img2_path = "img2.jpg" ,
detector_backend = backends [ 0 ],
align = alignment_modes [ 0 ],
)
#face recognition
dfs = DeepFace . find (
img_path = "img.jpg" ,
db_path = "my_db" ,
detector_backend = backends [ 1 ],
align = alignment_modes [ 0 ],
)
#embeddings
embedding_objs = DeepFace . represent (
img_path = "img.jpg" ,
detector_backend = backends [ 2 ],
align = alignment_modes [ 0 ],
)
#facial analysis
demographies = DeepFace . analyze (
img_path = "img4.jpg" ,
detector_backend = backends [ 3 ],
align = alignment_modes [ 0 ],
)
#face detection and alignment
face_objs = DeepFace . extract_faces (
img_path = "img.jpg" ,
detector_backend = backends [ 4 ],
align = alignment_modes [ 0 ],
)
Les modèles de reconnaissance faciale sont en fait des modèles CNN et ils attendent des entrées de taille standard. Un redimensionnement est donc nécessaire avant la représentation. Pour éviter la déformation, deepface ajoute des pixels de remplissage noirs en fonction de l'argument de taille cible après détection et alignement.
RetinaFace et MtCnn semblent surperformer dans les étapes de détection et d'alignement mais ils sont beaucoup plus lents. Si la vitesse de votre pipeline est plus importante, alors vous devez utiliser opencv ou ssd. D'un autre côté, si vous considérez la précision, vous devriez alors utiliser retinaface ou mtcnn.
Les performances de RetinaFace sont très satisfaisantes même dans la foule comme le montre l'illustration suivante. En outre, il est doté d’incroyables performances de détection des repères faciaux. Les points rouges surlignés montrent certains repères du visage tels que les yeux, le nez et la bouche. C'est pourquoi le score d'alignement de RetinaFace est également élevé.
Les Anges Jaunes - Équipe féminine de volleyball de Fenerbahce
Vous pouvez en savoir plus sur RetinaFace sur ce dépôt.
Analyse en temps réel - Demo
Vous pouvez également exécuter Deepface pour des vidéos en temps réel. La fonction Stream accédera à votre webcam et appliquera à la fois la reconnaissance faciale et l'analyse des attributs faciaux. La fonction commence à analyser une image si elle peut focaliser un visage séquentiellement sur 5 images. Ensuite, il affiche les résultats pendant 5 secondes.
DeepFace . stream ( db_path = "C:/User/Sefik/Desktop/database" )
Même si la reconnaissance faciale est basée sur un apprentissage ponctuel, vous pouvez également utiliser plusieurs images du visage d'une personne. Vous devez réorganiser votre structure de répertoires comme illustré ci-dessous.
user
├── database
│ ├── Alice
│ │ ├── Alice1.jpg
│ │ ├── Alice2.jpg
│ ├── Bob
│ │ ├── Bob.jpg
React UI - Demo part-i
, Demo part-ii
Si vous avez l'intention d'effectuer des tâches de vérification du visage directement depuis votre navigateur, deepface-react-ui est un référentiel distinct construit à l'aide de ReactJS en fonction de l'API Deepface.
Face Anti Spoofing - Demo
DeepFace comprend également un module d'analyse anti-usurpation pour comprendre qu'une image donnée est réelle ou fausse. Pour activer cette fonctionnalité, définissez l'argument anti_spoofing
sur True dans toutes les tâches DeepFace.
# anti spoofing test in face detection
face_objs = DeepFace . extract_faces (
img_path = "dataset/img1.jpg" ,
anti_spoofing = True
)
assert all ( face_obj [ "is_real" ] is True for face_obj in face_objs )
# anti spoofing test in real time analysis
DeepFace . stream (
db_path = "C:/User/Sefik/Desktop/database" ,
anti_spoofing = True
)
API - Demo
DeepFace sert également une API - voir api folder
pour plus de détails. Vous pouvez cloner le code source de Deepface et exécuter l'API avec la commande suivante. Il utilisera le serveur Gunicorn pour mettre en place un service de repos. De cette façon, vous pouvez appeler deepface depuis un système externe tel qu'une application mobile ou le Web.
cd scripts
./service.sh
Les fonctions de reconnaissance faciale, d'analyse des attributs faciaux et de représentation vectorielle sont couvertes dans l'API. Vous êtes censé appeler ces fonctions en tant que méthodes de publication http. Les points de terminaison du service par défaut seront http://localhost:5005/verify
pour la reconnaissance faciale, http://localhost:5005/analyze
pour l'analyse des attributs faciaux et http://localhost:5005/represent
pour la représentation vectorielle. L'API accepte les images sous forme de téléchargements de fichiers (via les données de formulaire) ou sous forme de chemins d'image exacts, d'URL ou de chaînes codées en base64 (via JSON ou les données de formulaire), offrant des options polyvalentes pour différentes exigences des clients. Ici, vous pouvez trouver un projet postman pour découvrir comment ces méthodes doivent être appelées.
Service Dockerisé – Demo
Le jeu de commandes suivant servira deepface sur localhost:5005
via docker. Ensuite, vous pourrez consommer des services deepface tels que vérifier, analyser et représenter. De plus, si vous souhaitez créer l'image vous-même au lieu d'une image prédéfinie à partir du hub Docker, Dockerfile est disponible dans le dossier racine du projet.
# docker build -t serengil/deepface . # build docker image from Dockerfile
docker pull serengil/deepface # use pre-built docker image from docker hub
docker run -p 5005:5000 serengil/deepface
Interface de ligne de commande - Demo
DeepFace est également livré avec une interface de ligne de commande. Vous pouvez accéder à ses fonctions en ligne de commande comme indiqué ci-dessous. La commande deepface attend le nom de la fonction comme premier argument et les arguments de la fonction par la suite.
# face verification
$ deepface verify -img1_path tests/dataset/img1.jpg -img2_path tests/dataset/img2.jpg
# facial analysis
$ deepface analyze -img_path tests/dataset/img1.jpg
Vous pouvez également exécuter ces commandes si vous exécutez Deepface avec Docker. Veuillez suivre les instructions du script shell.
Reconnaissance faciale à grande échelle – Playlist
Si votre tâche nécessite une reconnaissance faciale sur de grands ensembles de données, vous devez combiner DeepFace avec un index vectoriel ou une base de données vectorielle. Cette configuration effectuera des recherches approximatives du voisin le plus proche au lieu de recherches exactes, vous permettant d'identifier un visage dans une base de données contenant des milliards d'entrées en quelques millisecondes. Les solutions d'index vectoriels courantes incluent Annoy, Faiss, Voyager, NMSLIB, ElasticSearch. Pour les bases de données vectorielles, les options populaires sont Postgres avec son extension pgvector et RediSearch.
À l’inverse, si votre tâche implique la reconnaissance faciale sur des bases de données de taille petite à moyenne, vous pouvez utiliser des bases de données relationnelles telles que Postgres ou SQLite, ou des bases de données NoSQL comme Mongo, Redis ou Cassandra pour effectuer une recherche exacte du voisin le plus proche.
Les demandes de tirage sont plus que bienvenues ! Si vous envisagez de contribuer à un correctif volumineux, veuillez d'abord créer un problème pour éliminer d'abord toute question initiale ou toute décision de conception.
Avant de créer un PR, vous devez exécuter les tests unitaires et le linting localement en exécutant la commande make test && make lint
. Une fois le PR envoyé, le workflow de test GitHub sera exécuté automatiquement et les tâches de tests unitaires et de peluchage seront disponibles dans les actions GitHub avant approbation.
Il existe de nombreuses façons de soutenir un projet - avec le dépôt GitHub en vedette️ n'en est qu'une.
Si vous aimez ce travail, vous pouvez le soutenir financièrement sur Patreon, les sponsors GitHub ou Achetez-moi un café.
De plus, le logo de votre entreprise sera affiché sur README sur GitHub et PyPI si vous devenez sponsor aux niveaux or, argent ou bronze.
Veuillez citer deepface dans vos publications si cela aide votre recherche - voir CITATIONS
pour plus de détails. Voici ses entrées BibTex :
Si vous utilisez deepface dans vos recherches à des fins de reconnaissance faciale ou de détection de visage, veuillez citer ces publications :
@article { serengil2024lightface ,
title = { A Benchmark of Facial Recognition Pipelines and Co-Usability Performances of Modules } ,
author = { Serengil, Sefik and Ozpinar, Alper } ,
journal = { Journal of Information Technologies } ,
volume = { 17 } ,
number = { 2 } ,
pages = { 95-107 } ,
year = { 2024 } ,
doi = { 10.17671/gazibtd.1399077 } ,
url = { https://dergipark.org.tr/en/pub/gazibtd/issue/84331/1399077 } ,
publisher = { Gazi University }
}
@inproceedings { serengil2020lightface ,
title = { LightFace: A Hybrid Deep Face Recognition Framework } ,
author = { Serengil, Sefik Ilkin and Ozpinar, Alper } ,
booktitle = { 2020 Innovations in Intelligent Systems and Applications Conference (ASYU) } ,
pages = { 23-27 } ,
year = { 2020 } ,
doi = { 10.1109/ASYU50717.2020.9259802 } ,
url = { https://ieeexplore.ieee.org/document/9259802 } ,
organization = { IEEE }
}
D'un autre côté, si vous utilisez deepface dans vos recherches à des fins d'analyse d'attributs faciaux tels que des tâches de prédiction de l'âge, du sexe, des émotions ou de l'appartenance ethnique, veuillez citer cette publication.
@inproceedings { serengil2021lightface ,
title = { HyperExtended LightFace: A Facial Attribute Analysis Framework } ,
author = { Serengil, Sefik Ilkin and Ozpinar, Alper } ,
booktitle = { 2021 International Conference on Engineering and Emerging Technologies (ICEET) } ,
pages = { 1-4 } ,
year = { 2021 } ,
doi = { 10.1109/ICEET53442.2021.9659697 } ,
url = { https://ieeexplore.ieee.org/document/9659697 } ,
organization = { IEEE }
}
De plus, si vous utilisez deepface dans vos projets GitHub, veuillez ajouter deepface
dans le requirements.txt
.
DeepFace est sous licence MIT - voir LICENSE
pour plus de détails.
DeepFace englobe certains modèles de reconnaissance faciale externe : VGG-Face, Facenet (128d et 512d), OpenFace, DeepFace, DeepID, ArcFace, Dlib, SFace et GhostFaceNet. En outre, des modèles d’âge, de sexe et de race/origine ethnique ont été formés sur l’épine dorsale de VGG-Face avec apprentissage par transfert. De même, DeepFace intègre de nombreux détecteurs de visage : OpenCv, Ssd, Dlib, MtCnn, Fast MtCnn, RetinaFace, MediaPipe, YuNet, Yolo et CenterFace. Enfin, DeepFace utilise éventuellement l'anti-usurpation de visage pour déterminer que les images données sont réelles ou fausses. Les types de licences seront hérités lorsque vous aurez l'intention d'utiliser ces modèles. Veuillez vérifier les types de licence de ces modèles à des fins de production.
Le logo DeepFace est créé par Adrien Coquet et est sous licence Creative Commons : By Attribution 3.0.