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:
- 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.
- Connetti la WebCam ed esegui nuovamente il comando.Se la WebCam è stata collegata con successo, il comando mostrerà un nuovo dispositivo.
- 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;
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:
- Primi Stati Uniti definito l'hardware in cui verrà eseguita l'analisi video
- Da questa, NOI catturato il video in tempo reale, fotogramma per fotogramma
- allora noi elaborato ogni fotogramma e estratto le posizioni di tutte le facce nell'immagine
- 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 risoluzioneIl "risoluzione" si riferisce alla capacità di prendere decisioni ferme e raggiungere gli obiettivi prefissati. In contesti personali e professionali, Implica la definizione di obiettivi chiari e lo sviluppo di un piano d'azione per raggiungerli. La risoluzione è fondamentale per la crescita personale e il successo in vari ambiti della vita, In quanto ti permette di superare gli ostacoli e mantenere la concentrazione su ciò che conta davvero.... 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 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... 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.