introduzione
Lo sapevi che ogni volta che carichi una foto su Facebook, la piattaforma utilizza algoritmi di riconoscimento facciale per identificare le persone in quell'immagine? O che alcuni governi di tutto il mondo utilizzano la tecnologia di riconoscimento facciale per identificare e catturare i criminali?? Non ho bisogno di dirti che ora puoi sbloccare gli smartphone con la tua faccia!!
Le applicazioni di questo sottodominio della computer vision sono vaste e le aziende di tutto il mondo ne stanno già raccogliendo i frutti.. L'uso di modelli di riconoscimento facciale aumenterà solo nei prossimi anni, quindi perché non imparare a costruirne uno da zero??
In questo articolo, faremo proprio questo. Prima capiremo il funzionamento interno del riconoscimento facciale e poi prenderemo un semplice caso di studio e lo implementeremo in Python. Alla fine dell'articolo, avrai costruito il tuo primo modello di riconoscimento facciale!
Sommario
- Scopri come funziona il riconoscimento facciale
- Argomento di studio
- Implementazione Python
- Comprendere il codice Python
- Applicazioni degli algoritmi di riconoscimento facciale
Scopri come funziona il riconoscimento facciale
Per capire come funziona il riconoscimento facciale, prima diamo un'idea del concetto di vettore di feature.
Ogni algoritmo di apprendimento automatico prende un insieme di dati come input e apprende da questi dati. L'algoritmo passa attraverso i dati e identifica i modelli nei dati. Ad esempio, supponiamo di voler identificare quale faccia è presente in una certa immagine, ci sono molte cose che possiamo considerare come un modello:
- Alto / larghezza del viso.
- Altezza e larghezza potrebbero non essere affidabili, poiché l'immagine può essere modificata in una faccia più piccola. tuttavia, anche dopo il cambio scala, ciò che rimane invariato sono le relazioni: la relazione tra l'altezza del viso e la larghezza del viso non cambierà.
- Colore del viso.
- Larghezza di altre parti del viso come le labbra, naso, eccetera.
Chiaramente, c'è uno schema qui: facce diverse hanno dimensioni diverse come sopra. Facce simili hanno dimensioni simili. La parte difficile è trasformare un volto particolare in numeri: gli algoritmi di apprendimento automatico capiscono solo i numeri. Questa rappresentazione numerica di a “metodo” (o un oggetto nel training set) si chiama come vettore di caratteristica. Un vettore di feature è composto da diversi numeri in un ordine specifico.
Come semplice esempio, possiamo mapparne uno “metodo” in un vettore di caratteristiche che può comprendere diverse caratteristiche come:
- Altezza del viso (cm)
- Larghezza del viso (cm)
- Colore del viso medio (R, G, B)
- Larghezza delle labbra (cm)
- Altezza del naso (cm)
Essenzialmente, data una foto, possiamo tracciare varie caratteristiche e convertirle in un vettore di caratteristiche come:
Altezza del viso (cm) | Larghezza del viso (cm) | Colore del viso medio (RGB) | Larghezza delle labbra (cm) | Altezza del naso (cm) |
23,1 | 15,8 | (255, 224, 189) | 5.2 | 4.4 |
Quindi, la nostra immagine è ora un vettore che potrebbe essere rappresentato come (23.1, 15.8, 255, 224, 189, 5.2, 4.4). Certo, potrebbero esserci innumerevoli altre caratteristiche che potrebbero essere derivate dall'immagine (ad esempio, colore dei capelli, peli del viso, bicchieri, eccetera.). tuttavia, Per esempio, consideriamo solo questi 5 caratteristiche semplici.
Ora, una volta che abbiamo codificato ogni immagine in un vettore di feature, il problema diventa molto più semplice. Chiaramente, quando abbiamo 2 facce (immagini) che rappresentano la stessa persona, i vettori di feature derivati saranno abbastanza simili. In altre parole, il “distanza” tra i 2 i vettori di feature saranno piuttosto piccoli.
L'apprendimento automatico può aiutarci qui con 2 roba:
- Derivazione del vettore delle caratteristiche: è difficile elencare manualmente tutte le funzioni perché ce ne sono così tante. Un algoritmo di apprendimento automatico può etichettare in modo intelligente molte di queste funzionalità. Ad esempio, una caratteristica complessa potrebbe essere: rapporto tra l'altezza del naso e la larghezza della fronte. Ora sarà abbastanza difficile per un essere umano elencare tutte quelle caratteristiche di “Secondo ordine”.
- Algoritmi di corrispondenza: Una volta ottenuti i vettori delle caratteristiche, un algoritmo di apprendimento automatico deve abbinare una nuova immagine con l'insieme di vettori di caratteristiche presenti nel corpus.
Ora che abbiamo una conoscenza di base di come funziona il riconoscimento facciale, creiamo il nostro algoritmo di riconoscimento facciale utilizzando alcune delle librerie Python più conosciute.
Argomento di studio
Ci danno un sacco di facce, forse da celebrità come Mark Zuckerberg, Warren Buffett, Bill Gates, Shah Rukh Khan, eccetera. Chiama questo gruppo di facce nostro “corpus”. Ora, ci viene data l'immagine di un'altra celebrità (“nuova celebrità”). Il compito è semplice: identificare se questo “nuova celebrità” è tra quelli presenti nel “corpus”.
Queste sono alcune delle immagini del corpus:
Come potete vedere, abbiamo celebrità come Barack Obama, Bill Gates, Jeff Bezos, Mark Zuckerberg, Ray Dalio e Shah Rukh Khan.
Ora, ecco il “nuova celebrità”:
Nota: tutte le immagini sopra sono prese da google images.
Questo è ovviamente Shah Rukh Khan. tuttavia, per un computer questo è un compito impegnativo. La sfida nasce dal fatto che per noi, gli umani, è facile combinare così tante caratteristiche delle immagini per vedere quale è quale celebrità. tuttavia, per un computer, non è facile imparare a riconoscere questi volti.
C'è una libreria Python incredibilmente semplice che incapsula tutto ciò che abbiamo imparato in precedenza: creare vettori di feature dalle facce e saper distinguere le facce. Questa libreria Python si chiama like Riconoscimento facciale e in fondo, impiega dlib – un set di strumenti C ++ Moderno che contiene vari algoritmi di apprendimento automatico che aiutano a scrivere applicazioni sofisticate basate su C ++.
Riconoscimento facciale La libreria in Python può eseguire un gran numero di compiti:
- Trova tutte le facce in una data immagine
- Trova e manipola le caratteristiche del viso in un'immagine.
- Identifica i volti nelle immagini
- Riconoscimento facciale in tempo reale
Qui, parleremo del terzo caso d'uso: identificare i volti nelle immagini.
Puoi trovare il codice sorgente di Riconoscimento facciale libreria qui su Github: https://github.com/ageitgey/face_recognition.
Infatti, c'è anche un tutorial su come installare Riconoscimento facciale Biblioteca: https://github.com/ageitgey/face_recognition#installation-options. Prima dell'installazione Riconoscimento facciale, devi installare dlib così come. Puoi trovare le istruzioni per l'installazione dlib qui: https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf.
Implementazione Python
Questa sezione contiene il codice per costruire un semplice sistema di riconoscimento facciale utilizzando il Riconoscimento facciale Biblioteca. Questa è la parte di implementazione, esamineremo il codice per comprenderlo in modo più dettagliato nella prossima sezione.
# importare le librerie importare import face_recognition # fare un elenco di tutte le immagini disponibili immagini = os.listdir('immagini') # carica la tua immagine image_to_be_matched = face_recognition.load_image_file('mia_immagine.jpg') # codificato l'immagine caricata in un vettore di feature image_to_be_matched_encoded = face_recognition.face_encodings( image_to_be_matched)[0] # iterare su ogni immagine per l'immagine nelle immagini: # carica l'immagine current_image = face_recognition.load_image_file("immagini/" + Immagine) # codificare l'immagine caricata in un vettore di feature current_image_encoded = face_recognition.face_encodings(immagine_corrente)[0] # abbina la tua immagine con l'immagine e controlla se corrisponde risultato = riconoscimento_faccia.compare_facce( [image_to_be_matched_encoded], current_image_encoded) # controlla se era una corrispondenza se risultato[0] == Vero: Stampa "abbinato: " + Immagine altro: Stampa "Non abbinato: " + Immagine
La struttura delle cartelle è la seguente:
riconoscimento facciale:
- fr.py
- mia_immagine.jpg
- immagini /
- barack_obama.jpg
- bill_gates.jpg
- jeff_bezos.jpg
- mark_zuckerberg.jpg
- ray_dalio.jpg
- shah_rukh_khan.jpg
- warren_buffet.jpg
La nostra directory principale, il riconoscimento facciale contiene:
- Il nostro precedente codice di riconoscimento facciale sotto forma di fr.py.
- mia_immagine.jpg: l'immagine da riconoscere (“nuova celebrità”).
- immagini / – il “corpus”.
Quando crei la struttura delle cartelle come sopra ed esegui il codice sopra, questo è quello che ottieni come risultato:
abbinato: shah_rukh_khan.jpg Non abbinato: warren_buffet.jpg Non abbinato: barack_obama.jpg Non abbinato: ray_dalio.jpg Non abbinato: bill_gates.jpg Non abbinato: jeff_bezos.jpg Non abbinato: mark_zuckerberg.jpg
Chiaramente, il “nuova celebrità” è Shah Rukh Khan e il nostro sistema di riconoscimento facciale è in grado di rilevarlo.
Comprendere il codice Python
Ora, diamo un'occhiata al codice per capire come funziona:
# importare le librerie importare import face_recognition
Queste sono semplicemente importazioni. Useremo il built-in tu libreria per leggere tutte le immagini nel nostro corpus e che useremo Riconoscimento facciale per scrivere l'algoritmo.
# fare un elenco di tutte le immagini disponibili immagini = os.listdir('immagini')
Questo semplice codice ci aiuta a identificare il percorso di tutte le immagini nel corpus. Una volta eseguita questa riga, avremo:
immagini = ['shah_rukh_khan.jpg', 'warren_buffet.jpg', 'barack_obama.jpg', 'ray_dalio.jpg', 'bill_gates.jpg', 'jeff_bezos.jpg', 'mark_zuckerberg.jpg']
Ora, il seguente codice carica l'immagine della nuova celebrità:
# carica la tua immagine image_to_be_matched = face_recognition.load_image_file('mia_immagine.jpg')
Per garantire che gli algoritmi possano interpretare l'immagine, convertiamo l'immagine in un vettore di feature:
# codificato l'immagine caricata in un vettore di feature image_to_be_matched_encoded = face_recognition.face_encodings( image_to_be_matched)[0]
Il resto del codice ora è abbastanza semplice:
# iterare su ogni immagine per l'immagine nelle immagini: # carica l'immagine current_image = face_recognition.load_image_file("immagini/" + Immagine) # codificare l'immagine caricata in un vettore di feature current_image_encoded = face_recognition.face_encodings(immagine_corrente)[0] # abbina la tua immagine con l'immagine e controlla se corrisponde risultato = riconoscimento_faccia.compare_facce( [image_to_be_matched_encoded], current_image_encoded) # controlla se era una corrispondenza se risultato[0] == Vero: Stampa "abbinato: " + Immagine altro: Stampa "Non abbinato: " + Immagine
Eccoci qui:
- Passa su ogni immagine.
- Codifica l'immagine in un vettore di feature.
- Confrontando l'immagine caricata con l'immagine da riconoscere.
- Se è una coincidenza, lo stampiamo. Se non corrisponde, lo stampiamo anche noi.
Il risultato mostrato sopra suggerisce chiaramente che questo semplice algoritmo di riconoscimento facciale funziona incredibilmente bene.. Proviamo a sostituire La mia immagine con un'altra immagine:
Quando eseguo di nuovo l'algoritmo, vedrai il seguente risultato:
Non abbinato: shah_rukh_khan.jpg Non abbinato: warren_buffet.jpg Non abbinato: barack_obama.jpg Non abbinato: ray_dalio.jpg Non abbinato: bill_gates.jpg Non abbinato: jeff_bezos.jpg Non abbinato: mark_zuckerberg.jpg
Chiaramente, il sistema non ha identificato Jack Ma come nessuna delle celebrità di cui sopra. Questo indica che il nostro algoritmo è abbastanza bravo in entrambi:
- Identificare correttamente quelli che sono presenti nel corpus
- Segna una mancata corrispondenza per quelli non presenti nel corpus
App di riconoscimento facciale
Il riconoscimento facciale è un problema ben studiato ed è ampiamente utilizzato sia nell'industria che nel mondo accademico. Come esempio, un criminale in Cina è stato catturato perché un sistema di riconoscimento facciale in un centro commerciale ha rilevato il suo volto e ha lanciato l'allarme. Chiaramente, il riconoscimento facciale può essere utilizzato per mitigare la criminalità. Ci sono molti altri casi d'uso interessanti del riconoscimento facciale:
- Autenticazione facciale: Apple ha introdotto Face ID per l'autenticazione facciale su iPhone. Alcune delle principali banche stanno cercando di utilizzare l'autenticazione facciale per gli armadietti.
- Assistenza clienti: Alcune banche in Malesia hanno installato sistemi che utilizzano il riconoscimento facciale per rilevare i clienti preziosi della banca in modo che la banca possa fornire un servizio personalizzato. In questo modo, le banche possono generare maggiori entrate trattenendo quei clienti e rendendoli felici.
- Sottoscrizione assicurativa: Molte compagnie assicurative utilizzano il riconoscimento facciale per abbinare il volto della persona a quello fornito sulla prova del documento d'identità con foto.. così, il processo di abbonamento diventa molto più veloce.
Note finali
In sintesi, il riconoscimento facciale è un problema interessante con molti casi d'uso potenti che possono aiutare in modo significativo la società in varie dimensioni. Sebbene ci sarà sempre un rischio etico associato alla commercializzazione di tali tecniche, questo è un dibattito che metteremo da parte per un'altra volta.
Spero che questo articolo ti sia stato utile. Invia i tuoi commenti e suggerimenti nella sezione commenti qui sotto!!