Reconnaissance faciale avec OpenCV | Créer un système de reconnaissance faciale

Contenu

Cet article a été publié dans le cadre du Blogathon sur la science des données

– Compréhension de base de la classification des images.

– Connaissance de Python et du Deep Learning

– Compréhension conceptuelle de divers modules d'apprentissage en profondeur.

introduction

Dans cet article, nous allons voir ce qu'est la reconnaissance faciale? Et en quoi est-ce aussi différent de la détection de visage? Nous allons brièvement comprendre la théorie de la reconnaissance faciale puis passer à la section codage !! A la fin de cet article, vous pouvez développer un programme de reconnaissance faciale pour reconnaître les visages dans les images !!!

Ordre du jour de cet article

1. Présentation de la détection de visage

2. Présentation de la reconnaissance faciale

3. Comprendre ce qu'est OpenCV

4. Implémentation Python

Présentation de la détection de visage

Que faire si la machine est capable de détecter automatiquement des objets dans une image sans intervention humaine? Voyons: la détection des visages peut être un problème lorsque nous détectons des visages humains dans une image. Il peut y avoir de légères différences dans les visages humains, mais après tout, Il est sûr de dire qu'il y a des caractéristiques spécifiques qui sont associées à tous les visages humains.. Il existe plusieurs algorithmes de détection de visage, mais le Viola Jones L'algorithme est la méthode la plus ancienne qui est également utilisée aujourd'hui.

La détection des visages est généralement la première étape vers de nombreuses applications liées aux visages., comme la reconnaissance faciale ou la vérification faciale. Mais la détection de visage a des applications très utiles. L'une des applications de détection de visage les plus réussies est probablement la “Prise de vue”.

Exemple: lorsque vous cliquez sur une photo de vos amis, la caméra avec l'algorithme de détection de visage intégré détecte où se trouvent les visages et ajuste la mise au point en conséquence.

Présentation de la reconnaissance faciale

Maintenant, nous avons vu que nos algorithmes peuvent détecter les visages, mais pouvons-nous aussi reconnaître dont les visages sont? Et si un algorithme était capable de reconnaître les visages?

Généralement, La reconnaissance faciale est une méthode d'identification ou de vérification de la identité d'un individu utilisant son visage. Il existe plusieurs algorithmes de reconnaissance faciale, mais sa précision peut varier. Ici, je vais discuter avec vous de la façon dont nous pouvons faire de la reconnaissance faciale en utilisant l'apprentissage en profondeur.

À présent, comprenons comment nous pouvons reconnaître les visages grâce à l'apprentissage en profondeur. Ici, nous utilisons des incrustations de visage où chaque visage est converti en un vecteur. La technique de conversion du visage en vecteur s'appelle apprentissage métrique approfondi. Permettez-moi de décomposer ce processus en trois étapes simples pour une compréhension meilleure et plus facile.:

1. Détection facial:

La première tâche que nous faisons est de détecter les visages dans l'image (La photographie) ou séquence vidéo. On sait maintenant que les coordonnées / emplacement exact du visage, nous extrayons donc cette face pour un traitement ultérieur.

2. Extraction de caractéristiques:

Maintenant, voyez que nous avons recadré le visage de l'image, nous en extrayons donc des caractéristiques spécifiques. Ici, nous allons voir comment utiliser des incrustations faciales pour extraire ces caractéristiques du visage. Comme nous savons, un réseau neuronal prend une image du visage de la personne en entrée et génère un vecteur qui représente les caractéristiques les plus importantes d'un visage. En apprentissage automatique, ce vecteur n'est rien d'autre qu'appelé incrustation et c'est pourquoi nous appelons ce vecteur incrustation de visage. Maintenant bien, Comment cela vous aidera-t-il à reconnaître les visages de différentes personnes?

Quand on entraîne le réseau de neurones, le réseau apprend à générer vecteurs similaires pour des visages qui se ressemblent. Prenons un exemple, si j'ai plusieurs images de visage dans un laps de temps différent, il est évident que certaines caractéristiques peuvent changer, mais pas trop. Ensuite, dans ce problème, les vecteurs associés aux faces sont similaires ou on peut dire qu'ils sont très proches dans l'espace vectoriel.

