Crea un modello di rilevamento del volto in un video usando Python

Contenuti

introduzione

“La visione artificiale e l'apprendimento automatico hanno davvero iniziato a decollare, ma per la maggior parte delle persone, l'intera idea di ciò che un computer vede quando guarda un'immagine è relativamente scura”. – Mike Kreiger

Il meraviglioso campo della visione artificiale ha raggiunto un livello a sé stante negli ultimi anni. Esiste un numero impressionante di applicazioni già ampiamente utilizzate in tutto il mondo., E siamo solo all'inizio!

Una delle cose che preferisco in questo campo è l'idea che la nostra comunità abbracci il concetto di open source. Anche i grandi colossi della tecnologia sono disposti a condividere con tutti nuovi progressi e innovazioni affinché le tecniche non continuino ad essere "cosa da ricchi".

Una di queste tecnologie è il rilevamento dei volti, offrendo una serie di potenziali applicazioni in casi d'uso del mondo reale (se usato correttamente ed eticamente). In questo post, Ti mostrerò come creare un algoritmo di rilevamento del volto capace utilizzando strumenti open source. Ecco una demo per emozionarti e preparare il terreno per quello che verrà:

Così sei pronto? Continua a leggere allora!

Nota: Se vuoi capire le complessità della visione artificiale, questo corso: Visione artificiale che utilizza il deep learning – è il punto di partenza perfetto.

Sommario

  • Potenziali applicazioni del rilevamento dei volti
  • Configurazione di sistema: requisiti hardware / Software
    • configurazione hardware
    • Configurazione software
  • Approfondire l'implementazione di Python
    • Tutorial semplice
    • Caso d'uso del rilevamento del volto

Applicazioni promettenti per il rilevamento dei volti

Lascia che ti mostri alcuni straordinari esempi di applicazioni in cui le tecniche di rilevamento dei volti sono comunemente utilizzate. Sono sicuro che ti sarai imbattuto in questi casi d'uso in qualche momento e non ti sei reso conto di quale tecnica veniva utilizzata dietro le quinte.

Come esempio, Facebook ha sostituito la codifica manuale delle immagini con suggerimenti di tag generati automaticamente per ogni immagine caricata sulla piattaforma.. Facebook utilizza un semplice algoritmo di rilevamento dei volti per analizzare i pixel dei volti nell'immagine e confrontarli con gli utenti interessati.. Impareremo come costruire noi stessi un modello di rilevamento del volto, ma prima di entrare nei dettagli tecnici di questo, Diamo un'occhiata ad altri casi d'uso.

Ci stiamo abituando a sbloccare i nostri telefoni con l'ultima funzione "sblocco con il viso".. Questo è un piccolo esempio di come viene utilizzata una tecnica di rilevamento del volto per proteggere i dati personali.. Lo stesso può essere messo in pratica su una scala più ampia, consentire alle fotocamere di acquisire immagini e rilevare volti.

https://www.youtube.com/watch?v=bYrRQQX2PvY

Ci sono altre app di rilevamento del volto meno riconosciute nella pubblicità, cure mediche, banca, eccetera. La maggior parte delle aziende, o anche in molte conferenze, devi portare una carta d'identità per entrare. Ma, E se potessimo trovare un modo in cui non è necessario portare con sé una carta d'identità per ottenere l'accesso?? Il rilevamento dei volti aiuta a rendere questa procedura semplice e fluida. La persona guarda semplicemente la telecamera e rileverà automaticamente se dovrebbe essere autorizzato a entrare o meno.

Un'altra interessante applicazione del rilevamento dei volti potrebbe essere il conteggio del numero di persone che partecipano a un evento (come una conferenza o un concerto). Invece di contare manualmente i partecipanti, installiamo una telecamera in grado di catturare le immagini dei partecipanti e darci il conteggio totale delle persone. Questo può aiutare ad automatizzare la procedura e risparmiare un sacco di lavoro manuale.. Abbastanza utile, no?

Puoi creare molte altre applicazioni come queste; sentiti libero di condividerli nella sezione commenti qui sotto.

In questo post, Mi concentrerò sull'applicazione pratica del rilevamento dei volti e trascurerò come funzionano effettivamente gli algoritmi che contiene. Se sei interessato a saperne di più su di loro, lee sta digiunando.

Configurazione di sistema: requisiti hardware / Software

Ora che conosci le potenziali applicazioni che puoi creare con le tecniche di rilevamento dei volti, Vediamo come possiamo metterlo in pratica utilizzando gli strumenti open source a nostra disposizione.. Questo è il vantaggio che abbiamo con la nostra comunità: la volontà di condividere e il codice open source non hanno eguali in nessun settore.

