Università degli studi di Roma Tor Vergata Test riconoscimento automatico espressioni del volto Preparato per: Giovannella Carlo, Professore Preparato da: Tobia Giani e Alessandro Borelli, Studenti 10 Luglio 2011 Numero proposta: 123-4567 Società Via della Ricerca Scientifica 00049 Roma Italia gianitobia@gmail.com
Indice Premessa pag. 2 Progettazione test pag. 2 1. Ricerca in letteratura 2. Analisi del materiale 3. Creazione algoritmo 4. Implementazione Test e problematiche pag. 10 Risultati pag. 10 Test riconoscimento automatico espressioni del volto 1
Premessa Il programma che è stato fatto completa un primo step di ciò che si doveva realizzare. Il compito iniziale, consisteva nell utilizzare il programma creato dagli studenti del precedente anno ed automatizzarlo partendo dallo stesso. Utilizzando infatti le statistiche da loro fatte, ed automatizzando la cattura dei punti d interesse per la segmentazione del volto, si sarebbe dovuto avere lo stesso risultato da loro ottenuto manualmente, in modo del tutto automatico. Per far questo, si richiedeva di sviluppare un software che riconoscesse, tramite algoritmo, gli stessi punti fissati manualmente dall utente nel vecchio programma. Questo per poter utilizzare le statistiche da noi possedute e non rendere vano il lavoro precedentemente fatto. Quindi ci si è limitati ad individuare la conformazione del volto ricercando gli stessi punti fissati dagli studenti dall anno precedente. Progettazione test 1. Ricerca in letteratura Inizialmente si disponeva del materiale realizzato dal gruppo dell anno precedente: un software e una relazione che ne analizzava i risultati. Il materiale a disposizione non era sufficiente per il nostro test, quindi si è cominciata la ricerca in letteratura. Visti gli obiettivi prefissati, si sono cercati lavori analoghi già sviluppati o algoritmi che si sarebbero potuti utilizzare. La maggior parte dei risultati trovati erano o software a pagamento o tesi universitarie molto corpose e di difficile comprensione. Ad es. i risultati di un software a pagamento trovato sono questi: Come si può notare il riconoscimento dei punti del volto è molto efficiente, e soprattutto si avvicinava ai punti trovati dagli studenti dello scorso anno, ma non essendo pubblico l algoritmo, si è dovuto scartare questa opzione e anche gli altri software. Test riconoscimento automatico espressioni del volto 2
Inoltre si è trovata una libreria di funzioni in C++ chiamata FaceApi anche essa molto prestante ma con algoritmo sconosciuto. Volendo realizzare un algoritmo proprio si è cercato qualche sistema già utilizzato da altri come per esempio: - Snakes (contorni attivi): consiste nell inizializzare una curva ( snake ) e nel deformarla sotto l azione di forze che minimizzano una particolare funzione obiettivo che rappresenta l energia dello snake. La principale applicazione sfrutta questa convergenza verso i minimi locali per far tendere lo snake ai contorni dell immagine, da qui la denominazione di contorni attivi. Test riconoscimento automatico espressioni del volto 3
- Template matching e modello Candide : questo algoritmo si basa sulla creazione di un modello del volto a priori, semplice e strutturato con linee e forme, da associare ai punti trovati tramite un sistema sviluppato con FaceApi. Grazie al modello del volto Candide si aggancia letteralmente il template ai punti del volto trovati e successivamente lo si collega ad un modello di volto 3D. - Segmentazione dell immagine: è il processo di partizionare un'immagine in regioni significative. Per fare ciò si possono utilizzare vari metodi: 1. Metodi basati sul Pixel (Pixel-based) si utilizzano i valori di luminosità dei singoli pixel. 2. Metodi basati sulla Regione (Region-based) si analizzano i valori di luminosità di aree dell'immagine. 3. Metodi basati sul Contorno (Edge-based) si estraggono i contorni per delimitare gli oggetti. 4. Metodi basati su un modello (Model-based) si parte dalla conoscenza a priori del modello dell'oggetto. - Spazio di Colore YCbCr: convertire un immagine in uno spazio di colore che permetta la separazione tra crominanza e luminanza, quindi agire sul colore indipendentemente dalla luminosità dell immagine. - Altre Tecniche: filtro di Gabor e Wavelet, algoritmo ICA, algoritmo SIFT. Test riconoscimento automatico espressioni del volto 4
2. Analisi e Creazione dell algoritmo Appurato che bisognava inventare un proprio algoritmo efficiente e semplice da utilizzare, si sono analizzate le varie tecniche trovate in letteratura ed estratto le migliori. Una prima versione dell algoritmo prevedeva di utilizzare principalmente il template matching e la rete Candide, di seguito l agoritmo: ALG 1. - Acquisizione img da webcam o da file - Analizzarla ed automaticamente adattare sopra ai particolari del volto(sopracciglia, occhi, naso, bocca), dei vettori o una rete 'Candide' - Analizzare la variazione della rete 'Candide' adattata con una rete standard -Dare risposta del tipo di emozione associata alla variazione della rete assegnata al volto ALG 2. - Acquisizione img da webcam o da file - Conversione RGB => YCbCr - Calcolo EyeMap (EyeMapC AND EyeMapL) - Calcolo MouthMap - Creazione Bounding Box intorno blob rilevati - Statistiche in base a distanze dai bounding box - Dare risposta del tipo di emozione associata alla variazione della rete assegnata al volto EyeMap --> Test riconoscimento automatico espressioni del volto 5
MouthMap --> Alla fine si è deciso quella della conversione in YCbCr perché permetteva una maggiore facilità di implementazione e velocità di esecuzione. 3. Implementazione Una prima implementazione è stata realizzata in Processing, in cui si cercava di calcolare la conversione in YCbCr e poi le EyeMap e MouthMap. Test riconoscimento automatico espressioni del volto 6
Siccome l EyeMap non dava i risultati voluti si è dovuto cambiare procedimento e cercare degli spazi di colore personalizzati. Per far ciò è stato realizzato un programma in Java che permettesse, attraverso degli slider, di far variare le costanti della conversione in YCbCr, e attraverso dei combobox, di scegliere il tipo di immagine da visualizzare ( Y, CB, CR, CB2, CR2, EyeMapC, EyeMapL ). A questo punto con questo programma si è potuto studiare, in base alla variazione degli slider, il cambiamento dei vari blob di colore (nel nostro caso ci si è concentrati inizialmente sugli occhi), trovando quindi degli spazi di colore adatti per fare AND ed operazioni morfologiche tra immagini. Durante questa operazione si è pensato ad un nuovo algoritmo per arrivare all immagine con i blob degli occhi più marcati. ALG 3. - Sezione dell img altezza occhi - Creazione di EyeMapC con valori fissati - Dilatazione EyeMapC - Erosione CB2 - EyeMapC / CB2 Img ottenuta con ALG 3 Test riconoscimento automatico espressioni del volto 7
Successivamente si è passati allo studio dei blob. Per prima cosa si è cercato di trovare un singolo blob di colore in una immagine e tracciarne il bounding box, poi si è passato al multi blob detection. L algoritmo seguito non è facile da comprendere e spiegare, si allegano alcune immagini che descrivono la sua logica. (A B C D X) Matrice di convoluzione fatta passare sopra l immagine di partenza. Ad ogni blob viene associato un diverso byte ed un diverso colore, i blob con byte diversi ma vicini, vengono accorpati insieme in un solo blob. Prova su multiblob Test riconoscimento automatico espressioni del volto 8
Si è pensato poi, di associare ad ogni blob trovato, una distanza dal centro dell immagine, una area, una massa (n. pixel del blob), un rapporto tra width ed height, un bounding box (xmin, ymin, xmax, ymax). Blob trovati su un volto Quindi gli occhi sono stati classificati come blob aventi: - distanza dal centro minore - area < 1000 - rapporto tra width - height compreso tra 1.3 e 2.5 Inoltre si è modificata la dimensione della matrice del filtro morfologico, portandola da 11x11 ad una dimensione di 9x17, rendendola rettangolare; si sono uniti i blob di piccola dimensione e si è reso più semplice il detection. Dopo aver filtrato i blob il risultato è il seguente: Test riconoscimento automatico espressioni del volto 9
Problematiche Le problematiche principali sono state le mancate competenze per il compito richiesto. Prima di poter creare un algoritmo ed ancor prima di poter giudicare le tesi trovate in letteratura, si è dovuto studiare argomenti complessi come: segmentazione di immagini, spazi di colore YCbCr, filtri morfologici, operazioni logiche tra immagini, filtri e matrici di convoluzione. Per la conversione da RGB in YCbCr, avendo trovato pareri diversi e delle volte discordanti riguardo i valori delle costanti di conversione, si sono dovuti provati quali tra quelli trovati fossero i migliori. Questa ricerca ha prodotto dei problemi, poichè i valori ottenuti si trovano fuori dal range 0-255 dell RGB, risolvibili effettuando uno shift ed una normalizzazione su tutte le componenti dell immagine per farle rientrare nel range. In questo modo si è potuto ottenere un range di valori molto più ampio e si sono evitate eccezioni runtime del programma. Problemi nell implementazioni in processing, sia per la lentezza di calcolo e sia per la mancanza di buone librerie per le componenti grafiche. Per questo poi si è scelto di passare a Java, dove si è potuto sviluppare il tutto graficamente grazie ai componenti Swing. Problema attualmente non risolto nell implementazione dell ultimo programma per la gestione dei blob: all interno del suddetto infatti, viene fatta una conversione dell immagine in byte per poter lavorare meglio con il riconoscimento dei blob e poi riconvertita in immagine rgb. Se l immagine in ingresso è una rgb e non una in scala di grigi, allora si hanno problemi con il cast tra DataBufferByte a DataBufferInt. Risultati I risultati ottenuti sono stati in parte già spiegati in precedenza nella relazione. Allo stato attuale si possiedono 4 diverse versioni del programma. Le prime due scritte in processing possono convertire molto bene le immagini nello spazio di colore YCbCr e le immagini con l EyeMapC e l EyeMapL ed un immagine per l individuazione della pelle. La terza versione del programma scritta in Java, permette di fare tutto ciò che si faceva nelle precedenti versioni, ma con un interfaccia grafica migliore e rendendo l uso dell utente indipendente dal codice del programma. Inoltre si hanno dei valori più corretti e non tagliati nel range come quelli ottenuti in processing. L ultima versione scritta in java permette di rilevare i blob ed i rispettivi bounding box di tutta l immagine in entrata e selezionare i due più simili ad un occhio. I risultati sono molto prestanti sia in velocità di calcolo, forse portabile in real time, e in precisione nel riconoscimento. Test riconoscimento automatico espressioni del volto 10
I risultati sono più che soddisfacenti. DI seguito immagini di prova: Test riconoscimento automatico espressioni del volto 11
Test riconoscimento automatico espressioni del volto 12