Jusque là, nous avons appris comment fonctionne ce réseau, voyons comment utiliser ce réseau sur nos propres données. Ici, nous transmettons toutes les images de nos données à ce réseau préalablement formé pour obtenir les incorporations respectives et enregistrer ces incorporations dans un fichier pour l'étape suivante.

3. Comparaison de visage:

Nous avons des incrustations de visage pour chaque visage dans nos données enregistrées dans un fichier, la prochaine étape est reconnaître une nouvelle image qui est pas dans nos données. Donc, la première étape consiste à calculer l'incrustation de visage pour l'image en utilisant la même grille que nous avons utilisée précédemment, puis à comparer cette incrustation au reste de l'incrustation que nous avons. Nous reconnaissons le visage si l'incrustation générée est plus proche ou similaire à toute autre incrustation.

909161_fpdngo6lm5pdeipooezk1g-7988524

Source de l'image: https://cdn-media-1.freecodecamp.org/images/1*fpDngO6lM5pDeIPOOezK1g.jpeg

Comprendre ce qu'est OpenCV

Dans le domaine de l'Intelligence Artificielle, La vision par ordinateur est l'une des tâches les plus intéressantes et les plus difficiles. La vision par ordinateur agit comme un pont entre les logiciels informatiques et les visualisations. Computer Vision permet aux logiciels informatiques de comprendre et d'apprendre sur les affichages sur le alentours.

Comprenons un exemple: Basé sur la forme, la couleur et la taille qui déterminent le fruit. Cette tâche est très facile pour le cerveau humain, mais dans le processus de Computer Vision, premier, nous devons collecter les données, puis nous effectuons les traitements de données, puis nous formons et enseignons le modèle pour comprendre comment distinguer les fruits en fonction de leur taille, forme et couleur des fruits.

77786yolo-predictions-2660281

Source de l'image: https://martinapugliese.github.io/assets/posts_images/yolo-predictions.png

Aujourd'hui, il existe plusieurs packages disponibles pour effectuer des problèmes d'apprentissage automatique, apprentissage profond et vision par ordinateur. Jusqu'à maintenant, la vision par ordinateur est le meilleur module pour des problèmes aussi complexes. OpenCV est une bibliothèque open source. Il prend en charge différents langages de programmation comme R, Python, etc. Fonctionne probablement sur la plupart des plates-formes comme Windows, Linux et macOS.

Avantages d'OpenCV:

1. Open CV est gratuit et est une bibliothèque open source.

2. Ouvrir un CV est rapide, puisqu'il est écrit en langage C / C ++ par rapport aux autres.

3. Avec moins de RAM système, OpenCV fonctionne mieux.

4. Il est compatible avec la plupart des systèmes d'exploitation tels que Windows, Linux et macOS.

Mise en œuvre

Dans cette section, nous allons implémenter la reconnaissance faciale en utilisant OpenCV et Python.

Premier, voyons de quelles bibliothèques nous aurons besoin et comment les installer:

1. OpenCV

2. dlib

3. La reconnaissance faciale

OpenCV est une bibliothèque de traitement d'images et de vidéos et est utilisée pour l'analyse d'images et de vidéos, comme détection de visage, lecture de plaque d'immatriculation, retouche photo, vision robotique avancée et bien d'autres.

Les dlib La bibliothèque contient notre implémentation de « deep metric learning’ qui est utilisé pour construire nos incrustations faciales utilisées pour le processus de reconnaissance réel.

Les La reconnaissance faciale la bibliothèque est très facile à utiliser et nous l'utiliserons dans notre code. Premier, n'oubliez pas d'installer la bibliothèque dlib avant d'installer face_recognition.

Le résultat de toute application de reconnaissance faciale qui utilise OpenCV sera comme ceci:

84749mzu1mta4mw-4842466

Source de l'image: https://spectre.ieee.org/image/MzU1MTA4Mw.jpeg

Pour installer OpenCV, dlib et reconnaissance faciale, tapez les extraits suivants à l'invite de commande.

pip installer opencv-python
conda install -c conda-forge dlib
pip installer face_recognition

Faisons maintenant le code!

Extraire les caractéristiques du visage

Premier, besoin d'un jeu de données ou même de créer le vôtre. Assurez-vous simplement d'organiser toutes les images dans des dossiers avec chaque dossier contenant des images d'une seule personne.

