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 profondoApprendimento profondo, Una sottodisciplina dell'intelligenza artificiale, si affida a reti neurali artificiali per analizzare ed elaborare grandi volumi di dati. Questa tecnica consente alle macchine di apprendere modelli ed eseguire compiti complessi, come il riconoscimento vocale e la visione artificiale. La sua capacità di migliorare continuamente man mano che vengono forniti più dati lo rende uno strumento chiave in vari settori, dalla salute....
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 rossoLe reti neurali sono modelli computazionali ispirati al funzionamento del cervello umano. Usano strutture note come neuroni artificiali per elaborare e apprendere dai dati. Queste reti sono fondamentali nel campo dell'intelligenza artificiale, consentendo progressi significativi in attività come il riconoscimento delle immagini, Elaborazione del linguaggio naturale e previsione delle serie temporali, tra gli altri. La loro capacità di apprendere schemi complessi li rende strumenti potenti.. 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.
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.
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:
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 updateEl término "UPDATE" se utiliza comúnmente en el ámbito tecnológico y de la comunicación para referirse a la acción de actualizar información, software o sistemas. En un mundo en constante evolución, las actualizaciones son esenciales para mejorar la seguridad, corregir errores y añadir nuevas funciones. Empresas y usuarios deben estar atentos a las actualizaciones disponibles para asegurar un rendimiento óptimo y mantener la integridad de sus dispositivos y datos.... 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
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.