introduction
Saviez-vous que chaque fois que vous téléchargez une photo sur Facebook, la plate-forme utilise des algorithmes de reconnaissance faciale pour identifier les personnes dans cette image? Ou que certains gouvernements du monde entier utilisent la technologie de reconnaissance faciale pour identifier et attraper les criminels ?? Je n'ai pas besoin de vous dire que maintenant vous pouvez déverrouiller les smartphones avec votre visage !!
Les applications de ce sous-domaine de la vision par ordinateur sont vastes et les entreprises du monde entier en récoltent déjà les bénéfices.. L'utilisation de modèles de reconnaissance faciale ne fera qu'augmenter dans les années à venir, alors pourquoi ne pas apprendre à en construire un à partir de zéro?
Dans cet article, nous allons faire exactement cela. Nous allons d'abord comprendre le fonctionnement interne de la reconnaissance faciale, puis nous prendrons une étude de cas simple et l'implémenterons en Python. A la fin de l'article, vous aurez construit votre premier modèle de reconnaissance faciale!
Table des matières
- Comprendre le fonctionnement de la reconnaissance faciale
- Cas d'étude
- Implémentation Python
- Comprendre le code Python
- Applications des algorithmes de reconnaissance faciale
Comprendre le fonctionnement de la reconnaissance faciale
Comprendre le fonctionnement de la reconnaissance faciale, donnons d'abord une idée du concept de vecteur de caractéristiques.
Chaque algorithme d'apprentissage automatique prend un ensemble de données en entrée et apprend à partir de ces données. L'algorithme parcourt les données et identifie les modèles dans les données. Par exemple, supposons que nous voulions identifier quel visage est présent dans une certaine image, il y a plusieurs choses que nous pouvons considérer comme un modèle:
- Alto / Largeur frontale.
- La hauteur et la largeur peuvent ne pas être fiables, puisque l'image peut être changée en un visage plus petit. Cependant, même après changement d'échelle, ce qui reste inchangé, ce sont les relations: la relation entre la hauteur du visage et la largeur du visage ne changera pas.
- Couleur du visage.
- Largeur d'autres parties du visage telles que les lèvres, nez, etc.
Clairement, il y a un modèle ici: différents visages ont des dimensions différentes comme ci-dessus. Des visages similaires ont des dimensions similaires. La partie difficile consiste à transformer un visage particulier en chiffres: les algorithmes d'apprentissage automatique ne comprennent que les nombres. Cette représentation numérique d'un “méthode” (ou un élément de l'ensemble d'entraînement) est appelé comme vecteur de fonctionnalité. Un vecteur de caractéristiques est composé de plusieurs nombres dans un ordre spécifique.
A titre d'exemple simple, nous pouvons en cartographier un “méthode” dans un vecteur de caractéristiques pouvant comprendre plusieurs caractéristiques telles que:
- Hauteur du visage (cm)
- Largeur frontale (cm)
- Couleur de visage moyenne (R, g, B)
- Largeur des lèvres (cm)
- Hauteur du nez (cm)
Essentiellement, donné une photo, nous pouvons tracer plusieurs caractéristiques et les convertir en un vecteur de caractéristiques comme:
Hauteur du visage (cm) | Largeur frontale (cm) | Couleur de visage moyenne (RVB) | Largeur des lèvres (cm) | Hauteur du nez (cm) |
23,1 | 15,8 | (255, 224, 189) | 5.2 | 4.4 |
Ensuite, notre image est maintenant un vecteur qui pourrait être représenté comme (23.1, 15.8, 255, 224, 189, 5.2, 4.4). Bien sûr, il pourrait y avoir d'innombrables autres caractéristiques qui pourraient être dérivées de l'image (par exemple, couleur de cheveux, Poils, lunettes, etc.). Cependant, par exemple, ne considérons que ces 5 fonctionnalités simples.
À présent, une fois que nous avons codé chaque image dans un vecteur de caractéristiques, le problème devient beaucoup plus simple. Clairement, Quand nous avons 2 visages (images) qui représentent la même personne, les vecteurs de caractéristiques dérivés seront assez similaires. En d'autres termes, la “distance” entre le 2 les vecteurs de caractéristiques seront assez petits.
L'apprentissage automatique peut nous aider ici avec 2 Choses:
- Dérivation du vecteur de caractéristiques: il est difficile de lister manuellement toutes les fonctions car il y en a tellement. Un algorithme d'apprentissage automatique peut intelligemment étiqueter bon nombre de ces fonctionnalités. Par exemple, une caractéristique complexe pourrait être: rapport entre la hauteur du nez et la largeur du front. Maintenant, il sera assez difficile pour un être humain d'énumérer toutes ces caractéristiques de “Deuxième ordre”.
- Algorithmes de correspondance: Une fois les vecteurs de caractéristiques obtenus, un algorithme d'apprentissage automatique doit faire correspondre une nouvelle image avec l'ensemble des vecteurs de caractéristiques présents dans le corpus.
Maintenant que nous avons une compréhension de base du fonctionnement de la reconnaissance faciale, créons notre propre algorithme de reconnaissance faciale en utilisant certaines des bibliothèques python les plus populaires.
Cas d'étude
Ils nous donnent beaucoup de visages, peut-être de célébrités comme Mark Zuckerberg, Warren Buffett, Bill Gates, Shah Rukh Khan, etc. Appelez ce groupe de visages notre “corpus”. À présent, on nous donne l'image d'une autre célébrité (“nouvelle célébrité”). La tâche est simple: identifier si ce “nouvelle célébrité” fait partie des personnes présentes dans le “corpus”.
Voici quelques images du corpus:
Comme tu peux le voir, nous avons des célébrités comme Barack Obama, Bill Gates, Jeff Bezos, Mark Zuckerberg, Ray Dalio et Shah Rukh Khan.
À présent, Voici la “nouvelle célébrité”:
Noter: toutes les images ci-dessus sont tirées de google images.
C'est évidemment Shah Rukh Khan. Cependant, pour un ordinateur, c'est une tâche difficile. Le défi vient du fait que pour nous, les humains, il est facile de combiner autant de caractéristiques des images pour voir quelle est quelle célébrité. Cependant, pour un ordinateur, il n'est pas facile d'apprendre à reconnaître ces visages.
Il existe une bibliothèque Python incroyablement simple qui encapsule tout ce que nous avons appris plus tôt: créer des vecteurs de caractéristiques à partir de visages et savoir différencier les visages. Cette bibliothèque Python s'appelle comme La reconnaissance faciale et au fond, emploie dlib – un ensemble d'outils C ++ Moderne qui contient divers algorithmes d'apprentissage automatique qui aident à écrire des applications sophistiquées basées sur C ++.
La reconnaissance faciale La bibliothèque en Python peut effectuer un grand nombre de tâches:
- Trouver tous les visages dans une image donnée
- Rechercher et manipuler les traits du visage dans une image.
- Identifier les visages dans les images
- Reconnaissance faciale en temps réel
Ici, nous parlerons du troisième cas d'utilisation: identifier les visages dans les images.
Vous pouvez trouver le code source de La reconnaissance faciale bibliothèque ici sur Github: https://github.com/ageitgey/face_recognition.
En réalité, il y a aussi un tutoriel sur la façon d'installer La reconnaissance faciale Une bibliothèque: https://github.com/ageitgey/face_recognition#installation-options. Avant l'installation La reconnaissance faciale, vous devez installer dlib aussi bien que. Vous pouvez trouver les instructions pour installer dlib ici: https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf.
Implémentation Python
Cette section contient le code pour construire un système de reconnaissance faciale simple utilisant le La reconnaissance faciale Une bibliothèque. C'est la partie mise en oeuvre, nous allons parcourir le code pour le comprendre plus en détail dans la section suivante.
# importer les bibliothèques importer importer face_recognition # faire une liste de toutes les images disponibles images = os.listdir('images') # chargez votre image image_to_be_matched = face_recognition.load_image_file('mon_image.jpg') # codé l'image chargée dans un vecteur de caractéristiques image_to_be_matched_encoded = face_recognition.face_encodings( image_to_be_matched)[0] # itérer sur chaque image pour l'image dans les images: # charger l'image current_image = face_recognition.load_image_file("images/" + image) # encoder l'image chargée dans un vecteur de caractéristiques current_image_encoded = face_recognition.face_encodings(Image actuelle)[0] # faites correspondre votre image avec l'image et vérifiez si elle correspond result = face_recognition.compare_faces( [image_to_be_matched_encoded], current_image_encoded) # vérifier si c'était une correspondance si résultat[0] == Vrai: imprimer "Correspondant: " + image autre: imprimer "Pas adapté: " + image
La structure des dossiers est la suivante:
la reconnaissance faciale:
- fr.py
- mon_image.jpg
- images /
- barack_obama.jpg
- bill_gates.jpg
- jeff_bezos.jpg
- mark_zuckerberg.jpg
- ray_dalio.jpg
- shah_rukh_khan.jpg
- warren_buffett.jpg
Notre répertoire racine, la reconnaissance faciale contient:
- Notre précédent code de reconnaissance faciale sous la forme fr.py.
- mon_image.jpg: l'image à reconnaître (“nouvelle célébrité”).
- images / – les “corpus”.
Lorsque vous créez la structure de dossiers comme ci-dessus et exécutez le code ci-dessus, c'est ce que tu obtiens comme résultat:
Correspondant: shah_rukh_khan.jpg Pas adapté: warren_buffett.jpg Pas adapté: barack_obama.jpg Pas adapté: ray_dalio.jpg Pas adapté: bill_gates.jpg Pas adapté: jeff_bezos.jpg Pas adapté: mark_zuckerberg.jpg
Clairement, la “nouvelle célébrité” est Shah Rukh Khan et notre système de reconnaissance faciale est capable de le détecter.
Comprendre le code Python
À présent, passons en revue le code pour comprendre comment cela fonctionne:
# importer les bibliothèques importer importer face_recognition
Ce sont simplement des importations. Nous utiliserons la fonction intégrée tu bibliothèque pour lire toutes les images de notre corpus et nous utiliserons La reconnaissance faciale pour écrire l'algorithme.
# faire une liste de toutes les images disponibles images = os.listdir('images')
Ce code simple nous aide à identifier le chemin de toutes les images du corpus. Une fois cette ligne exécutée, nous aurons:
image = ['shah_rukh_khan.jpg', 'warren_buffett.jpg', 'barack_obama.jpg', 'ray_dalia.jpg', 'bill_gates.jpg', 'jeff_bezos.jpg', 'mark_zuckerberg.jpg']
À présent, le code suivant charge l'image de la nouvelle célébrité:
# chargez votre image image_to_be_matched = face_recognition.load_image_file('mon_image.jpg')
Pour s'assurer que les algorithmes peuvent interpréter l'image, nous convertissons l'image en un vecteur de caractéristiques:
# codé l'image chargée dans un vecteur de caractéristiques image_to_be_matched_encoded = face_recognition.face_encodings( image_to_be_matched)[0]
Le reste du code est maintenant assez simple:
# itérer sur chaque image pour l'image dans les images: # charger l'image current_image = face_recognition.load_image_file("images/" + image) # encoder l'image chargée dans un vecteur de caractéristiques current_image_encoded = face_recognition.face_encodings(Image actuelle)[0] # faites correspondre votre image avec l'image et vérifiez si elle correspond result = face_recognition.compare_faces( [image_to_be_matched_encoded], current_image_encoded) # vérifier si c'était une correspondance si résultat[0] == Vrai: imprimer "Correspondant: " + image autre: imprimer "Pas adapté: " + image
Nous sommes ici:
- Boucle sur chaque image.
- Encoder l'image dans un vecteur de caractéristiques.
- Comparer l'image chargée avec l'image à reconnaître.
- Si c'est une coïncidence, nous l'imprimons. Si ça ne correspond pas, nous l'imprimons aussi.
Le résultat montré ci-dessus suggère clairement que cet algorithme de reconnaissance faciale simple fonctionne incroyablement bien.. Essayons de remplacer Mon image avec une autre image:
Quand je relance l'algorithme, vous verrez le résultat suivant:
Pas adapté: shah_rukh_khan.jpg Pas adapté: warren_buffett.jpg Pas adapté: barack_obama.jpg Pas adapté: ray_dalio.jpg Pas adapté: bill_gates.jpg Pas adapté: jeff_bezos.jpg Pas adapté: mark_zuckerberg.jpg
Clairement, le système n'a pas identifié Jack Ma comme l'une des célébrités susmentionnées. Cela indique que notre algorithme est assez bon à la fois:
- Identifier correctement ceux qui sont présents dans le corpus
- Marquer une inadéquation pour ceux qui ne sont pas présents dans le corpus
Applications de reconnaissance faciale
La reconnaissance faciale est un problème bien documenté et largement utilisé dans l'industrie et le milieu universitaire. Exemple, un criminel en Chine a été arrêté parce qu'un système de reconnaissance faciale dans un centre commercial a détecté son visage et a sonné l'alarme. Clairement, la reconnaissance faciale peut être utilisée pour atténuer la criminalité. Il existe de nombreux autres cas d'utilisation intéressants de la reconnaissance faciale:
- Authentification faciale: Apple a introduit Face ID pour l'authentification faciale sur les iPhones. Certaines des grandes banques essaient d'utiliser l'authentification faciale pour les casiers.
- Service Clients: Certaines banques en Malaisie ont installé des systèmes qui utilisent la reconnaissance faciale pour détecter les clients précieux de la banque afin que la banque puisse fournir un service personnalisé. De cette manière, les banques peuvent générer plus de revenus en fidélisant ces clients et en les gardant heureux.
- Souscription d'assurance: De nombreuses compagnies d'assurance utilisent la reconnaissance faciale pour faire correspondre le visage de la personne à celui fourni sur la preuve d'identité avec photo.. De cette façon, le processus d'abonnement devient beaucoup plus rapide.
Remarques finales
En résumé, la reconnaissance faciale est un problème intéressant avec de nombreux cas d'utilisation puissants qui peuvent considérablement aider la société dans diverses dimensions. Bien qu'il y ait toujours un risque éthique associé à la commercialisation de telles techniques, c'est un débat que nous mettrons de côté pour une autre fois.
J'espère que cet article vous a été utile. Soumettez vos commentaires et suggestions dans la section commentaires ci-dessous!!