Ou vous pouvez télécharger l'ensemble de données à partir de ce Relier.

À présent, enregistrez l'ensemble de données dans un dossier de la même manière que vous créerez le fichier. Voici le code et j'ai ajouté des commentaires au besoin:

from imutils import paths #imutils includes opencv functions
import face_recognition
import pickle
import cv2
import os
#get paths of each file in folder named Images
#Images here that contains data(folders of various people)
imagePath = list(paths.list_images('Images'))
kEncodings = []
kNames = []
# loop over the image paths
for (i, ip) in enumerate(imagePath):
# extract the person name from the image path
name = ip.split(os.path.sep)[-2]
# load the input image and convert it from BGR
image = cv2.imread(ip)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
boxes = face_recognition.face_locations(rgb,model='hog')
# compute the facial embedding for the any face
encodings = face_recognition.face_encodings(rgb, boxes)
# loop over the encodings
for encoding in encodings:
kEncodings.append(encoding)
kNames.append(name)
#save emcodings along with their names in dictionary data
data = {"encodings": kEncodings, "names": kNames}
#use pickle to save data into a file for later use
f = open("face_enc", "wb")
f.write(pickle.dumps(data))#to open file in write mode
f.close()#to close file

Voyons maintenant que nous avons stocké l'intégration dans un fichier appelé “face_enc", Nous pouvons donc les utiliser pour reconnaître les visages dans les images (Photographies) ou streaming vidéo en direct.

La prochaine partie est que nous verrons comment reconnaître des visages à partir d'images.

Comment reconnaître le visage sur les images

Le script suivant pour détecter et reconnaître les visages dans les images. J'ai mis des commentaires à côté du code là où c'était nécessaire. Ensuite, vous serez en mesure de comprendre le code efficacement.


import face_recognition
import imutils #imutils includes opencv functions
import pickle
import time
import cv2
import os
#to find path of xml file containing haarCascade file
cfp = os.path.dirname(cv2.__file__) + "/data/haarcascade_frontalface_alt2.xml"
# load the harcaascade in the cascade classifier
fc = cv2.CascadeClassifier(cfp)
# load the known faces and embeddings saved in last file
data = pickle.loads(open('face_enc', "rb").read())
#Find path to the image you want to detect face and pass it here
image = cv2.imread(Path-to-img)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
#convert image to Greyscale for HaarCascade
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = fc.detectMultiScale(gray,
scaleFactor=1.1,
minNeighbors=6,
minSize=(60, 60),
flags=cv2.CASCADE_SCALE_IMAGE)
# the facial embeddings for face in input
encodings = face_recognition.face_encodings(rgb)
names = []
# loop over the facial embeddings incase
# we have multiple embeddings for multiple fcaes
for encoding in encodings:
#Compare encodings with encodings in data["encodings"]
#Matches contain array with boolean values True and False
matches = face_recognition.compare_faces(data["encodings"],
encoding)
#set name =unknown if no encoding matches
name = "Unknown"
# check to see if we have found a match
if True in matches:
#Find positions at which we get True and store them
matchedIdxs = [i for (i, b) in enumerate(matches) if b]
count = {}
# loop over the matched indexes and maintain a count for
# each recognized face face
for i in matchedIdxs:
#Check the names at respective indexes we stored in matchedIdxs
name = data["names"][i]
#increase count for the name we got
count[name] = count.get(name, 0) + 1
#set name which has highest count
name = max(count, key=count.get)
# will update the list of names
names.append(name)
# do loop over the recognized faces
for ((x, y, w, h), name) in zip(faces, names):
# rescale the face coordinates
# draw the predicted face name on the image
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(image, name, (x, y), cv2.FONT_HERSHEY_SIMPLEX,
0.75, (0, 255, 0), 2)
cv2.imshow("Frame", image)
cv2.waitKey(0)

Production

85438sans nom-3260817

conclusion

Maintenant, vous pouvez voir que cela nous amène à la fin de cet article où nous avons tout appris sur la reconnaissance faciale. j'espère que cet article vous a plu. Merci!

Les médias présentés dans cet article ne sont pas la propriété de DataPeaker et sont utilisés à la discrétion de l'auteur.

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.