Per questo post in particolare, questo è quello che ho usato e consiglio di usare:

  • Una webcam (Logitech C920) per costruire un rilevatore di volti in tempo reale su un laptop ThinkPad Lenovo E470 (Core i5 di settima generazione). Puoi anche utilizzare la fotocamera integrata del tuo laptop, o telecamera CCTV, su qualsiasi sistema adatto per l'analisi video in tempo reale, invece della configurazione che sto usando
  • L'utilizzo di una GPU per un'elaborazione video più veloce è sempre un vantaggio
  • Lato software, abbiamo usato il sistema operativo Ubuntu 18.04 con tutto il software prerequisito installato

Esploriamo questi punti un po' più in dettaglio per assicurarci che tutto sia impostato correttamente prima di costruire il nostro modello di rilevamento del volto..

passo 1: configurazione hardware

La prima cosa da fare è controllare se la webcam è configurata correttamente. Un semplice trucco in Ubuntu: controlla se il sistema operativo ha registrato il dispositivo. Puoi seguire i passaggi seguenti:

  1. Prima di collegare la WebCam al laptop, controlla tutti i dispositivi video collegati andando al prompt dei comandi e digitando ls / sviluppo / video *. Questo stamperà i dispositivi video che sono già collegati al sistema.
  2. Connetti la WebCam ed esegui nuovamente il comando.Se la WebCam è stata collegata con successo, il comando mostrerà un nuovo dispositivo.
  3. Un'altra cosa che puoi fare è utilizzare qualsiasi software per webcam per verificare se la webcam funziona correttamente.. Puoi usare “Formaggio” in Ubuntu per questo.
    Qui possiamo vedere che la webcam è configurata correttamente. E questo è tutto per il lato hardware!!

passo 2: configurazione software

passo 2.1: installa Python

Il codice in questo post è stato creato con la versione 3.5 di Python. Anche se ci sono diverse alternative per installare Python, Consiglierei di usare Anaconda, la distribuzione Python più popolare per la scienza dei dati. Ecco un collegamento per installare Anaconda nel tuo sistema.

passo 2.2: Installa OpenCV

OpenCV (Visione artificiale open source) è una libreria destinata a creare applicazioni di visione artificiale. Dispone di numerose funzioni predefinite per le attività di elaborazione delle immagini. Per installare OpenCV, fai un'installazione pip della libreria:

pip3 installa opencv-python

passo 2.3: Installa l'API face_recognition;

In conclusione, noi useremo Riconoscimento facciale, nominata l'API di accreditamento facciale più semplice al mondo per Python. Installare:
pip install dlib
pip install face_recognition

Approfondiamo l'implementazione

Ora che hai configurato il tuo sistema, infine, è il momento di immergersi nell'implementazione effettiva. Primo, costruiremo rapidamente il nostro programma, più tardi lo scomporremo per capire cosa abbiamo fatto.

Tutorial semplice

Primo, crea un file face_detector.py e quindi copiare il codice fornito di seguito:

# importare librerie
importare cv2
importare face_recognition

# Ottieni un riferimento alla webcam 
acquisizione video = cv2.Acquisizione video("/dev/video1")

# Inizializza variabili
face_locations = []

mentre Vero:
    # Cattura un singolo fotogramma del video
    Giusto, portafoto = acquisizione video.leggere()

    # Converti l'immagine dal colore BGR (che OpenCV usa) al colore RGB (quale face_recognition usa)
    rgb_frame = portafoto[:, :, ::-1]

    # Trova tutti i volti nel fotogramma corrente del video
    face_locations = face_recognition.face_locations(rgb_frame)

    # Visualizza i risultati
    per superiore, Giusto, parte inferiore, sinistra in face_locations:
        # Disegna una scatola intorno al viso
        cv2.rettangolo(portafoto, (sinistra, superiore), (Giusto, parte inferiore), (0, 0, 255), 2)

    # Visualizza l'immagine risultante
    cv2.imshow('Video', portafoto)

    # Premi 'q' sulla tastiera per uscire!
    Se cv2.waitKey(1) & 0xFF == parole('Q'):
        rottura

# Rilascia la maniglia alla webcam
acquisizione video.pubblicazione()
cv2.distruggiTutte le Finestre()

Successivamente, esegui questo file python digitando:

python face_detector.py

Se tutto funziona bene, apparirà una nuova finestra con il rilevamento del volto in tempo reale in esecuzione.

Per riassumere, questo è ciò che ha fatto il nostro codice sopra:

  1. Primi Stati Uniti definito l'hardware in cui verrà eseguita l'analisi video
  2. Da questa, NOI catturato il video in tempo reale, fotogramma per fotogramma
  3. allora noi elaborato ogni fotogramma e estratto le posizioni di tutte le facce nell'immagine
  4. In conclusione noi ha reso questi fotogrammi in formato video, insieme alle posizioni dei volti

Semplice, Non è così? Se vuoi entrare in dettagli più granulari, Ho incluso i commenti in ogni sezione del codice. Puoi sempre tornare indietro e rivedere ciò che abbiamo fatto.

Caso d'uso del rilevamento del volto

