Riconoscimento del viso con Python e OpenCV

condividi

Facebook
Twitter
WhatsApp

In questo articolo, sapremo cos’è il riconoscimento dei volti e come è diverso dal rilevamento dei volti. Andremo brevemente sulla teoria del riconoscimento dei volti e poi passeremo alla sezione di codifica. Alla fine di questo articolo, sarete in grado di fare un programma di riconoscimento facciale per riconoscere i volti nelle immagini e nelle webcam dal vivo.

  1. Che cos’è il riconoscimento facciale?
  2. Riconoscimento dei volti usando Python
    1. Riconoscere i volti nelle webcam
    2. Riconoscere i volti nelle immagini

Cos’è il riconoscimento dei volti?

Nella visione artificiale, un problema essenziale che stiamo cercando di risolvere è quello di rilevare automaticamente gli oggetti in un’immagine senza intervento umano. Il rilevamento dei volti può essere pensato come un problema di questo tipo, in cui si rilevano i volti umani in un’immagine. Ci possono essere leggere differenze nei volti degli esseri umani, ma nel complesso, si può dire che ci sono alcune caratteristiche che sono associate a tutti i volti umani. Ci sono vari algoritmi di rilevamento dei volti, ma l’algoritmo Viola-Jones è uno dei metodi più antichi che viene usato anche oggi e lo useremo più avanti nell’articolo. Potete esaminare l’Algoritmo Viola-Jones dopo aver completato questo articolo, poiché lo linkerò alla fine di questo articolo.

Il rilevamento dei volti è di solito il primo passo verso molte tecnologie legate ai volti, come il riconoscimento o la verifica dei volti. Tuttavia, il rilevamento dei volti può avere applicazioni molto utili. L’applicazione di maggior successo del rilevamento dei volti sarebbe probabilmente lo scatto di foto. Quando scatti una foto ai tuoi amici, l’algoritmo di rilevamento dei volti incorporato nella tua fotocamera digitale rileva dove sono i volti e regola la messa a fuoco di conseguenza.

Per un tutorial sul solo rilevamento dei volti, clicca qui

Che cos’è il riconoscimento dei volti?

Ora che siamo riusciti a fare tali algoritmi che possono rilevare i volti, possiamo anche riconoscere di chi sono i volti?

Il riconoscimento dei volti è un metodo per identificare o verificare l’identità di un individuo usando il suo volto. Ci sono vari algoritmi che possono fare il riconoscimento dei volti, ma la loro accuratezza può variare. Qui sto per descrivere come facciamo il riconoscimento dei volti usando l’apprendimento profondo.

Ora cerchiamo di capire come riconosciamo i volti usando l’apprendimento profondo. Facciamo uso dell’embedding del volto in cui ogni volto viene convertito in un vettore e questa tecnica è chiamata apprendimento metrico profondo. Permettetemi di dividere ulteriormente questo processo in tre semplici passi per una facile comprensione:

Rilevamento dei volti: Il primo compito che eseguiamo è il rilevamento dei volti nell’immagine o nel flusso video. Ora che conosciamo l’esatta posizione/coordinate del volto, estraiamo questo volto per l’ulteriore elaborazione successiva.

Estrazione delle caratteristiche: Ora che abbiamo ritagliato il volto dall’immagine, ne estraiamo le caratteristiche. Qui useremo l’embedding del volto per estrarre le caratteristiche dal volto. Una rete neurale prende un’immagine del volto di una persona come input e produce un vettore che rappresenta le caratteristiche più importanti di un volto. Nell’apprendimento automatico, questo vettore è chiamato embedding e quindi chiamiamo questo vettore come face embedding. Ora, in che modo questo aiuta a riconoscere i volti di persone diverse?

Durante l’addestramento della rete neurale, la rete impara a produrre vettori simili per i volti che sembrano simili. Per esempio, se ho più immagini di volti in tempi diversi, naturalmente, alcune delle caratteristiche del viso potrebbero cambiare, ma non fino a questo punto. Quindi in questo caso i vettori associati ai volti sono simili o in breve, sono molto vicini nello spazio vettoriale. Date un’occhiata al seguente diagramma per avere un’idea approssimativa:

Ora, dopo aver addestrato la rete, la rete impara a produrre vettori che sono più vicini tra loro (simili) per i volti della stessa persona (che sembrano simili). I vettori di cui sopra si trasformano ora in:

Non addestreremo qui una rete di questo tipo perché ci vuole una quantità significativa di dati e potenza di calcolo per addestrare tali reti. Useremo una rete pre-addestrata addestrata da Davis King su un set di dati di ~3 milioni di immagini. La rete produce un vettore di 128 numeri che rappresentano le caratteristiche più importanti di un volto.

Ora che sappiamo come funziona questa rete, vediamo come utilizzarla sui nostri dati. Passiamo tutte le immagini dei nostri dati a questa rete pre-addestrata per ottenere le rispettive embeddings e salviamo queste embeddings in un file per il passo successivo.

