Riconoscimento facciale | App di riconoscimento facciale

Contenuti

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??

faccia-4642753

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,115,8(255, 224, 189)5.24.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:

  1. 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”.
  2. 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:

faccia1-7270292

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à”:

faccia2-3172275

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:

faccia3-4201312

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!!

Circa l'autore

safe-goel-5332826Obiettivo sicuro, co-fondatore e CEO di AllinCall Research & Soluzioni
Aman Goel è un alunno di IIT-Bombay ed è un imprenditore, programmatore e fanatico delle indagini sugli incidenti aerei. Scrivi blog di programmazione per Hackr.io, una comunità di programmazione per trovare i migliori tutorial di programmazione. È co-fondatore di AllinCall Research & Soluzioni e ama aiutare le persone a risolvere i problemi di IIT JEE.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.