Il divertimento non finisce qui! Un'altra cosa fantastica che possiamo fare: creare un caso d'uso completo attorno al codice sopra. E non c'è bisogno di ricominciare da zero. Possiamo apportare solo alcune piccole modifiche al codice e siamo a posto..

supponiamo, come esempio, vuoi costruire un sistema automatizzato basato su telecamera per tracciare dove si trova l'oratore in tempo reale. Secondo la tua posizione, il sistema ruota la telecamera in modo che l'altoparlante sia sempre al centro del video.

Come lo facciamo? Il primo passo è costruire un sistema che identifichi le persone nel video e si concentri sulla posizione dell'oratore..

Vediamo come possiamo metterlo in pratica. Per questo post, ho preso un video di Youtube mostrando un oratore che parla durante la conferenza DataHack Summit 2017.

Primo, importiamo le librerie indispensabili:

import cv2
import face_recognition

Successivamente, leggi il video e ottieni la durata:

input_movie = cv2. VideoCapture("sample_video.mp4")
lunghezza = int(input_movie.get(cv2. CAP_PROP_FRAME_COUNT))

Successivamente, creamos un archivo de salida con la risoluzione requerida y la velocidad de fotogramas que es equivalente al archivo de entrada.

Carica un'immagine di esempio del relatore per identificarlo nel video:

image = face_recognition.load_image_file("sample_image.jpeg")
face_encoding = face_recognition.face_encodings(Immagine)[0]

facce_conosciute = [
face_encoding,
]

Tutto questo completato, ora eseguiamo un ciclo che farà quanto segue:

  • Estrai un fotogramma dal video
  • Trova tutti i volti e identificali
  • Crea un nuovo video in modo che corrisponda al fotogramma originale con la posizione del viso dell'oratore annotato

Vediamo il codice per questo:

# Inizializza variabili
face_locations = []
face_encodings = []
face_names = []
numero_fotogramma = 0

mentre Vero:
    # Cattura un singolo fotogramma del video
    Giusto, portafoto = input_movie.leggere()
    numero_fotogramma += 1

    # Esci al termine del file video in ingresso
    Se non Giusto:
        rottura

    # Converti l'immagine dal colore BGR (che OpenCV usa) al colore RGB (quale face_recognition usa)
    rgb_frame = portafoto[:, :, ::-1]

    # Trova tutti i volti e le codifiche dei volti nel fotogramma corrente del video
    face_locations = face_recognition.face_locations(rgb_frame, modello="cnn")
    face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)

    face_names = []
    per face_encoding in face_encodings:
        # Vedi se il viso corrisponde al viso conosciuto(S)
        incontro = face_recognition.compare_faces(facce_conosciute, face_encoding, tolleranza=0.50)

        nome = Nessuno
        Se incontro[0]:
            nome = "Phani Srikant"

        face_names.aggiungere(nome)

    # Etichetta i risultati
    per (superiore, Giusto, parte inferiore, sinistra), nome in cerniera lampo(face_locations, face_names):
        Se non nome:
            Continua

        # Disegna una scatola intorno al viso
        cv2.rettangolo(portafoto, (sinistra, superiore), (Giusto, parte inferiore), (0, 0, 255), 2)

        # Disegna un'etichetta con un nome sotto la faccia
        cv2.rettangolo(portafoto, (sinistra, parte inferiore - 25), (Giusto, parte inferiore), (0, 0, 255), cv2.RIEMPITO)
        font = cv2.FONT_HERSHEY_DUPLEX
        cv2.putText(portafoto, nome, (sinistra + 6, parte inferiore - 6), font, 0.5, (255, 255, 255), 1)

    # Scrivi l'immagine risultante nel file video di output
    Stampa("Cornice di scrittura {} / {}".formato(numero_fotogramma, lunghezza))
    output_movie.Scrivi(portafoto)

# Tutto fatto!
input_movie.pubblicazione()
cv2.distruggiTutte le Finestre()

Il codice ti darebbe un output come questo:

Che cosa grandiosa è davvero il rilevamento dei volti. ?

Progetti

Ora è il momento di fare il grande passo e giocare con altri set di dati reali. Quindi, Sei pronto ad accettare la sfida? Acelere su viaje de apprendimento profondo con los siguientes problemas de práctica:

conclusione

Congratulazioni! Ora sai come creare un sistema di rilevamento dei volti per vari potenziali casi d'uso.. L'apprendimento profondo è un campo affascinante e sono molto entusiasta di vedere dove stiamo andando ora..

In questo post, Abbiamo imparato come sfruttare gli strumenti open source per creare sistemi di rilevamento dei volti in tempo reale utili nel mondo reale. Ti incoraggio a creare molte di queste applicazioni e a provarlo da solo. crema, c'è molto da imparare ed è molto divertente!

Come sempre, non esitate a contattarci se avete domande / suggerimento nella sezione commenti qui sotto.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.