Confronto dei volti: Ora che abbiamo le embeddings per ogni faccia nei nostri dati salvate in un file, il prossimo passo è riconoscere una nuova immagine che non è nei nostri dati. Quindi il primo passo è quello di calcolare l’embedding del volto per l’immagine usando la stessa rete che abbiamo usato sopra e poi confrontare questo embedding con il resto delle embedding che abbiamo. Riconosciamo il volto se l’incorporazione generata è più vicina o simile a qualsiasi altra incorporazione come mostrato di seguito:

Allora abbiamo passato due immagini, una delle immagini è di Vladimir Putin e l’altra di George W. Bush. Nel nostro esempio sopra, non abbiamo salvato le embeddings per Putin ma abbiamo salvato le embeddings di Bush. Così, quando abbiamo confrontato le due nuove incorporazioni con quelle esistenti, il vettore per Bush è più vicino alle altre incorporazioni del volto di Bush mentre le incorporazioni del volto di Putin non sono più vicine a nessun’altra incorporazione e quindi il programma non può riconoscerlo.

Riconoscimento del volto usando Python

In questa sezione, implementeremo il riconoscimento del volto usando OpenCV e Python. Per prima cosa, vediamo le librerie di cui avremo bisogno e come installarle:

  • OpenCV
  • dlib
  • Face_recognition

OpenCV è una libreria per l’elaborazione di immagini e video ed è usata per l’analisi di immagini e video, come il rilevamento facciale, la lettura delle targhe, il fotoritocco, la visione robotica avanzata, il riconoscimento ottico dei caratteri, e molto altro.

La libreria dlib, mantenuta da Davis King, contiene la nostra implementazione del “deep metric learning” che è usata per costruire le nostre embeddings facciali usate per il processo di riconoscimento vero e proprio.

La libreria face_recognition, creata da Adam Geitgey, avvolge la funzionalità di riconoscimento facciale di dlib, e questa libreria è super facile da usare e la useremo nel nostro codice. Ricordatevi di installare la libreria dlib prima di installare face_recognition.

Per installare OpenCV, digitate nel prompt dei comandi

pip install opencv-python

Ho provato vari modi per installare dlib su Windows ma il più semplice di tutti è tramite Anaconda. Per prima cosa, installate Anaconda (qui c’è una guida per installarlo) e poi usate questo comando nel vostro prompt dei comandi:

conda install -c conda-forge dlib

Poi per installare face_recognition, digitate nel prompt dei comandi

pip install face_recognition

Ora che abbiamo installato tutte le dipendenze, iniziamo a codificare. Dovremo creare tre file, uno prenderà il nostro set di dati ed estrarrà l’incorporamento del viso per ogni faccia usando dlib. Successivamente, salveremo queste incorporazioni in un file.

Nel prossimo file confronteremo i volti con l’esistente e riconosceremo i volti nelle immagini e poi faremo lo stesso, ma riconosceremo i volti nel feed della webcam dal vivo

Estrarre le caratteristiche dal volto

Prima di tutto, è necessario ottenere un dataset o crearne uno proprio. Assicurati solo di organizzare tutte le immagini in cartelle con ogni cartella contenente immagini di una sola persona.

Poi, salva il dataset in una cartella uguale a quella in cui farai il file. Ora ecco il codice:

Ora che abbiamo memorizzato gli incorporamenti in un file chiamato “face_enc”, possiamo usarli per riconoscere i volti nelle immagini o nel flusso video dal vivo.

Riconoscimento di volti in feed di webcam dal vivo

Ecco lo script per riconoscere i volti in un feed di webcam dal vivo:

Anche se nell’esempio precedente abbiamo usato haar cascade per rilevare i volti, si può anche usare face_recognition.face_locations per rilevare un volto come abbiamo fatto nello script precedente

Riconoscimento dei volti nelle immagini

Lo script per rilevare e riconoscere i volti nelle immagini è quasi simile a quello visto sopra. Provate voi stessi e se non ci riuscite date un’occhiata al codice qui sotto:

Output:

  • Input
  • Output

Questo ci porta alla fine di questo articolo dove abbiamo imparato il riconoscimento dei volti. È possibile ottenere un corso gratuito su Great learning academy su vari corsi. Clicca il banner qui sotto per saperne di più

Puoi anche aggiornarti con il corso PGP Artificial Intelligence and Machine Learning di Great Learning. Il corso offre il tutoraggio di leader del settore, e avrete anche l’opportunità di lavorare su progetti rilevanti per l’industria in tempo reale.

Altre letture

  1. Rilevazione del volto usando l’algoritmo Viola-Jones
  2. Rilevazione del volto in tempo reale | Rilevazione della maschera del volto usando OpenCV
  3. Rilevazione dell’oggetto in tempo reale usando TensorFlow
  4. Rilevazione dell’oggetto YOLO usando OpenCV
  5. Rilevazione dell’oggetto in Pytorch | Cos’è la rilevazione dell’oggetto?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.