Riconoscimento facciale con OpenCV | Crea un sistema di riconoscimento facciale

Contenuti

Questo articolo è stato pubblicato nell'ambito del Blogathon sulla scienza dei dati

– Conoscenza di base della classificazione delle immagini.

– Conoscenza di Python e Deep Learning

– Comprensione concettuale di vari moduli di apprendimento profondo.

introduzione

In questo articolo vedremo cos'è il riconoscimento facciale? E in che modo è anche diverso dal rilevamento dei volti? Comprenderemo brevemente la teoria del riconoscimento facciale e poi passeremo alla sezione di codifica!! Alla fine di questo articolo, sarai in grado di sviluppare un programma di riconoscimento facciale per riconoscere i volti nelle immagini !!!

Agenda per questo articolo

1. Panoramica sul rilevamento dei volti

2. Panoramica sul riconoscimento facciale

3. Comprendi cos'è OpenCV

4. Implementazione con Python

Panoramica sul rilevamento dei volti

E se la macchina fosse in grado di rilevare automaticamente gli oggetti in un'immagine senza il coinvolgimento umano? Vediamo: il rilevamento dei volti può essere un problema quando rileviamo volti umani in un'immagine. Potrebbero esserci lievi differenze nei volti umani, ma dopotutto, è sicuro dire che ci sono caratteristiche specifiche che sono associate a tutti i volti umani. Esistono diversi algoritmi di rilevamento dei volti, ma Viola Jones L'algoritmo è il metodo più antico utilizzato anche oggi.

Il rilevamento dei volti è solitamente il primo passo verso molte app relative ai volti, come il riconoscimento facciale o la verifica facciale. Ma il rilevamento dei volti ha applicazioni molto utili. Una delle applicazioni di rilevamento dei volti di maggior successo è probabilmente il “scattare foto”.

Esempio: quando clicchi su una foto dei tuoi amici, La fotocamera in cui è stato incorporato l'algoritmo di rilevamento dei volti rileva dove si trovano i volti e regola la messa a fuoco di conseguenza.

Panoramica sul riconoscimento facciale

Ora abbiamo visto che i nostri algoritmi possono rilevare i volti, ma possiamo anche riconoscere i volti di chi sono? Cosa succede se un algoritmo è in grado di riconoscere i volti??

In genere, Il riconoscimento facciale è un metodo per identificare o verificare il identità di un individuo che indossa il viso. Esistono diversi algoritmi per il riconoscimento facciale, ma la sua accuratezza può variare. Qui parlerò con te di come possiamo eseguire il riconoscimento facciale usando il deep learning.

Ora, Capiamo come possiamo riconoscere i volti usando il deep learning. Qui utilizziamo gli incorporamenti di facce in cui ogni faccia viene convertita in un vettore. Viene chiamata la tecnica per trasformare la faccia in un vettore apprendimento metrico profondo. Consentitemi di suddividere questo processo in tre semplici passaggi per una migliore e più facile comprensione.:

1. Riconoscimento facciale:

Il primo compito che eseguiamo è rilevare i volti nell'immagine (Fotografia) o flusso video. Ora sappiamo che le coordinate / posizione esatta del viso, quindi estraiamo questa faccia per ulteriori elaborazioni.

2. Estrazione di funzionalità:

Ora vedi che abbiamo ritagliato la faccia dell'immagine, quindi estraiamo caratteristiche specifiche da esso. Qui vedremo come utilizzare gli incorporamenti del viso per estrarre queste caratteristiche dal viso. Come sappiamo, un neuronale rosso Prende come input un'immagine del volto della persona e genera un vettore che rappresenta le caratteristiche più importanti di un volto. Nell'apprendimento automatico, questo vettore è appena chiamato incrostazione e quindi chiamiamo questo vettore intarsio del viso. però, come questo aiuterà a riconoscere i volti di persone diverse?

Quando alleniamo la rete neurale, la rete impara a generare vettori simili per facce che si somigliano. Consideriamo un esempio, se ho più immagini di volti in un intervallo di tempo diverso, è ovvio che alcune caratteristiche possono cambiare, ma non troppo. Quindi, in questo problema, i vettori associati alle facce sono simili o possiamo dire che sono molto vicini nello spazio vettoriale.

Finora, veniamo a sapere come funziona questa rete, vediamo come utilizzare questa rete nei nostri dati. Qui passiamo tutte le immagini dei nostri dati a questa rete precedentemente addestrata per ottenere i rispettivi incorporamenti e salvare questi incorporamenti in un file per il passaggio successivo.

3. Confronto dei volti:

Abbiamo incorporamenti facciali per ogni faccia nei nostri dati salvati in un file, Il passo successivo è riconoscere una nuova immagine che è non nei nostri dati. Perciò, il primo passo è calcolare l'incorporamento della faccia per l'immagine usando la stessa rete che abbiamo usato in precedenza e quindi confrontare questo incorporamento con il resto degli incorporamenti che abbiamo. Riconosciamo la faccia se l'incorporamento generato è più vicino o simile a qualsiasi altro incorporamento.

909161_fpdngo6lm5pdeipooezk1g-7988524

Fonte immagine: https://cdn-media-1.freecodecamp.org/images/1*fpDngO6lM5pDeIPOOezK1g.jpeg

Comprendi cos'è OpenCV

Nel campo dell'Intelligenza Artificiale, La visione artificiale è uno dei compiti più interessanti e stimolanti. La visione artificiale funge da ponte tra il software per computer e le visualizzazioni. Computer Vision consente al software del computer di comprendere e apprendere le visualizzazioni sul dintorni.

Capiamo un esempio: In base alla forma, colore e dimensione che determinano il frutto. Questo compito è molto facile per il cervello umano, ma nel processo di Computer Vision, primo, abbiamo bisogno di raccogliere i dati, quindi eseguiamo le operazioni di elaborazione dei dati, e poi alleniamo e insegniamo al modello a capire come distinguere i frutti in base alla loro dimensione, forma e colore del frutto.

77786yolo-predizioni-2660281

Fonte immagine: https://martinapugliese.github.io/assets/posts_images/yolo-predictions.png

Oggi, sono disponibili diversi pacchetti per eseguire problemi di apprendimento automatico, deep learning e computer vision. Fino ad ora, la visione artificiale è il modulo migliore per problemi così complessi. OpenCV è una libreria open source. È compatibile con diversi linguaggi di programmazione come R, Pitone, eccetera. Probabilmente funziona sulla maggior parte delle piattaforme come Windows, Linux e macOS.

Vantaggi di OpenCV:

1. Open CV è gratuito ed è una libreria open source.

2. Aprire il CV è veloce, poiché è scritto in linguaggio C / C ++ rispetto ad altri.

3. Con meno RAM di sistema, OpenCV funziona meglio.

4. È compatibile con la maggior parte dei sistemi operativi come Windows, Linux e macOS.

Implementazione

In questa sezione, implementeremo il riconoscimento facciale utilizzando OpenCV e Python.

Primo, vediamo di quali librerie avremo bisogno e come installarle:

1. OpenCV

2. dlib

3. Riconoscimento facciale

OpenCV è una libreria di elaborazione di immagini e video e viene utilizzata per l'analisi di immagini e video, come rilevamento del volto, lettura targa, fotoritocco, visione robotica avanzata e molti altri.

il dlib La libreria contiene la nostra implementazione del "deep metric learning"’ che viene utilizzato per costruire i nostri intarsi facciali utilizzati per il processo di riconoscimento effettivo.

il Riconoscimento facciale è molto facile lavorare con la libreria e lo useremo nel nostro codice. Primo, Ricordarsi di installare la libreria DLIB prima di installare face_recognition.

Il risultato di qualsiasi applicazione di riconoscimento facciale che utilizza OpenCV sarà come questo:

84749mzu1mta4mw-4842466

Fonte immagine: https://spectrum.ieee.org/image/MzU1MTA4Mw.jpeg

Per installare OpenCV, dlib e riconoscimento facciale, Digitare i seguenti frammenti al prompt dei comandi.

pip installare opencv-python
conda install -c conda-forge dlib
face_recognition di installazione pip

Ora facciamo il codice!!

Estrarre le caratteristiche da Face

Primo, hai bisogno di un set di dati o addirittura crearne uno personalizzato. Assicurati solo di organizzare tutte le immagini in cartelle con ogni cartella contenente immagini di una sola persona.

Oppure puoi scaricare il set di dati da questo Collegamento.

Ora, salva il set di dati in una cartella nello stesso modo in cui creerai il file. Ecco il codice e ho aggiunto commenti dove necessario:

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

Ora vediamo che abbiamo memorizzato l'incorporamento in un file chiamato “face_enc“, Quindi possiamo usarli per riconoscere i volti nelle immagini (Fotografie) streaming video in diretta.

La prossima parte è che vedremo come riconoscere i volti dalle immagini.

Come riconoscere il volto nelle immagini

Lo script seguente per rilevare e riconoscere i volti nelle immagini. Ho fornito commenti accanto al codice ove necessario. Quindi sarai in grado di comprendere il codice in modo efficiente.

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)

Produzione

85438senza nome-3260817

conclusione

Ora puoi vedere che questo ci porta alla fine di questo articolo in cui abbiamo imparato tutto sul riconoscimento facciale.. Spero che questo articolo ti sia piaciuto. Grazie!

Il supporto mostrato in questo articolo non è di proprietà di DataPeaker e viene utilizzato a discrezione dell'autore.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.