estrazione e riconoscimento di volti da filmati

annuncio pubblicitario
UNIVERSITÀ POLITECNICA DELLE MARCHE
FACOLTÀ DI INGEGNERIA
Corso di Laurea Specialistica in Ingegneria Informatica
ESTRAZIONE E RICONOSCIMENTO
DI VOLTI DA FILMATI
Candidato:
Gianluca Dolcini
Relatore:
Prof. Aldo Franco Dragoni
Correlatore:
Ing. Andrea Claudi
Anno Accademico 2010-2011
Indice generale
Indice Generale............................................................................................................................I
Indice delle Illustrazioni.............................................................................................................II
Indice delle Tabelle....................................................................................................................V
Introduzione................................................................................................................................1
Capitolo1 -Stato dell'arte.............................................................................................................3
1.1 Localizzazione e identificazione di volti..........................................................................3
1.2 Face Detection..................................................................................................................7
1.2.1 Skin-segmentation....................................................................................................7
1.2.2 Algoritmo Viola-Jones............................................................................................16
1.3 Face Recognition............................................................................................................25
1.3.1 Principal Component Analysis...............................................................................26
1.3.2 Elastic Bunch Graph Matching..............................................................................30
1.3.3 Scale Invariant Feature Trasform...........................................................................33
1.3.4 Approccio Ibrido.....................................................................................................39
1.4 Algoritmi di Classificazione...........................................................................................41
1.4.1 Algoritmo di classificazione AdaBoost..................................................................43
1.4.2 Algoritmo di classificazione SVM..........................................................................46
Capitolo2 -Sviluppo del Software.............................................................................................52
2.1 Ambiente Sviluppo.........................................................................................................52
2.2 Realizzazione Sistema....................................................................................................53
2.2.1 Procedura di face detection.....................................................................................54
2.2.2 Procedura di Face Recognition...............................................................................64
Capitolo3 -Testing.....................................................................................................................70
3.1 Sistema e risorse ............................................................................................................70
3.2 Valutazione Face Detection su Video.............................................................................71
3.3 Valutazione Face Recognition su Database....................................................................75
3.4 Valutazione Face Recognition su video..........................................................................81
3.5 Prestazioni del sistema nel complesso............................................................................84
Conclusione...............................................................................................................................88
Bibliografia...............................................................................................................................90
I
Indice delle illustrazioni
Fig. 1.1: Esempio di skin-map....................................................................................................8
Fig. 1.2: Esempio di fusione di più skin-map[2].......................................................................10
Fig. 1.3: Esempio di skin-map ottenute utilizzando 3 differenti modelli si skin color.............11
Fig. 1.4: Esempio di istogrammi di Cr e Cb ottenuti da tre volti con pigmentazione della pelle
differente...................................................................................................................................12
Fig. 1.5: Esempio di sottospazio delimitato da 4 rette (in nero) oppure da 5 rette (in rosso)...13
Fig. 1.6: Esempio di due funzioni gaussiane e della GMM ottenuta come somma pesata delle
due.............................................................................................................................................15
Fig. 1.7: Skin map ottenuta assegnando ai pixel il valore di probabilità condizionata............15
Fig. 1.8: Esempio di Summed Area Tablet e della versione ruotata.........................................17
Fig. 1.9: Immagine che esemplifica come avviene il calcolo della sotto area evidenziata.......18
Fig. 1.10: Esempio di rettangolo verticale e del corrispondente rettangolo ruotato di 45 gradi
...................................................................................................................................................19
Fig. 1.11: Esempio delle tre haar fondamentali........................................................................19
Fig. 1.12: Immagine dei coefficienti ottenuti applicando le wavelet sull'immagine in alto a
sinistra.......................................................................................................................................20
Fig. 1.13: Esempio di haar like feature verticali e ruotate. ......................................................21
Fig. 1.14: Esempio della cascata di classificatori. Ogni nodo uno stage della cascata.............24
Fig. 1.15: Haar feature usate per l'apprendimento dei primi 3 stage della cascata di
classificatori..............................................................................................................................24
Fig. 1.16: Esempio di come avviene la riduzione di dimensione dello spazio tramite l'utilizzo
della tecnica di analisi delle componenti principali..................................................................27
Fig. 1.17: Esempio di immagini di volti che compongono un database (a) e insieme delle
eigenfaces ricavate dal database (b)..........................................................................................28
Fig. 1.18: Esempio di adattamento del grafo su volti in pose differenti...................................30
Fig. 1.19: Esempio di FBG che fornisce una rappresentazione generale di un volto. Gli stack
di dischi rappresentano i jet.......................................................................................................31
Fig. 1.20: Rappresentazione grafica del calcolo della differenza gaussiana.............................34
Fig. 1.21: Punti che vengono utilizzati per determinare massimo e minimo della differenza
Gaussiana. Il pixel analizzato è quello identificato con la X, gli altri evidenziati sono quelli
presi in considerazione per il calcolo........................................................................................35
Fig. 1.22: Immagini rappresentative del processo di estrazione dei keypoint. La figura (a)
II
rappresenta l'immagine originale, la (b) rappresenta i keypoint estratti nella prima fase e la (c)
rappresenta i keypoint che sono stati selezionati perché più stabili..........................................35
Fig. 1.23: Esempio del posizionamento e orientamento di due differenti keypoint.................37
Fig. 1.24: Istogramma che rappresenta il numero di voti ricevuti dai diversi soggetti del
database.....................................................................................................................................38
Fig. 1.25: Struttura grafica del funzionamento dell'algoritmo di face recognition che prevede
fusione di feature locali e globali..............................................................................................39
Fig. 1.26: Dataset di apprendimento D.....................................................................................43
Fig. 1.27: Dataset ottenuti da D, rispettivamente D1, D2 e D3................................................44
Fig. 1.28: Classificatore finale..................................................................................................44
Fig. 1.29: Andamento dell'errore all'aumentare delle iterazioni...............................................46
Fig. 1.30: Due differenti iperpiani di separazione nel caso di dati linearmente separabili.......48
Fig. 1.31: Iperpiano di separazione nel caso di dati linearmente non separabili......................49
Fig. 1.32: Caso di dati non linearmente separabili che richiedono una funzione di mapping.. 50
Fig. 2.1: Immagine che descrive come funziona il processo di erosione..................................56
Fig. 2.2: (a) Skin-map ottenuta dalla procedura di classificazione dei pixel, (b) skin-map
ottenuta dopo il processo di erosione con kernel 3x3...............................................................57
Fig. 2.3: Immagine di un frame dove in rosso sono riquadrate le aree identificate con la
procedura di skin-segmentation. Le aree in blu sono le sotto aree di ricerca per occhio sinistro
e bocca. I riquadri verdi indicano gli elementi individuati con algoritmo Viola-Jones............58
Fig. 2.4: Metodologia di Shiqi Yu [27] per l'estrazione delle aree oculari per apprendimento.59
Fig. 2.5: Schema di ricerca delle componenti fondamentali del volto. In verde le uscite
positive, in rosso le situazioni che generano un rigetto della sotto area. .................................62
Fig. 2.6: Dieci immagini raffiguranti il mio volto inserite nel database...................................65
Fig. 2.7: Esempio di aree limitrofe ad occhi e bocca che hanno un maggiore peso per la
decisione....................................................................................................................................67
Fig. 2.8: Sotto aree contenenti occhi e bocca ricavate dalle immagini raffiguranti il mio volto
inserite nel database..................................................................................................................68
Fig. 3.1: Confronto tra fotogrammi acquisiti con webcam differenti. (a) frame acquisito con
webcam Hp, (b) frame acquisito con webcam Toshiba............................................................70
Fig. 3.2: Fotogramma estratto dal video 4 rappresentante l'area di minori dimensioni che
contiene un volto 50x52 pixel...................................................................................................72
Fig. 3.3: Parte di frame estratti dal video 4 che raffigurano diverse posizioni del volto.......73
Fig. 3.4: Fotogrammi tratti dai video 2, 3 e 4. Si noti come varia la skin-map al variare della
III
sistema di acquisizione..............................................................................................................74
Fig. 3.5: Grafico riferito alla percentuale di riconoscimenti corretti su tutti i volti del
database.....................................................................................................................................77
Fig. 3.6: Grafico riferito alla percentuale di riconoscimenti corretti su tutto il database tranne
i volti di apprendimento............................................................................................................77
Fig. 3.7: Grafico riferito alla percentuale di classificazioni unknown su tutti i volti del
database.....................................................................................................................................78
Fig. 3.8: Grafico riferito alla percentuale di classificazioni unknown su tutti i volti del
database tranne quelli usati per l'apprendimento......................................................................78
Fig. 3.9: Grafico riferito alla percentuale di classificazioni errate su tutto il database.............79
Fig. 3.10: Grafico riferito alla percentuale di classificazioni errate su tutto il database tranne i
volti di apprendimento..............................................................................................................80
Fig. 3.11: Percentuali di identificazioni ottenute al variare dei livelli di soglia e al punteggio
da attribuire ai keypoint localizzati nei pressi degli occhi e della bocca..................................82
Fig. 3.12: Percentuale di volti identificati come sconosciuti al variare della soglia e del peso
dei keypoint localizzati vicino a occhi e bocca.........................................................................83
Fig. 3.13: Percentuale di volti identificati come sconosciuti o classificati in maniera errata al
variare della soglia e del peso dei keypoint localizzati vicino a occhi e bocca........................83
Fig. 3.14: Test eseguiti per valutare le prestazioni del sistema. ...............................................85
IV
Indice delle tabelle
Tabella 1.1: Calcolo del numero delle feature estratte da un'immagine di dimensioni 24x24
pixel...........................................................................................................................................22
Tabella 1.2: Percentuali di corretta identificazione al variare del numero di immagini usate per
l'apprendimento.........................................................................................................................37
Tabella 1.3: Tabella che riporta il tasso medio di successo riferito all'applicazione di diverse
tecniche su ORL database.........................................................................................................41
Tabella 2.1: Cardinalità degli insiemi di colori che appartengono alla classe pelle in base alle
soglie riferite a due differenti spazi di colore............................................................................55
Tabella 3.1: Sono riportati il numero di volte che è stato estratto un volto dai diversi video e la
percentuale in riferimento al numero totale di frame del video................................................75
Tabella 3.2: Tabella riassuntiva che contiene le percentuali di corretta identificazione con
valore di soglia fissato a 0,14....................................................................................................80
Tabella 3.3: Test eseguiti utilizzando il meccanismo di riduzione del numero di riquadri da
analizzare. Con parametro di soglia impostato a 0,0 e peso dei keyipoint, localizzati nelle aree
vicino agli occhi e alla bocca, pari a 2. ....................................................................................86
V
Introduzione
Introduzione
Il mio lavoro si incentra sullo sviluppo di un software in grado di estrarre ed identificare volti
umani all'interno di un flusso video. I flussi video possono essere acquisiti direttamente da
una webcam oppure da file precedentemente salvati.
Per la creazione del software è necessario prendere in considerazione due differenti aspetti. Il
primo è quello che rintraccia ed estrae un'area contenente un volto all'interno di un video,
prende il nome di face detection. Il secondo è quello che identifica l'appartenenza del volto
confrontandolo con i soggetti presenti in un database, prende il nome di face recognition.
Per poter scegliere l'approccio migliore è stato prima necessario approfondire entrambi gli
aspetti, ricercando quelle metodologie che meglio si combinavano per consentire una corretta
realizzazione del software.
Le tecniche scelte per la fase di face detection sono:
•
la Skin-Segmentation: utilizzata per estrarre da un frame tutte le sotto aree che
contengono dei pixel classificabili come colore della pelle. Il suo ruolo è dunque
quello di limitare il numero di aree all'interno del frame dove ricercare la presenza del
volto;
•
la procedura Viola-Jones: fa uso di un algoritmo di classificazione di tipo AdaBoost
abbinato ad una tecnica di estrazione delle feature chiamata Haar. L'algoritmo,
pensato inizialmente come tecnica di ricerca dei volti, è stato esteso anche per la
localizzazione di componenti come occhi e bocca. Viene utilizzato per ricercare la
bocca e gli occhi nelle sotto aree ottenute dalla skin-segmentation.
La tecnica di skin-segmentation è stata presa in considerazione poiché è molto semplice da
realizzare ed al contempo estremamente efficace nel ridurre le aree dove effettuare successive
elaborazioni.
La procedura Viola-Jones, invece, è stata scelta poiché è molto affermata ed è in grado di
garantire la localizzazione dei componenti del volto con tempistiche real-time e con buona
efficacia.
Per quanto riguarda invece la fase di face recognition si è scelto di utilizzare queste tecniche:
•
Scale Invariant Feature Transform (SIFT): per l'estrazione delle feature
caratteristiche delle immagini raffiguranti il volto;
1
Introduzione
•
Support Vector Machine (SVM): algoritmo di machine learning in grado di definire i
confini tra i diversi soggetti che compongono il database a partire da un set di
campioni di apprendimento.
La scelta delle Scale Invariant Feature Transform è stata fatta poiché esse garantiscono una
rappresentazione dei punti caratteristi di un'immagine, invarianti a scala e rotazione. Dunque,
in un contesto in cui il volto può apparire in posizione e pose differenti, questa tecnica
dovrebbe garantire una maggiore tolleranza. Inoltre, poiché queste metodologie danno una
rappresentazione locale dell'immagine, sono completamente svincolate dalla morfologia del
volto consentendo di estrarre feature confrontabili anche in presenza di parziali occlusioni.
La scelta del Support Vector Machine come algoritmo di apprendimento supervisionato è
motivata dalla sua capacità di operare in multiclasse, cioè distinguere tra un numero finito N
di soggetti. Nel caso specifico ciascuna classe è rappresentata da un individuo del database.
Altri algoritmi non potendo operare in contesti multiclasse sono stati scartati anche se
avrebbero potuto garantire migliori velocità di risposta.
La tesi si compone di tre capitoli:
•
Stato dell'Arte.
Verranno presentate le più importanti tecniche di estrazione ed identificazione del
volto, separando la trattazione dell'una e dell'altra. Si presterà particolare attenzione
alle diverse tecniche per il face recognition poiché questo aspetto è ancora dibattuto.
Inoltre si farà una breve descrizione di due algoritmi di machine learning.
•
Sviluppo del Software.
Verrà presentato il funzionamento del software di estrazione e identificazione,
descrivendo separatamente la parte di face detection e quella di face recognition.
•
Test.
Questo capitolo sarà dedicato alla verifica delle prestazioni del sistema realizzato,
concentrando l'attenzione sulla capacità di estrazione ed identificazione. Si
verificheranno quali condizioni generano il maggior numero di errori di classificazione
e come porvi rimedio. Inoltre si cercherà di analizzare le prestazioni in termini di
tempi di computazione.
2
Stato dell'arte
Capitolo1 - Stato dell'arte
In questo capitolo saranno presentate separatamente tecniche di localizzazione e tecniche di
riconoscimento di volti. Inoltre alla fine del capitolo verranno presentati due algoritmi di
classificazioni menzionati nei paragrafi precedenti.
1.1 Localizzazione e identificazione di volti.
La localizzazione e l'identificazione di volti attraverso l'analisi di immagini, e più in generale
attraverso l'analisi dei frame dei flussi video, è molto interessante nell'ambito informatico allo
scopo di produrre applicazioni in grado di automatizzare processi molto onerosi.
I differenti ambiti a cui si possono rivolgere tali applicazioni sono:
•
la sicurezza: video sorveglianza, monitoraggio di accessi e identificazione per
accesso. Il monitoraggio di accesi potrebbe ad esempio essere usato per verificare se
un individuo non autorizzato è presente in una determinata area. Se ciò dovesse
accadere l'operatore si metterà in allerta e potrà agire in maniera opportuna;
•
i media: catalogazione automatica di risorse multimediali. Un software per
identificare i volti sarebbe in grado di rintracciare la presenza di individui specifici
all'interno di un video e annotare in tempo reale quando ciò accade. In tal modo si
faciliterebbe la catalogazione del contenuto per una successiva ricerca.
Le applicazioni sono svariate e hanno lo scopo di diminuire o addirittura eliminare il carico di
lavoro di un individuo.
Risolvere tale problema richiede l'attuazione di due differenti operazioni:
•
localizzazione di un volto all'interno dell'immagine (face detection);
•
identificazione del volto verificando se è presente o meno all'interno del database
(face recognition).
Queste due classi di algoritmi possono presentare similarità ma sono fondamentalmente
differenti. Sicuramente una caratteristica comune che le coinvolge entrambe sono le
problematiche riguardanti l'acquisizione dell'immagine.
Anche se tale problema dovrebbe influenzare principalmente la fase di face detection, poiché
3
Stato dell'arte
essa viene svolta a monte della fase di face recognition, in realtà anche se siamo in grado di
riconoscere la presenza di un volto non si può essere certi che questo possa essere identificato
con successo.
Possiamo distinguere tre tipologie di problematiche che si possono riscontrare:
•
le condizioni ambientali in cui viene acquisita la scena. Se l'acquisizione avviene
sempre con lo stesso background e la stessa illuminazione è possibile eliminare
parzialmente tale interferenza;
•
la morfologia e la posa del volto. Il volto può essere in posizioni non ottimali per
l'acquisizione oppure potrebbe essere parzialmente coperto;
•
le caratteristiche fisiche dell'hardware di acquisizione della scena. Ovvero le
caratteristiche del sensore e delle lenti, la posizione del sistema di acquisizione rispetto
alla scena.
Analizziamo più specificatamente questi tre gruppi di problematiche, vediamo quali sono i
principali aspetti che possono portare a malfunzionamenti di un sistema di localizzazione e
identificazione.
Partiamo dall'analisi delle condizioni ambientali.
Il problema maggiore che si manifesta è la variazione dell'illuminazione[1][2] poiché
influisce negativamente sulla possibilità di comparare immagini ottenute dalla medesima
scena e che hanno luminosità differente. Non è sufficiente che il sistema conosca solamente
come appare il volto di un individuo in condizione di luminosità ideale, ne deve apprendere i
tratti caratteristici anche in condizioni differenti.
La morfologia e la posa del volto sono legati a da due aspetti fondamentali: la posizione del
sistema di acquisizione e l'espressione dell'individuo.
Possiamo dunque distinguere i seguenti fattori:
•
la posa [1]: il volto può essere orientato in diversi modi. La migliore condizione di
analisi è con volto perfettamente frontale;
•
la presenza di componenti strutturali [1]: la presenza o l'assenza di elementi come
barba, baffi o occhiali cambia l'aspetto del volto acquisito;
•
le espressioni facciali [1]: il volto ha un differente aspetto a seconda dell'espressione
assunta dal soggetto;
•
le occlusioni [1]: il volto può essere parzialmente coperto da altri elementi presenti
nell'ambiente. Anche gli occhiali possono essere considerati come occlusione, seppur
4
Stato dell'arte
vengono trattati come componenti strutturali;
•
la rotazione dell'immagine [1]: il volto appare differente in base alla diversa
rotazione del soggetto rispetto agli assi del sistema di acquisizione. Mentre la posa
dipende dal soggetto che viene inquadrato, la rotazione dell'immagine dipende dal
montaggio del sistema che potrebbe non essere ottimale.
Il terzo aspetto che dobbiamo prendere in considerazione è relativo all'hardware che verrà
utilizzato. La scelta della periferica di acquisizione è fondamentale, ma per determinate
applicazioni è molto importante anche il sistema hardware che compirà le operazioni di
analisi. Le caratteristiche del sensore e delle lenti[1] del sistema di acquisizione influiscono
sulla qualità dell'immagine che verrà processata. Il sistema hardware che compirà le
operazioni di elaborazione dell'immagine determinerà la prontezza della risposta del software.
Tutti i fattori fin qui descritti, se non controllati, influenzano negativamente le prestazioni di
un sistema di localizzazione e identificazione. Infatti quando non è possibile controllare
l'ambiente in cui si cercherà di identificare i soggetti, tutti i fattori esaminati in precedenza
determineranno un notevole aumento della complessità degli algoritmi.
Differente è la situazione quando si vuole realizzare un sistema dove il volto è utilizzato come
meccanismo per l'autorizzazione di accesso.
Tutti i fattori che possono determinare variabilità vengono limitati ponendosi in un ambiente
ottimale. Inoltre il soggetto che intende accedere si posizionerà in maniera tale da aumentare
la possibilità di identificazione.
Concentrandoci sulla componente del face detection possiamo distinguere quattro differenti
tipologie di algoritmi [1]:
•
Knowledge-based methods: si basa sulla definizione di regole per stabilire quali aree
dell'immagine rappresentino un volto. Le regole vengono utilizzate per codificare il
concetto di volto;
•
Feature invariant approaches: estrazione di feature che caratterizzano il volto umano.
Esse sono tali da non variare al mutare di condizioni come la luminosità o la posa. Di
queste fa parte la tecnica basata sullo skin-color;
•
Template matching methods: vengono definiti dei template pattern di feature che
descrivono il prototipo di un volto, vengono utilizzati per scandagliare un'immagine
alla ricerca di un'area che presenti dei pattern di feature similari;
•
Apparence based methods: i pattern che descrivono il prototipo di un volto vengono
5
Stato dell'arte
ricavati da un set di immagini di apprendimento realizzato in base alle finalità che si
cerca di ottenere. Ad esempio si porrà come condizione la ricerca di volti di profilo se
si intende rilevarli solo con questa caratteristica. Il metodo più importante
appartenente a questa categoria è l'algoritmo proposto da Viola-Jones [3].
Prendendo in considerazione il face recognition, esistono svariati tipi di approcci. In questa
procedura un ruolo importantissimo viene svolto dal meccanismo utilizzato per l'estrazione
delle feature che caratterizzano il volto umano. Migliore è il sistema di estrazione delle
feature più facile sarà per l'algoritmo apprendere i confini che dividono un volto da un altro.
Di conseguenza sarà in grado di generalizzare tali informazioni allo scopo di predire in
maniera corretta la classe di appartenenza di un volto rilevato.
Molte sono le tecniche che hanno il compito di estrarre dalle immagini di volti le feature
caratteristiche. Nello specifico ne prendiamo in considerazione due: Eigenfaces e Fisherfaces
[11].
La metodologia Eigenfaces è basata sulla proiezione delle immagini in uno spazio delle
feature ridotto, che viene ulteriormente ridimensionato attraverso l'uso delle tecniche basate
sull'analisi delle componenti principali (principal component analisis – PCA) [16]. A partire
dall'algoritmo PCA si sono evolute diverse varianti tra cui two-dimensional PCA [15].
La metodologia Fisherfaces è invece un procedimento derivato dalla tecnica Fisher's linear
discriminate (FLD)
[16] in cui, analogamente a quanto accade per il PCA, si proietta
l'immagine in uno spazio delle feature che viene poi ridotto. Anche tale tecnica ha subito
modifiche e miglioramenti, tra le tipologie esistenti se ne ricordano due: two-dimensional
FLD e generalized two-dimensional FLD [15].
Tra i meccanismi di estrazione delle feature possiamo inserire una tecnica più recente
chiamata Scale Invariant Feature Transform. Tale tecnica estrae da un'immagine un insieme
di punti caratteristici, chiamati keypoint che sono invarianti a scala, rotazione e parzialmente
anche ai cambiamenti di luminosità [14].
Tutte le tecniche sopra citate necessitano di un meccanismo di confronto che può variare dalla
semplice distanza euclidea a più complessi algoritmi di classificazione supervisionata come
support vector machine, alberi binari o reti neurali.
Altre tecniche di estrazione delle feature si basano sulle proprietà del volto come distanze e
angoli di punti ben definiti. Confrontando le informazioni geometriche estratte con quelle
precedentemente calcolate si cerca di ottenere l'identificazione.
6
Stato dell'arte
Una tecnica che fa molto uso di un approccio di questo tipo è l'Elastic Bunch Graph
Matching (EBGM) dove il volto viene rappresentato tramite un grafo in cui i nodi sono
posizionati in punti prestabiliti del volto e i lati sono etichettati con il vettore delle distanze.
Inoltre ogni nodo contiene un insieme di coefficienti delle Gabor Wavelet [13].
1.2 Face Detection
Come precedentemente affermato, il problema di estrazione dei volti presenti in un'immagine
viene chiamato con il nome di face detection. Tale procedura sta a monte rispetto a operazioni
di riconoscimento o altre tipologie di elaborazioni che possono richiedere la conoscenza della
presenza di un volto in un'immagine.
Le classi in cui possono essere raggruppati questi algoritmi sono quattro.
Ora ci concentreremo sull'analisi di due differenti tecniche che rappresentano quelle
maggiormente usate.
La prima, molto semplice da realizzare, fa parte dei feature invariant approaches ed è basata
sulla determinazione delle aree che contengono pixel con colore del volto. Possiamo riferirci a
tali tecniche con il nome di skin-segmentation [4].
L'altra tecnica molto diffusa e con ottime prestazioni, anche per applicazioni di tipo real-time,
è quella proposta da Viola-Jones [3], si basa sulla estrazione delle wavelet haar e sul loro uso
come informazioni per l'apprendimento di un algoritmo di classificazione di tipo AdaBoost.
1.2.1 Skin-segmentation
La skin-segmentation è una tecnica che prevede la ricerca delle aree di un'immagine
contenenti colori simili a quelli della pelle del volto umano. Come è facile intuire è molto
semplice da implementare ma richiede dei meccanismi di validazione dell'area trovata che
solitamente sono basati sulla determinazione della presenza di elementi come occhi, naso,
orecchie e bocca.
7
Stato dell'arte
Fig. 1.1: Esempio di skin-map.
Il passo fondamentale di questa tecnica è quello di produrre, a partire da un'immagine a
colori, una skin-map, cioè un'immagine in scala di grigi, o addirittura solamente a due colori,
che distingua le aree identificate come colore della pelle da quelle con colorazioni differenti.
Il primo aspetto da prendere in considerazione quando si tratta dell'estrazione delle aree
contenenti colorazioni della pelle è proprio la rappresentazione del colore. Gli spazi di colori a
nostra disposizione sono differenti ma vanno comunque tenute in considerazione le
caratteristiche del sistema di acquisizione. Se questo lavora solamente in scala di grigi è
impossibile utilizzare una tecnica del tipo skin-segmentation.
Nonostante esistano molte rappresentazioni del colore, quelle più comunemente usate sono le
seguenti:
•
RGB (red, green, blue): standard per la rappresentazione di immagini in strumenti
elettronici come schermi e sensori di fotocamere [1]. Lo standard non è valido per i
sistemi di stampa. Rappresenta la decomposizione del colore nelle sue componenti
primarie rosso, verde e blu;
•
HSV (Hue Saturation Value): standard basato sulla percezione del colore da parte
dell' uomo. Il colore viene descritto attraverso la tonalità (H), la saturazione (S) e
l'intensità luminosa (V). Si ottiene da una trasformazione non lineare dell' RGB [4][5].
Uno spazio di colore simile è HSI [2] e HLS;
8
Stato dell'arte
•
YCrCb: si rappresenta il colore come composizione di intensità luminosa (Y) e di due
segnali differenti di crominanza (Cr Cb) [5]. Il passaggio da RGB avviene con una
trasformazione di tipo lineare [4].
1
∗(65.738∗R+129.057∗G+25.064∗B)
256
1
Cb=128+
∗(−37.945∗R−74.494∗G+112.439∗B)
256
1
Cr =128+
∗(112.439∗R−94.154∗G −18.285∗B)
256
Y =16+
Indipendentemente dal tipo di codifica del colore che abbiamo a disposizione è sempre
possibile passare da una rappresentazione all'altra. La scelta più logica da effettuare è
utilizzare come spazio di colori l'RGB poiché utilizzata per le più comuni apparecchiature
elettroniche.
Il problema che però ci si trova ad affrontare scegliendo questo spazio di colori è l'influenza
di cambiamenti di luminosità. Infatti gli altri due spazi di colori, anche se in modalità
differenti, hanno una rappresentazione esplicita della componente luminosa (Y e V).
In realtà si può ovviare a ciò escludendo tali canali in fase di analisi, così da ottenere una
rappresentazione non influenzata dai cambiamenti di luminosità.
Nel caso RGB è possibile attenuare l'effetto della luminosità utilizzando la normalizzazione
del colore e sfruttando solamente i canali rosso (r) e verde (v) normalizzati [6]. Le formule per
effettuare tale normalizzazione sono le seguenti:
r=
R
R+G+B
g=
9
G
R+G+ B
Stato dell'arte
In alcuni casi è possibile combinare l'uso dei differenti spazi di colore con la finalità di
ottenere delle regioni più accurate.
Una proposta in questa ottica viene presentata nell'articolo “A Robust Skin Color Based Face
Detection Algorithm” [2]. I risultati ottenuti dalla procedura di skin-segmentation applicata a
RGB normalizzato, a HSI e a YCrCb vengono fusi per ottenere una skin-map unica con
migliore precisione rispetto alle skin-map ottenute nei singoli spazi di colore.
Fig. 1.2: Esempio di fusione di più skin-map[2]
Per svolgere la procedura di skin-segmentation possono essere utilizzati differenti approcci:
•
Limite di decisione lineare a tratti: vengono definiti dei valori di soglia con tecniche
che possono essere più o meno complesse [4]. Un esempio è quello di analizzare gli
istogrammi generati da una regione classificata come colore del volto e verificare
come si concentrano i valori dei pixel;
•
Classificatore bayesiano: il ruolo degli istogrammi, anche in questo caso, è
fondamentale per determinare la probabilità condizionata che un pixel appartenga o
meno al modello del colore della pelle;
p( x∣skin)
≥soglia
p( x∣noskin)
•
Classificatore di tipo Gaussiano: vengono creati dei modelli gaussiani che
descrivono lo skin color.
◦ Unimodali: una sola funzione di densità di probabilità condizionata (p(x|skin) che
10
Stato dell'arte
caratterizza il modello;
◦ Mixture [7]: la densità di probabilità viene descritta da una combinazione pesata
di più funzioni di tipo gaussiano unimodali, chiamati Gaussian Mixture Model
(GMM).
•
Multilayer Perceptron: vengono utilizzate delle reti neurali per definire il confine tra
skin e noskin color.
Più in generale possiamo però usare un qualsiasi algoritmo di classificazione al fine di
apprendere il confine tra colore delle pelle e non. Tali classificatori dovranno avere un set di
apprendimento tale da garantire la copertura di tutte le possibili casistiche. Quindi la pelle
umana dovrà essere rappresentata in contesti di illuminazione differenti e dovrà riguardare
tutte le possibili tipologie di pigmentazione.
Solitamente si cerca di generare un modello unico per descrivere tutte le differenti razze che si
potrebbero incontrare. In alcuni casi potrebbe essere necessario utilizzare un modello per ogni
razza. Nell'approccio proposto da Li Zuo e Kamata [7] si realizzano tre differenti Gaussian
Mixture Model per rappresentare le tre colorazioni della carnagione: bianca, scura e olivastra.
Lo spazio di colore utilizzato in questo caso è YCrCb che, con l'esclusione dell'analisi del
canale Y, dovrebbe garantire una buona tolleranza alle variazioni di luminosità.
Fig. 1.3: Esempio di skin-map
ottenute utilizzando 3 differenti
modelli si skin color
Nell'immagine riportata precedentemente (Fig. 1.3), che fa riferimento alla ricerca di pixel
con modelli diversi per le tre differenti carnagioni, possiamo vedere come il confine tra esse
non sia così netto. Infatti alcuni pixel del volto con carnagione bianca vengono classificati in
maniera corretta come appartenenti alla carnagione bianca, ma anche come appartenenti alla
11
Stato dell'arte
carnagione scura ed olivastra. Questo accade principalmente nelle zone in ombra oppure in
quelle sottoposte ad una forte illuminazione. Ciò implica che la scelta di un unico modello per
tutte le carnagioni non dovrebbe portare a problemi di classificazione dei singoli pixel.
Di seguito (Fig. 1.4) possiamo vedere gli istogrammi dei canali Cr e Cb di tre diversi volti,
uno per ogni carnagione. Come si può notare, la maggioranza dei pixel ricadono all'interno di
limiti superiori e inferiori molto simili per le differenti tipologie di carnagione. Invece la
distribuzione all'interno di tali limiti risulta essere diversa.
Fig. 1.4: Esempio di istogrammi di Cr e Cb ottenuti da tre volti
con pigmentazione della pelle differente.
Analizziamo quindi più attentamente come funzionano i limiti di decisione lineari a tratti.
Il modo più semplice per classificare un pixel è quello di definire dei valori di soglia per i
differenti canali dello spazio di colori. Solitamente se ne prendono in considerazione due,
quelli che rappresentano le crominanze.
L'obiettivo è quello di creare un sottospazio dello spazio di colori che contiene tutti i pixel di
tipo pelle. Se il pixel analizzato ricade all'interno di questo sottospazio si classifica come pelle
altrimenti no. Tale sottospazio può essere più o meno preciso, dipende dal metodo di
delimitazione dei confini scelto. Il modo più semplice è definire un limite superiore ed un
limite inferiore per ogni canale del colore. Ad esempio se usassimo solamente i canali Cr e
Cb, definendo i limiti superiori ed inferiori, si otterrebbe un sottospazio di forma rettangolare.
Se invece si includesse anche il canale Y, lavorando in uno spazio tridimensionale, si
12
Stato dell'arte
creerebbe un sottospazio di forma parallelepipeda.
Ponendo il limite superiore e quello inferiore è come se considerassimo un sottospazio
definito da 4 rette. É ovvio che se volessimo ottenere un sottospazio più accurato potremmo
utilizzare un numero maggiore di rette per delimitare lo spazio. Nel caso però volessimo
prendere in considerazione tutti e tre i canali di uno spazio di colori dovremmo definire dei
piani di separazione e non delle rette.
Fig. 1.5: Esempio di sottospazio delimitato da 4 rette
(in nero) oppure da 5 rette (in rosso)
La determinazione dei limiti viene fatta analizzando gli istogrammi di immagini raffiguranti
volti. Per i differenti spazi di colore esistono dei limiti ben precisi:
•
RGB normalizzato: 0,335 ≤ r ≤ 0,465 e 0,27 ≤ g ≤ 0,363 [6];
•
YCrCb: 77 ≤ Cb ≤ 127 e 133 ≤ Cr ≤ 173 [4] in cui è escluso il canale Y;
•
HSV: 0,23 ≤ S ≤ 0,68 e 0° ≤ H ≤ 50° [4] in cui è escluso il canale V.
Il metodo che fa uso di limiti di decisione di tipo lineare a tratti risulta essere molto semplice
da realizzare e computazionalmente poco oneroso.
Tra i modelli per descrivere il colore in maniera più accurata vi è sicuramente il classificatore
di tipo gaussiano. In questo caso, a partire da esempi di pixel del colore della pelle, si genera
una funzione gaussiana che descrive la probabilità condizionata che esso appartenga alla
classe pelle. Possiamo perciò assegnargli il valore ottenuto da questa funzione di probabilità.
La skin-map che otterremo in questo caso sarà in scala di grigi dove la colorazione bianca
corrisponderà alla massima probabilità che il pixel sia di tipo pelle, mentre una colorazione
nera corrisponderà alla probabilità minima.
Occorre precisare che tale metodo di classificazione dei pixel è più complesso rispetto a
13
Stato dell'arte
quello dei classificatori lineari a tratti. La maggiore complessità sta nel dover memorizzare
una o più funzioni di tipo gaussiano per descrivere il modello del colore della pelle. Di contro
però, le informazioni aggiuntive ottenute con questo metodo potrebbero risultare importanti ai
fini della validazione dell'area che presumibilmente contiene un volto umano.
Possiamo distinguere due differenti tipi di modelli gaussiani: quelli unimodali, in cui la
funzione di densità di probabilità condizionata è rappresentata da una sola funzione gaussiana;
quelli misti, dove la funzione di densità di probabilità è descritta da una somma pesata di
funzioni gaussiane.
La funzione di densità di probabilità gaussiana nel caso di modello unimodale ha la seguente
forma:
−d / 2
p ( x∣skin)= g (x ; ms , C s)=(2 π)
−1/ 2
∣C s∣
1
− ( x−m s)T C −1
s ( x−m s )
2
exp
.
Dove d rappresenta la dimensione del vettore delle feature e, in base agli spazi di colore presi
in considerazione in precedenza, solitamente prende il valore 2. Nel caso in cui invece si
includa anche la componete relativa alla luminosità, d prenderebbe il valore 3. Il parametro ms
rappresenta il vettore delle medie e Cs la matrice di covarianza, entrambi sono relativi alla
classe pelle. La formula utilizzata per definire se un pixel appartiene ad una classe è quella del
classificatore bayesiano:
p( x∣skin)
≥soglia .
p( x∣noskin)
Se invece consideriamo una distribuzione gaussiana unimodale per p(x|skin) e una
distribuzione uniforme della classe non pelle, è possibile ridurre la formula nel seguente
modo:
( x−ms )T C−1
s ( x−m s)≤soglia .
L'elemento a sinistra della disuguaglianza è il quadrato della distanza di Mahalanobis,
descrive una misura di similarità tra un campione dato e descritto da media e covarianza ed un
campione ignoto.
Nel caso invece si decidesse di descrivere anche la funzione di densità di probabilità p(x|
noskin) con una funzione gaussiana unimodale, definiti Cns e mns rispettivamente covarianza e
media della classe non pelle, la formula precedente diventa:
T
−1
( x−ms )T C−1
s ( x−m s)−( x−m ns ) C ns (x−m ns )≤soglia .
14
Stato dell'arte
Tale semplificazione non è valida se si prendono in considerazione le funzioni di densità di
probabilità descritte dai modelli gaussiani misti (GMM). In questo caso le due funzioni
sarebbero le seguenti:
Ns
p ( x∣skin)=∑ w s , i g ( x ; ms , i , C s ,i ) ,
i =1
N ns
p ( x∣noskin)=∑ wns , i g ( x ; m ns ,i ,C ns ,i ) .
i=1
Nelle formule precedenti il parametro w rappresenta i pesi assegnati ad ogni funzione
gaussiana. Solitamente i valori dei pesi, delle medie e delle covarianze vengono determinati
con l'utilizzo dell'algoritmo Expectation–maximization.
Nell'immagine seguente (Fig. 1.6) possiamo vedere un esempio di modello gaussiano misto e
delle due funzioni gaussiane che ne determinano l'andamento.
0 .1 6
0 .1 4
0 .1 2
0 .1
0 .0 8
0 .0 6
0 .0 4
0 .0 2
0
0
1
2
3
4
5
6
7
8
9
10
Fig. 1.6: Esempio di due funzioni
gaussiane e della GMM ottenuta
come somma pesata delle due.
Le differenti tecniche di classificazione dei singoli pixel possono essere utilizzate per la
produzione della skin-map. Però essa non è sufficiente per garantire che un'area rappresenti
effettivamente un volto. Vanno quindi attuate delle tecniche di validazione che confermino se
l'area contiene o non contiene un volto. Le tecniche
utilizzate possono essere molto differenti ma nella
maggioranza dei casi si basano sulla ricerca di elementi
caratteristici di un volto: occhi, orecchie, naso e bocca.
Alcuni approcci come quello proposto da Li Zou e
Kamata [7] prevedono l'utilizzo di modelli gaussiani
misti per rintracciare le aree dell'immagine che
Fig. 1.7: Skin map ottenuta
contengono pixel con colorazione similare a quelli della assegnando ai pixel il valore di
pelle. Estratte tutte le sotto aree dell'immagine probabilità condizionata.
15
Stato dell'arte
compatibili con la presenza di un volto, queste vengono analizzate con l'algoritmo Viola-Jones
per determinare se lo contengono. Le immagini in scala di grigi rappresentano la probabilità
che il pixel appartenga al colore pelle mentre nella formulazione originale sono la
trasposizione in scala di grigi dell'immagine a colori.
Di seguito viene riportato un esempio di tre volti codificati in scala di grigi in base alla
probabilità che il pixel sia di tipo pelle.
1.2.2 Algoritmo Viola-Jones
L'algoritmo proposto da Viola e Jones [3] e modificato successivamente da Lienhart e Meydt
[10] propone un framework basato su tecniche di machine learning. Risulta essere un sistema
molto robusto ed estremamente rapido per il rilevamento di volti e più in generale di oggetti.
L'algoritmo è caratterizzato da tre componenti fondamentali:
•
Integral Image: è una elaborazione dell'immagine di input finalizzata al
miglioramento della velocità di calcolo delle Haar like feature. Questa ricodifica delle
informazioni consente un tempo costante per il calcolo delle feature.
•
Haar like feature: è un meccanismo di estrazione delle feature da un'immagine basato
sulle Haar wavelet, viene proposto per un generico sistema di object detection [9].
•
AdaBoost: si tratta di un algoritmo di machine learning che, correttamente addestrato,
è in grado di determinare il confine tra due differenti classi. Nel caso dell'algoritmo
Viola-Jones, per aumentarne le prestazioni, ne viene proposta una variante.
L'approccio proposto da Viola-Jones risulta avere delle prestazioni molto valide per uso anche
in contesti di tipo real-time.
Le immagini di input per tale algoritmo possono essere a colori o in scala di grigi. Nel caso di
immagini a colori si dovrà provvedere ad una conversione in scala di grigi. Se utilizzassimo lo
spazio di colori YCrCb sarebbe sufficiente prendere in considerazione esclusivamente il
canale Y, che rappresenta la componente relativa alla luminosità, ed escludere gli altri due
canali.
L'immagine in scala di grigi di input subisce una trasformazione che ricodifica le
informazioni dei singoli pixel per creare la Integral Image, anche chiamata Summed Area
Tablet.
Le modifiche all'algoritmo invece fatte da Lienhart e Meydt portano all'introduzione del
16
Stato dell'arte
concetto di Rotated Summed Area Tablet. Ovvero una seconda codifica dell'immagine, da
affiancare alla Integral Image, finalizzata ad incrementare le prestazioni dell'algoritmo con
l'uso di particolari haar-like feature, ruotate rispetto a quelle originariamente proposte da
Viola-Jones.
La formula per il calcolo della Integral Image è la seguente:
∑
sat ( x , y)=ii( x , y)=
i( x ' , y ' ) [3][10 ].
x ' ≤x , y '≤ y
Mentre la formula per il calcolo della Rotated Summed Area Tablet è:
rsat (x , y)=
∑
i( x ' , y ' ) [10].
x '≤x , y' ≤ y−∣x−x '∣
Con le variabili x e y si indicano le coordinate di un pixel all'interno dell'immagine da
elaborare, indicata con la lettera i. Come è facile comprendere, ogni pixel della nuova
immagine conterrà la somma di tutti i pixel con valori di x ed y inferiori a quelli del punto da
calcolare. La matrice che ne risulterà avrà dunque le stesse dimensioni dell'immagine di
partenza ma l'informazione verrà espressa in maniera differente.
Nell'immagine seguente (Fig. 1.8) è riportata una rappresentazione grafica della Integral
Image e della Rotated Summed Area Tablet. L'area evidenziata rappresenta la sotto area
dell'immagine originale che contribuisce a determinare il valore di ii(x,y) e rsat(x,y).
Fig. 1.8: Esempio di Summed Area Tablet e della versione
ruotata.
Per rendere più efficiente il calcolo della Integral Image è possibile utilizzare le seguenti
espressioni ricorsive:
s (x , y)=s ( x , y−1)+i ( x , y) ;
ii( x , y)=ii( x−1, y)+ s(x , y) ;
con condizioni iniziali:
s (x ,−1)=0 ;ii (−1, y)=0 ;
deve s(x,y) è la somma cumulativa delle righe.
17
Stato dell'arte
Sono disponibili delle formule analoghe che consentono di calcolare la Rotated Summed Area
Tablet solamente con due passaggi sopra ogni pixel.
Il primo passaggio viene eseguito da sinistra a destra e dall'alto verso il basso, la formula
corrispondente è:
rsat (x , y)=rsat ( x−1, y−1)+rsat (x−1, y )+i ( x , y)+rsat (x−2, y−1) ;
il secondo passaggio viene eseguito da destra verso sinistra e dal basso verso l'alto, la formula
è:
rsat (x , y)=rsat ( x , y)+rsat (x−1, y+1)−rsat ( x−2, y) ;
le condizioni iniziali sono:
rsat (−1, y)=rsat (−2, y )=rsat (x ,−1)=0 .
La Integral Image e la Rotated Summed Area Tablet sono necessarie per calcolare in maniera
rapida la somma dei pixel contenuti in un rettangolo all'interno dell'immagine. Nel caso di
Rotated Summed Area Tablet i rettangoli da calcolare sono ruotati di 45°. Nell'immagine
seguente è riportata una rappresentazione grafica di come avviene il calcolo del rettangolo
scuro.
Fig. 1.9: Immagine che esemplifica come avviene il calcolo
della sotto area evidenziata.
La formula per il calcolo della somma dei pixel del rettangolo per Integral Image è:
RSum( x , y , w , h)=ii (x−1, y−1)+ii( x+w−1, y+h−1)
−ii( x−1, y+h−1)−ii( x+w−1, y−1) .
Mentre la formula per Rotated Summed Area Tablet è:
RSum( x , y , w , h)=rsat ( x+w , y+w)+rsat (x−h , y+h)
−rsat (x , y)−rsat ( x+w−h , y+w+h) .
I rettangoli sono descritti da x e y che rappresentano le coordinate del vertice alto del
rettangolo e da h e w che rappresentano altezza e larghezza del rettangolo nel caso della
Integral Image. Mentre per la Rotated Summed Area Tablet h e w sono le proiezioni di altezza
e larghezza del rettangolo. Nell'immagine seguente è possibile vedere graficamente cosa
18
Stato dell'arte
rappresentano i diversi parametri.
Fig. 1.10: Esempio di rettangolo verticale e del corrispondente
rettangolo ruotato di 45 gradi
La rappresentazione dell'immagine come Integral Image e Rotated Summed Area Tablet
consente una maggior rapidità di calcolo delle haar-like feature. Infatti per poter calcolare le
feature sarebbe stato necessario determinare ad ogni passo la somma di pixel di aree
dell'immagine, processo computazionalmente molto oneroso se ripetuto a diversa scala e
posizione, come nel caso delle haar-like feature.
Nodo fondamentale per l'algoritmo è il meccanismo di estrazione delle feature. La tecnica
adottata prende il nome di haar-like feature e deriva dal filtro haar [9]. In questo filtro sono
presenti tre tipi di wavelet che hanno un significato molto preciso:
•
la wavelet verticale, che codifica la differenza di intensità media di due regioni
verticali adiacenti, è quindi è in grado di estrarre i bordi verticali presenti in
un'immagine;
•
la wavelet orizzontale, che codifica la differenza di intensità media di due regioni
orizzontali adiacenti, estrae perciò i bordi orizzontali presenti nell'immagine;
•
la wavelet diagonale, che è invece il risultato della combinazione delle altre due
wavelet in quanto estrae i bordi diagonali da un'immagine.
Fig. 1.11: Esempio delle tre haar
fondamentali.
19
Stato dell'arte
Le ragioni fondamentali che determinano la scelta delle Haar wavelet sono:
•
la codificazione delle differenze di intensità media tra regioni con diversi orientamenti,
consentendo un'analisi con più scale [9]. Tali differenze dovrebbero essere invariabili e
quindi identiche per tutte le immagini rappresentanti volti.
Nell'algoritmo Viola-Jones si usano immagini di volti di 20x20 e si generano tutti i
possibili coefficienti modificando le dimensioni delle wavelet dalla dimensione
minima alla massima contenibile nell'immagine.
•
l'uso di un insieme di coefficienti haar che permette di propagare i vincoli tra le
regioni confinanti e descrivere modelli complessi [9]. I coefficienti haar vengono
calcolati in tutte le possibili posizioni e dimensioni all'interno di un'immagine
generando una quantità elevata di feature.
Nella figura riportata a fianco (Fig. 1.12) sono rappresentate quattro immagini in scala di
grigi. La prima in alto a sinistra contenente l'immagine
originale, le altre tre rappresentano i coefficienti haar
calcolati sull'immagine originale.
Per ottenere le immagini dei coefficienti sono state applicate
le wavelet haar con dimensione 2x2 pixel in tutte le possibili
posizioni all'interno dell'immagine originale. Quelle così
ottenute sono state rappresentate in scala di grigi dove il
colore nero rappresenta un coefficiente negativo, il colore
bianco un coefficiente positivo e il grigio il valore zero.
Fig. 1.12: Immagine dei
coefficienti ottenuti
In questa figura le immagini sono relative a:
applicando le wavelet
• la wavelet verticale (in alto a destra), marca sull'immagine in alto a
sinistra.
nettamente la riga verticale e meno intensamente
quella obliqua, tralasciando completamente la riga orizzontale;
•
la wavelet orizzontale (in basso a sinistra), marca nettamente la retta orizzontale e
meno intensamente quella obliqua, tralasciando completamente la riga verticale;
•
la wavelet diagonale (in basso a destra), marca nettamente la riga obliqua tralasciando
le altre due righe. In oltre evidenzia il punto di incontro tra la riga orizzontale e quella
verticale.
Le wavelet basilari sono solamente tre, mentre le haar-like proposte da Viola e Jones sono in
numero superiore per codificare un maggior numero di situazioni.
20
Stato dell'arte
Il set ha subito poi un'estensione ulteriore de parte di Lienhart e Meydt con l'introduzione di
haar-like ruotate di 45° rispetto alle originarie. Questa estensione ulteriore ha richiesto
l'impiego della Rotated Summed Area Tablet descritta in precedenza.
Nell'immagine seguente (Fig. 1.13) sono raffigurati tutti i possibili prototipi del set esteso di
haar-like. L'algoritmo Viola-Jones faceva uso esclusivamente delle feature 1a, 1b, 2a, 2b, 2c,
2d e 4.
Fig. 1.13: Esempio di haar like feature verticali e ruotate.
Il set di haar-like è scelto per codificare al meglio tutte le possibili feature presenti all'interno
di un volto umano. Con delle semplici formule è possibile valutare quante ne possono essere
estratte da un'immagine campione di dimensioni WxH. Le formule sono le seguenti:
XY ∗(W +1−w∗(
XY ∗(W +1− z∗(
X +1
Y +1
))∗( H +1−h∗(
)) .
2
2
X +1
Y +1
))∗( H +1− z∗(
)) con z =w+h.
2
2
La prima è la generica formula per haar-like normali mentre la seconda è la formula per il
caso delle haar-like ruotate di 45°. Con i valori w e h si intendono le dimensioni minime di
altezza e larghezza della haar-like presa in considerazione. Il termine X rappresenta il
rapporto tra larghezza dell'immagine e larghezza minima della haar-like (X= W/w).
Analogamente Y rappresenta il rapporto tra altezza dell'immagine e altezza minima della
21
Stato dell'arte
haar-like (Y=H/h).
Nella tabella riportata di seguito ci sono tutte le informazioni per calcolare le cardinalità delle
feature estraibili da un'immagine di dimensione 24x24 pixel utilizzando tutte le haar-like
descritte in precedenza.
Feature
w/h
X/Y
#
1a : 1b
2/1 : 1/2
12/24 :24/12 43200
1c : 1d
2/1 : 1/2
8/8
8464
2a : 2c
3/1: 1/3
8/24 : 24/8
27600
2b : 2d
4/1 : 1/4
6/24 : 24/6
20736
2e : 2g
3/1: 1/3
6/6
4356
2f : 2h
4/1 : 1/4
4/4
3600
3a
3/3
8/8
8464
3b
3/3
3/3
1521
4
2/2
12/12
69696
Type
Somma
187637
Tabella 1.1: Calcolo del numero delle feature estratte da un'immagine di
dimensioni 24x24 pixel.
Dunque da un'immagine di dimensioni 24x24 pixel è possibile estrarre un totale di 187637
feature. Tra tutte le feature estratte, verranno selezionate dall'algoritmo di apprendimento
solamente quelle che garantiscono una maggior capacità di discriminare tra due classi.
La parte fondamentale dell'approccio Viola-Jones è proprio quella dell'algoritmo utilizzato per
distinguere tra le classi volti e non volti.
L'algoritmo scelto è AdaBoost ma ne viene elaborata una versione che consenta, in fase di
apprendimento, di selezionare l'insieme delle feature che garantiscono la massima
discriminazione tra le due classi. Infatti sarebbe proibitivo scegliere di discriminare un volto
da un non volto apprendendo per intero più di 180000 feature per ogni immagine campione
usata.
L'algoritmo proposto si basa sull'ipotesi di costruire una combinazione lineare pesata di
classificatori deboli. Ogni classificatore debole si limita ad utilizzare una singola feature.
Dunque verrà selezionato ad ogni passo il classificatore debole che garantisce la maggiore
discriminazione tra le due classi.
22
Stato dell'arte
La formula che esprime il classificatore debole è:

h j ( x)= 1
0
p j f j (x)< p j θ j .
altrimenti
Dove fj rappresenta la feature, θj rappresenta la soglia e pj la direzione della disuguaglianza.
La formulazione dell'algoritmo di apprendimento è la seguente:
•
Dato un training set (x1,y1),...,(xn,yn) con yi = 0,1 rispettivamente per esempi negativi e
positivi.
•
Inizializzare i pesi w 1, j =1/2 m
per gli esempi negativi, dove m rappresenta la
cardinalità degli esempi negativi e w 1, j =1/2 l per gli esempi positivi, dove l
rappresenta la cardinalità degli esempi positivi.
•
Per t = 1,...,T dove T è il numero di classificatori deboli
1. Normalizzare i pesi,
w t , j=
wt , i
n
∑ wt, j
j=1
2. Selezionare il miglior classificatore debole in base all'errore pesato
ϵt =min f , p , θ ∑ w i∣h(x i , f , p ,θ)− y i∣
i
3. ht(x) = h(x,ft,pt,θt) sarà quello con il minor errore ϵt
4. Aggiornare i pesi
ϵt 1−e
w t+1, j =w t , i +(
)
1−ϵt
i
Dove ei = 0 se l'esempio xi è stato classificato correttamente altrimenti ei = 1.
•
Il classificatore finale è:

C ( x)= 1
0
dove α t=log (
T
T
∑ α t ht (x)≥12 ∑ αt
t=1
t=1
altrimenti
1−ϵt
)
ϵt
23
Stato dell'arte
La procedura di apprendimento appena descritta è solamente una parte dell'algoritmo
completo. Infatti l'algoritmo di apprendimento prevede una cascata di classificatori pesati con
lo scopo di rendere il procedimento decisionale incrementale.
Ad ogni stage della cascata di classificatori aumenta il numero delle feature che vengono
valutate. Per passare da uno stage al successivo è necessario che nello stage a monte si sia
ottenuto un responso positivo dal classificatore pesato, cioè che le feature valutate in quello
stage sono classificabili come appartenenti ad un volto.
Se il responso del classificatore pesato è negativo si interrompe la cascata e si respinge la
sotto area dell'immagine perché non contiene un volto.
Se invece si termina la cascata di classificatori ottenendo un responso positivo in tutti gli
stage, la sotto area dell'immagine viene classificata come volto.
Fig. 1.14: Esempio della cascata di classificatori. Ogni nodo uno stage
della cascata.
Nella figura seguente (Fig. 1.15) possiamo vedere le feature che sono state prescelte per i
primi tre stage della cascata di classificatori, tendono ad aumentare ad ogni passaggio.
Fig. 1.15: Haar feature usate per l'apprendimento
dei primi 3 stage della cascata di classificatori.
24
Stato dell'arte
Il numero degli stage che devono essere attraversati prima di ottenere il responso definitivo
dipende dal livello di accuratezza che si richiede all'algoritmo. Infatti ad ogni stage si
mantiene invariata la percentuale di riconoscimenti corretti mentre si diminuisce la possibilità
che si verifichi un falso positivo.
La cascata di classificatori viene eseguita in tutte le possibili finestre contenute nell'immagine.
Si sposta la finestra all'interno dell'immagine partendo dall'angolo in alto a destra e
spostandosi dall'alto verso il basso e da destra verso sinistra. Inoltre si parte dalla minima
dimensione possibile e si scala la finestra di ricerca fino alla massima contenibile
nell'immagine. La minima grandezza della finestra di ricerca è data dalla dimensione delle
immagini di volti e di background che vengono utilizzati per l'apprendimento. Solitamente le
dimensioni sono di 20x20 o di 24x24 pixel.
1.3 Face Recognition
Riconoscere un individuo significa confrontare il volto estratto da un'immagine con un
insieme di volti campione che fanno parte di un database. Se si verifica tale corrispondenza si
deve indicare l'individuo altrimenti si dichiara che è sconosciuto.
É evidente che il costo per identificare un volto cresce all'aumentare del numero dei soggetti
presenti nel database. Alcuni metodi possono funzionare semplicemente con un'immagine
campione per ogni individuo mentre altri richiedono che un soggetto sia rappresentato da un
maggior numero di volti.
Possiamo dividere gli approcci atti a riconoscere un volto in due classi [17]:
•
Holistic Method: considera il volto umano come un segnale unico. Quindi lo
interpreta e lo elabora nella sua interezza. Fanno parte di questa metodologia le
tecniche derivate principal component analysis (PCA) e Fisher's linear disciminate
(FLD).
•
Local Method: il volto umano viene elaborato e vengono estratte delle feature locali
che vengono utilizzate per riconoscerlo. In questa categoria possiamo inserire le
tecniche basate sulle Scale Invariant Feature Trasform (SIFT) e Elastic Bunch Graph
Matching (EBGM).
In realtà esiste un terza classe di metodologie derivata dalla fusione delle feature di tipo locale
e di quelle di tipo globale. Tale metodologia dovrebbe garantire migliori prestazioni. Un
25
Stato dell'arte
esempio di utilizzo di feature globali e locali è proposto da Chowdhury, Sing, Basu e Nasipuri
[18].
Di seguito verranno presentate le tecniche PCA, SIFT, EBGM e quella ibrida proposta da
Chowdhury, Sing, Basu e Nasipuri.
1.3.1 Principal Component Analysis
L'analisi delle componenti principali (PCA) è uno strumento della statistica multivariata
proposto da Karl Pearson nel 1901 e sviluppato da Harold Hotelling nel 1933. E' una tecnica
utilizzata in ambiti economici, sociali, matematici e ingegneristici, prende anche il nome di
“trasformata di Karhunen-Loève” (KLT).
Lo scopo di tale tecnica è quello di ridurre le dimensioni di un fenomeno tramite l'estrazione
di
una
ristretta
quantità
di
informazioni
che,
se
ricostruite,
devono
garantire
un'approssimazione valida del fenomeno di partenza.
L'obiettivo è dunque quello di passare da uno spazio N-dimensionale ad uno spazio Mdimensionale con M < N. Questa riduzione di dimensioni determina una riduzione della
complessità del problema.
In termini di statistica multivariata significa che, partendo da dati con matrice di covarianza
non diagonale e in uno spazio N-dimensionale, si cerca uno spazio di dimensione inferiore ad
N in cui la matrice di covarianza è diagonale. In tal caso significa che non ci sono correlazioni
tra le variabili che descrivono il fenomeno. Per ottenere la diagonalizzazione è necessario
ruotare le coordinate in base agli autovettori. Se le variabili originarie sono correlate, alcuni
autovalori avranno un valore trascurabile e quindi gli autovettori associati a questi potranno
essere scartati [22].
26
Stato dell'arte
Fig. 1.16: Esempio di come avviene la riduzione di dimensione dello spazio
tramite l'utilizzo della tecnica di analisi delle componenti principali.
Come possiamo intuire, si tratta di una tecnica del tutto generale che può essere applicata in
qualsiasi contesto per ridurre la complessità delle informazioni legate ad un fenomeno.
E' largamente usata per l'identificazione di volti è può essere combinata a altre tecniche di
estrazione di feature[18] o come tecnica principale [20] [21].
L'applicazione diretta della tecnica PCA prende il nome di eigenface [20] [21]. Cerca di
estrarre e valutare le differenze tra i volti appartenenti a un gruppo per poterli codificare e
comparare con altri esterni attraverso meccanismi olistici.
La metodologia si propone di trovare un insieme di immagini, chiamate eigenfaces, che
consenta di rappresentare tutto il database di volti. Ognuno sarà rappresentato, in maniera
approssimata, da una combinazione lineare pesata di più eigenfaces. In termini di analisi dei
componenti principali si vogliono trovare gli autovettori dominanti, cioè quelli legati agli
autovalori maggiori, della popolazione di volti contenuti nel database.
Un nuovo volto rilevato sarà dunque codificato come combinazione lineare di eigenfaces e i
pesi potranno esser utilizzati per identificare il soggetto. Questo può avvenire semplicemente
con l'uso di una funzione che calcola la distanza geometrica.
Nella figura seguente (Fig. 1.17) l'immagine di destra rappresenta l'insieme delle eigenfaces
che sono state selezionate a partire dal database rappresentato nell'immagine di sinistra.
27
Stato dell'arte
Fig. 1.17: Esempio di immagini di volti che compongono un database (a) e
insieme delle eigenfaces ricavate dal database (b).
La procedura per effettuare un riconoscimento può dunque essere schematizzata nel seguente
modo:
•
a partire da un database di immagini di apprendimento vengono calcolate le
eigenfaces che costituiranno lo spazio dei volti;
•
il volto da identificare viene proiettato nello spazio dei volti e viene calcolato il vettore
dei pesi;
•
usando il vettore dei pesi si definisce se il soggetto appartiene al database e a che
identità corrisponde.
La parte fondamentale di questa metodologia è quella del calcolo delle eigenfaces, vediamo
come ciò avviene.
Per prima cosa dobbiamo considerare un'immagine di NxM pixel come un vettore di
dimensioni (N*M). Tale vettore si ottiene come concatenazione di tutte le righe di
un'immagine. Dunque una di dimensione 256x256 pixel darà luogo ad un vettore di 65536
elementi, ovvero ad un punto in uno spazio (MxN)-dimensionale.
Poiché tutti i volti presentano caratteristiche simili, si andranno a concentrare in un
sottospazio limitato. Il PCA si occuperà appunto di ridurre la dimensione di tale spazio.
Il primo passo per l'individuazione delle eigenfaces è il calcolo del volto medio. Questo
passaggio è fondamentale perché, come abbiamo già detto, l'obiettivo è quello di codificare le
differenze tra i volti. La formula è:
28
Stato dell'arte
Ψ=
1
M
M
∑ Γn
n= 1
dove Γ 1 , Γ2,... , Γ M sono gli M volti che compongono il training set. Ogni volto differirà
dunque dal volto medio del valore Φ n=Ψ−Γn .
A partire dalle informazioni così codificate sarà necessario calcolare la matrice di covarianza
al fine di estrarre gli autovettori e gli autovalori. La formula è la seguente:
1
C=
M
dove
M
∑ Φn ΦTn = AAT
n=1
A=[ Φ1 ,Φ 2 , ... ,Φ n ] .
Dalla matrice di covarianza è possibile calcolare gli autovettori
(μ k )
utilizzando il metodo
Jacobiano [20]. Dunque la formula è la seguente:
1
λ k=
M
M
∑ (μTk Φn)2
n=1
che è massimizzata quando:
T
l
μ μk=
{
1
0
se l=k
alrimenti
Si sceglierà quindi un sottoinsieme di autovettori che massimizza gli autovalori. In questo
modo si approssima la rappresentazione di ogni singolo volto ma al contempo si riduce la
complessità del problema. Dunque se il set completo di immagini di apprendimento è
composto da M=115 volti, si è stimato che M' = 40 determina un errore del 2%. M' è il
numero di autovettori selezionati.
Una volta definite le eigenfaces è possibile utilizzare il sistema per classificare un nuovo
volto. Esso deve essere proiettato nello spazio generale calcolando il vettore di pesi associato.
Il calcolo di ogni peso si effettua con la seguente formula:
ωn =μ n (Γ−Ψ )
n=1,..., M'
dove Γ rappresenta il volto da identificare. Il vettore dei pesi sarà dunque:
Ω=[ ω1 , ω2 ,... , ω M ' ]
Un volta ottenuto il vettore dei pesi è possibile classificare il volto di input. Per fare questo è
necessario confrontare tutti i vettori dei pesi, associati ai volti nel database, con il vettore
appena estratto. Si calcola la distanza euclidea tra i due vettori e si determina l'appartenenza
29
Stato dell'arte
ad un soggetto solo quando questa distanza è al di sotto di una soglia prefissata.
La formula per il calcolo è la seguente:
ε2k =∥Ω−Ωk∥2
k =1, ..., M
dunque se εk ⩽θϵ è classificato come la faccia k-esima.
Può inoltre essere definita una distanza dal sottospazio dei volti. Questa indicherà se
l'immagine di input contiene effettivamente un volto. Dobbiamo quindi calcolare un vettore
dei pesi del volto medio, e la formula è:
M'
Φ f = ∑ ω n μn .
n=1
Il calcolo della distanza è:
ε=∥Ω−Ω f ∥2 .
Come nel caso precedente si fissa una soglia θ che definisce se un'immagine di input
appartiene o meno allo spazio dei volti.
Il vettore dei pesi di un volto può essere visto come un punto in uno spazio M'-dimensionale.
Dunque un insieme di vettori peso possono essere utilizzati come set di apprendimento per
algoritmi di classificazioni, ad esempio SVM [18].
1.3.2 Elastic Bunch Graph Matching
Si tratta di una tecnica basata sulla ricerca di corrispondenza tra grafi rappresentativi di un
volto. Tale tecnica proposta da Wiskott, Fellous, Kuiger, e von der Malsburg [19] fa uso di un
grafo composto da archi e nodi. Ogni nodo è etichettato da un jet: l'insieme di coefficienti di
filtri di Gabor, con diversa scala e orientamento, applicati alla parte di immagine individuata
dal nodo. Gli archi a loro volta sono etichettati con la distanza tra due nodi.
Fig. 1.18: Esempio di adattamento del grafo su volti in pose
differenti.
30
Stato dell'arte
La proprietà principale dei grafi è rappresentata dalla facilità di manipolazione, difatti essi
possono essere traslati, ruotati, ridimensionati e deformati elasticamente. Nella figura
precedente si può notare che possono essere acquisiti in condizioni di posa differenti, così da
risultare diversi per geometria e per le feature locali.
Per mappare un grafico è necessario prendere in considerazione alcuni punti caratteristici che
prendono il nome di fiducial point. Generalmente questi punti sono le pupille, gli angoli della
bocca, le estremità del naso e tutte le possibili aree di particolare interesse.
Inoltre l'uso dei grafi consente la definizione di relazioni tra nodi appartenenti a grafi in pose
del volto differenti. In questo modo si aumenta la possibilità di identificazione corretta.
Poiché può risultare computazionalmente molto costoso rappresentare ogni combinazione di
feature attraverso grafi separati, si introduce il face bunch graph (FBG). E' una struttura
similare ad uno stack dove tutti i modelli di un grafo hanno la stessa struttura e i nodi si
riferiscono agli stessi fiducial point. Un insieme di jet riferiti ad un fiducial point prende il
nome di bunch. Ad esempio quello riferito al fiducial point di un occhio conterrà jet riferiti
agli occhi chiusi, aperti, maschili e femminili, al fine di coprire tutte le possibili casistiche.
Nella figura seguente è possibile osservare il grafo FBG. Ad ogni nodo è assegnato un bunch
composto da 6 differenti jet. In grigio sono evidenzianti quelli che sono stati selezionati
durante l'analisi di un'immagine sconosciuta.
Fig. 1.19: Esempio di FBG che fornisce
una rappresentazione generale di un
volto. Gli stack di dischi rappresentano i
jet.
31
Stato dell'arte
L'etichettatura iniziale dei fiducial point deve essere eseguita manualmente finché non si ha
un campione di grafi abbastanza grande. Quando FBG conterrà all'incirca 70 grafi non sarà
più necessario aggiungerne di nuovi. Infatti con un'etichettatura manuale di 6 grafi si ha che,
se il grafo contiene 9 nodi come nella figura precedente, FBG sarebbe potenzialmente in
grado di rappresentare 69 volti differenti. Viene così creato un FBG per ogni possibile posa.
Gli archi che compongono il modello FBG vengono etichettati con i valori medi ottenuti dai
grafi delle immagini campione utilizzate.
La procedura per il riconoscimento di una nuova immagine è la seguente:
•
Sul volto incognito vengono posizionati i fiducial point in modo che:
1. corrispondano a particolari feature;
2. sia massimizzata la similarità del grafo con un FBG. Per valutare la similarità tra
due grafi si utilizza la seguente formula:
1
S (G , B)=
N
G
B 2
( Δ ⃗x e −Δ ⃗x e )
(S ϕ ( J , J ))− λ ∑
∑ max
E e
m
( ⃗x eB )2
n
G
n
Bm
n
m=1,... , M
con n=1,... , N
e=1,... , E
Dove con B si indica un FBG che contiene M esempi con N nodi ed E archi. Con
G si indica il grafo rilevato dall'immagine da identificare. La prima parte della
formula descrive la similarità tra jet mentre la seconda parte è il termine che fa
riferimento alla topografia del grafo. Il termine λ indica l'importanza da attribuire
al temine che compara le topografie dei grafi.
La formula che descrive la similarità tra due jet è la seguente:
∑ a j a j ' cos(ϕ j −ϕ j ' − ⃗d k⃗j )
S ϕ ( J , J ' )=
j
√∑ a ∑ a '
2
j
j
j
j
2
()
a 1 ei ϕ
...
J = a j ei ϕ
...
iϕ
a 40 e
1
j
40
Dove con i termini a si indicano l'ampiezza e con φ si indica la fase. Il jet è
composto da 40 wavelet Gabor ottenute a 5 frequenze e 8 orientazioni differenti.
•
A questo punto, conoscendo la posa del volto è possibile confrontare il grafo ottenuto
dalla nuova immagine con tutti i grafi pre-calcolati dei volti presenti nel database. Il
confronto avviene mediante procedura di graph matching. I risultati sono ordinati in
base alla similarità.
•
Ricavati i valori di similarità si decide se attribuire al volto l'identità del soggetto con
32
Stato dell'arte
maggiore similarità oppure scartare i risultati.
1.3.3 Scale Invariant Feature Trasform
La Scale invariant feature trasform (SIFT) è una tecnica di estrazione delle feature da
un'immagine introdotta da Lowe [14]. Il suo scopo è quello di prelevare un insieme di punti,
che prendono il nome di keypoint.
I keypoint sono caratterizzati da un descrittore che ha un'elevata stabilità in caso di rotazione e
ridimensionamento dell'immagine, mentre la precisione in termini di cambiamenti di
luminosità risulta essere limitata.
Tale tecnica, per poter essere utilizzata al fine del riconoscimento di volti, richiede l'utilizzo di
un meccanismo di confronto dei keypoint. Prendendo in considerazione un'immagine
campione di un volto all'interno di un database, questa può essere messa in corrispondenza
con un'altra tramite un sistema di comparazione dei descrittori dei keypoint.
Il meccanismo più semplice che può essere utilizzato è quello del calcolo della distanza
euclidea tra i descrittori di due keypoint. Funziona assegnando l'appartenenza al keypoint che
minimizza tale distanza.
Altri meccanismi più complessi utilizzabili per il confronto sono quelli del machine learning.
In particolare a tale tecnica sono stati associati gli algoritmi AdaBoost [12], Support Vector
Machine [13] e Multilayer Perceptron [11].
Il meccanismo di estrazione delle feature è basato sull'applicazione in cascata di una serie di
filtri. Gli stage principali che possiamo identificare sono:
•
Scale-space Extrema Detection;
•
Accurate Keypoint Localization;
•
Orientation Assignment;
•
Costruction Keypoint Descriptor.
La fase di Scale-space extrema detection ha l'obiettivo di identificare tutte le possibili
posizioni che sono invarianti al cambiamento di scala. Per fare ciò è necessario l'utilizzo di
uno scale-space kernel che in questo caso è una funzione gaussiana. Lo scale space è definito
dalla funzione:
L( x , y ,σ)=G( x , y ,σ)∗I ( x , y) ,
33
Stato dell'arte
con G(x,y,σ):
G (x , y , σ)=
1
e−( x +y ) /2 σ ,
2
2πσ
2
2
2
dove I(x,y) è l'immagine di input e * è l'operazione di convoluzione.
Per selezionare i keypoint stabili nello scale space si utilizza la funzione di differenza
gaussiana. La quale è ottenuta come la differenza tra due scale vicine separate da un fattore
moltiplicativo k:
D (x , y , σ)=L( x , y , k σ)− L(x , y , σ) .
Il primo passo è quello di produrre un insieme composto dall'immagine iniziale convoluta con
la funzione gaussiana al variare di k. In questo modo si può calcolare la differenza gaussiana
tra valori di k consecutivi. Una volta calcolata la prima ottava le immagini gaussiane ottenute
vengono scalate di un fattore 2 e vengono calcolate le differenze con la nuova scala. La figura
seguente (Fig. 1.20) descrive in maniera dettagliata il procedimento per il calcolo delle
differenze gaussiane.
Fig. 1.20: Rappresentazione grafica del calcolo della differenza
gaussiana.
Ogni ottava è composta da uno stack formato da un numero di immagini gaussiane pari a s+3
dove s è un valore intero che influenza la scelta del valore k. Infatti il termine k può essere
calcolato come k=21/s.
34
Stato dell'arte
Per localizzare i keypoint si ricercano i minimi e i
massimi della funzione di differenza gaussiana (DoG).
Per fare ciò vengono analizzati tutti i possibili punti di
D(x,y,σ), questi vengono messi a confronto con gli otto
punti vicini e con i nove punti corrispondenti della DoG
precedente e seguente a quella presa in considerazione.
A questo punto, una volta identificati tutti i possibili
keypoint di un'immagine, è necessario eseguire la
rimozione di quelli che vengono ritenuti deboli. Tale
procedura prende il nome di Accurate Keypoint
Localization. Si eliminano tutti i punti con un
coefficiente basso o posizionati sui bordi. I punti
rimanenti dopo tale fase sono quelli più stabili alle
distorsioni e poco soggetti alla presenza di rumore.
Fig. 1.21: Punti che vengono
utilizzati per determinare
massimo e minimo della
differenza Gaussiana. Il pixel
analizzato è quello identificato
con la X, gli altri evidenziati sono
quelli presi in considerazione per
il calcolo.
L'immagine della figura seguente (Fig. 1.22) è di 233x189 pixel. Dopo la fase di ricerca di
calcolo di minimi e massimi delle differenze gaussiane si sono ottenuti ben 832 keypoint.
Rimuovendo tutti i keypoint non ritenuti sufficientemente stabili si ottengono 536 keypoint.
Fig. 1.22: Immagini rappresentative del processo di estrazione
dei keypoint. La figura (a) rappresenta l'immagine originale,
la (b) rappresenta i keypoint estratti nella prima fase e la (c)
rappresenta i keypoint che sono stati selezionati perché più
stabili.
35
Stato dell'arte
Ora che sono stati estratti tutti i possibili keypoint di un'immagine si passa alla fase chiamata
Orientation Assignment. Ad ogni keypoint viene assegnato un valore di grandezza m(x,y) e
uno che ne definisce l'orientamento θ(x,y).
Le funzioni utilizzate per il calcolo di questi valori sono:
m( x , y)=√ (L( x+1, y)− L(x−1, y))2+( L( x , y+1)−L( x , y−1))2 ,
θ(x , y)=tan−1
L( x , y+1)−L( x , y−1)
.
L( x+1, y)−L( x−1, y)
Viene creato un istogramma formato dall'orientamento dei gradienti della regione attorno al
keypoint. L'istogramma è formato da 36 valori che coprono tutti i 360° attorno al keypoint.
Il picco sull'istogramma degli orientamenti definisce la direzione dominante. Ogni altro picco
locale, che assume un valore maggiore all'80% del picco massimo, viene selezionato per la
creazione di un altro keypoint. Solamente il 15% dei keypoint dà luogo ad una assegnazione di
orientamenti multipli.
La fase finale dell'estrazione dei keypoint è quella della creazione del descrittore associato,
Costruction Keypoint Descriptor. Per calcolare le informazioni che caratterizzeranno il
descrittore si divide lo spazio intorno al keypoint in una matrice 4x4 di sotto regioni. Per ogni
sotto regione viene calcolato un istogramma del gradiente formato da 8 valori. Tutti gli
istogrammi così ottenuti vengono concatenati e danno luogo ad un vettore di dimensione 128,
cioè 4x4x8.
L'informazione di orientamento del keypoint, estratta nel passaggio precedente, viene
utilizzata per ruotare le informazioni degli istogrammi appena ottenuti. In tale modo tutti i
vettori avranno una rappresentazione coerente confrontabile tra loro.
Nella figura seguente (Fig. 1.23) è rappresentato graficamente come viene posizionata e
orientata la griglia che serve per creare il descrittore di due keypoint con scala e orientamento
differenti.
36
Stato dell'arte
Fig. 1.23: Esempio del posizionamento e
orientamento di due differenti keypoint.
Quindi ogni keypoint sarà descritto da locazione, orientamento e un vettore da 128 elementi
che definisce il gradiente locale.
Per un utilizzo come face recognition è necessario collezionare ed etichettare tutti i keypoint,
estratti dai volti campioni, in un database. É possibile associare a tale tecnica di estrazione di
feature un meccanismo di classificazione basato o su una semplice funzione di distanza
euclidea tra descrittori dei keypoint o da una algoritmo di machine learning [11][12][13].
I tre algoritmi di classificazione presi in considerazione sono AdaBoost, SVM e MLP. Mentre
AdaBoost è un algoritmo di riconoscimento binario gli altri due sono di tipo N-ario. Dunque
AdaBoost necessita di un tecnica che combini il funzionamento di più algoritmi, ognuno
specializzato sull'identificazione di uno degli N soggetti.
Di seguito sono riportati i risultati ottenuti dai differenti algoritmi di machine learning ricavati
applicando le differenti tecniche sull'ORL database.
Metodo
Fisher Face
AdaBoost SIFT
SVM SIFT
MPL SIFT
K=5
-96,3
---
Numero di immagini di apprendimento
k=6
k=7
k=8
-93,18
95,42
96,8
97,1
--95,8
97,4
92,2
96,7
98
k=9
97,8
-99,5
--
Tabella 1.2: Percentuali di corretta identificazione al variare del
numero di immagini usate per l'apprendimento.
Per quanto riguarda l'algoritmo AdaBoost, per poter eseguire un calcolo del tasso di
riconoscimento corretto si segue il seguente procedimento.
Si seleziona ad ogni passo un individuo da utilizzare come target, quindi si fa apprendere
37
Stato dell'arte
l'algoritmo al fine di riconoscere l'individuo target rispetto al resto degli individui del
database.
A questo punto ogni immagine presente nel database viene passata all'algoritmo ed ogni
singolo keypoint, estratto dall'immagine, viene classificato come appartenente o non
appartenente al soggetto. Se la maggioranza dei keypoint
viene classificata come
appartenente al soggetto si assegna al volto ignoto il corrispondente identificativo.
Una volta che si sono analizzate tutte le immagini del database si calcola il tasso di corretto
riconoscimento per quel soggetto. La procedura viene ripetuta per ogni soggetto del database.
Tutti i tassi per i singoli soggetti vengono mediati per ottenere un tasso unico.
Fig. 1.24: Istogramma che rappresenta il numero
di voti ricevuti dai diversi soggetti del database.
Nel caso di SVM e MLP invece l'analisi è semplificata poiché questi algoritmi sono in grado
di restituire la classe di appartenenza di un keypoint. Quindi dopo aver fatto apprendere
l'algoritmo di classificazione si esegue l'identificazione di tutti i volti del database. Per ogni
immagine vengono estratti i keypoint e vengono classificati. Si origina così un istogramma
che contiene un numero di valori pari al numero di soggetti presenti nel database. Il volto
incognito viene assegnato al soggetto che ha avuto la votazione maggiore nell'istogramma.
La formula per il calcolo del tasso di riconoscimento corretto è la seguente:
cr =
numero dei volti correttamente identificati
.
numero totale dei volti analizzati
Tutti i procedimenti proposti si attestano ad un buon livello di riconoscimento quando il
numero di volti campione è maggiore di 6. Tale comportamento è prevedibile poiché il
numero di keypoint appresi aumenta all'aumentare delle immagini campioni utilizzate. Se
38
Stato dell'arte
queste sono acquisite in contesti di illuminazione e posa differenti determinano una maggiore
espressività del database.
1.3.4 Approccio Ibrido
Chowdhury, Sing, Basu e Nasipuri [18] propongono un approccio ibrido per il riconoscimento
di volti basato sull'uso degli algoritmi:
•
generalized two-dimension fisher's linear discriminate (G-2FLD): per l'estrazione di
feature locali e globali da un'immagine che contiene un volto. Si tratta di
un'evoluzione dell'algoritmo fisher's linear discriminate;
•
principal component analysis (PCA): per la riduzione della dimensione dello spazio
delle feature;
•
support vector machine (SVM): per definire confini tra i differenti soggetti
appartenenti al database.
Lo schema di funzionamento generale dell'algoritmo è rappresentato nella figura seguente
(Fig. 1.25).
Fig. 1.25: Struttura grafica del funzionamento
dell'algoritmo di face recognition che prevede
fusione di feature locali e globali
39
Stato dell'arte
La proposta di questa tecnica è quella di fondere feature globali, estratte dall'immagine intera
del volto, a delle feature di tipo locale. Queste si ottengono suddividendo l'immagine
raffigurante un volto in N sotto immagini non sovrapponibili. Nello specifico si utilizza una
suddivisione dell'immagine in 4 aree.
Le 5 immagini così ottenute vengono elaborate per l'estrazione delle feature con l'uso del
metodo G-2FLD che massimizza, in maniera simultanea, la separabilità delle classi per ogni
riga e colonna. Per farlo utilizza la trasformazione lineare seguente:
Z=U T XV
dove X è la matrice dell'immagine di dimensione mxn. Mentre U e V sono due matrici di
proiezione di dimensioni, rispettivamente mxp (p ≤ m) e mxq (q ≤ n). Questo metodo ricerca
la direzione di proiezione ottima U e V così che il vettore di dimensione pxq garantisca la
massima separabilità delle classi.
A questo punto le feature così estratte, dall'immagine completa e dalle sue 4 parti, vengono
fuse in un unico vettore descritto dalla formula:
F =(Z 1, Z 2, Z 3, Z 4, Z )
dove Zn sono le feature delle 4 parti mentre Z sono le feature dell'immagine completa. La
dimensione del vettore così ottenuto è 5xpxq.
A questo punto il vettore delle feature viene rielaborato tramite l'uso del metodo PCA per
ridurre le dimensioni delle spazio delle feature. La prima operazione da fare è quella del
calcolo della matrice di covarianza con la formula:
1
E=
N
N
∑ ( F i − F )(F i−F )T ,
i=1
con:
1
F=
N
N
∑ F i.
i=1
Con N si indica il numero delle immagini di apprendimento.
Successivamente vengono calcolati gli autovalori e gli autovettori. Poiché la maggiore
informazione è contenuta dagli autovettori associati agli autovalori più grandi è possibile
eliminare una parte degli autovettori. In questo modo si determina una riduzione delle
dimensioni dello spazio delle feature ma si mantengono tutte le informazioni necessarie per
eseguire una corretta identificazione.
La matrice degli autovettori W=(W1,W2,...,Wr) con r<N è utilizzata per il calcolo del vettore
40
Stato dell'arte
delle feature ridotte, applicando la seguente formula:
R=W T F .
Ogni vettore viene impiegato per far apprendere l'algoritmo SVM che si occuperà di
determinare la corrispondenza di un volto incognito con volti appresi.
I risultati ottenuti da questo metodo sono riportati nella tabella seguente.
Tabella 1.3: Tabella che riporta il tasso medio di successo riferito
all'applicazione di diverse tecniche su ORL database
La metodologia usata per calcolare il tasso medio di corretta identificazione è la seguente.
Per ogni soggetto sono state prese in considerazione un numero d di immagini di
apprendimento scelte in maniera random tra le 10 per soggetto presenti nell'ORL database. Le
immagini scartate sono state utilizzate come immagini del test set. Per ridurre l'influenza
determinata dalla scelta del training e del test set è stata ripetuta la procedura per 20 volte.
Nella tabella è possibile confrontare il risultati ottenuti da questa tecnica con quelli delle
tecniche basate su metodologie similari.
Nel complesso questo approccio sembra ottenere delle prestazioni superiori alle altre
metodologie.
1.4 Algoritmi di Classificazione
Per comprendere quale è lo scopo degli algoritmi di classificazione partiamo dalla definizione
della parola “classificazione”:
41
Stato dell'arte
“Attività consistente nel disporre le entità di un dato dominio di conoscenze (persone di un
dato gruppo sociale, specie animali o vegetali, oggetti di un certo genere, concetti di un certo
settore disciplinare, nozioni utilizzate per certi fini, ...) in opportuni contenitori di conoscenze
tra i quali si stabiliscono dei collegamenti riguardanti una o anche più relazioni. Per i
contenitori vengono usati vari termini: classi, sezioni, categorie, specie …”.
Dalla definizione è immediato comprendere che lo scopo di un algoritmo di classificazione
non è altro che generare in maniera automatica l’assegnazione di un oggetto ad una
determinata classe.
In pratica stiamo parlando di tecniche per il riconoscimento automatico di un oggetto.
Per fare questo però gli algoritmi di classificazione necessitano di una fase di apprendimento
nella quale vengono forniti dei campioni appartenenti alle differenti classi. Per tale motivo
questo approccio è definito supervised cioè supervisionato.
Esiste un altro approccio che è definito unsupervised che, come dice il termine stesso, non è
supervisionato, quindi la suddivisione in classi viene fatta attraverso l’aggregazione di oggetti.
Una volta a disposizione tutte le informazioni relative ad uno specifico oggetto, queste
vengono rielaborate estraendo solamente quelle utili per la distinzione tra differenti classi. Le
caratteristiche che descrivono un oggetto vengono chiamate feature e devono essere scelte in
maniera accurata.
Nella classificazione supervisionata, esistono differenti approcci:
•
statistici;
•
con funzioni di discriminazione lineare;
•
non metrici.
Questi sono solamente alcuni tipi di approcci.
Nell’ambito degli approcci di tipo statistico molto importante è la teoria bayesiana. Ha
l’obiettivo di confrontare quantitativamente diverse decisioni di classificazione utilizzando le
probabilità ed i costi che le accompagnano. È fondamentale che:
•
la questione della decisione sia posta in termini probabilistici;
•
siano noti i valori di tutte le probabilità rilevanti per il problema.
Gli approcci con funzioni di discriminazione lineare, come è evidente, utilizzano funzioni di
tipo lineare per distinguere due differenti gruppi. Vengono utilizzati i dati del training set, cioè
dati di apprendimento, per calcolare i parametri e minimizzare il training error, l'errore di
apprendimento.
42
Stato dell'arte
Le tecniche non metriche per la classificazione sono introdotte per consentire l’utilizzo di
training set che non contengono esclusivamente dati di tipo numerico. In questi training set
sono contenute anche delle feature di tipo nominale.
1.4.1 Algoritmo di classificazione AdaBoost
L’algoritmo “AdaBoost” è una procedura di raffinazione dei dati di apprendimento finalizzata
all’aumento dell’accuratezza di classificazione di un dato algoritmo, anche se non è
propriamente di classificazione[1].
Questa tecnica di raffinazione è una diretta evoluzione del processo di “boosting”. Per capire
il funzionamento dell’algoritmo “AdaBoost”, adaptative boosting, è conveniente partire dalla
spiegazione dell'attività del normale processo di “boosting”.
Le condizioni che vengono considerate per spiegare il
funzionamento sono quelle ideali:
•
Classificazione di tipo binaria, solamente due
classi da distinguere;
•
Architettura di classificazione tri-componente.
Partiamo da un dataset D (Fig. 1.26) la cui cardinalità
è data dal valore “n”. Estraendo da questo dataset un
numero n1<n di elementi si produce il dataset D1 (Fig. Fig. 1.26: Dataset di
apprendimento D.
1.27). Il dataset D1 viene utilizzato per
l’apprendimento del classificatore C1.
A questo punto si passa alla creazione di un ulteriore dataset D2 (Fig. 1.27) sempre
sottomultiplo del dataset D. Viene creato estraendo da D una metà di elementi correttamente
classificati dal classificatore C1 e un’altra metà erroneamente classificati dal medesimo
classificatore. A questo punto il dataset ottenuto viene utilizzato per condurre l’addestramento
del classificatore C2.
43
Stato dell'arte
Fig. 1.27: Dataset ottenuti da D, rispettivamente D1, D2 e D3.
Infine viene creato un terzo dataset (D3) in cui sono contenuti tutti gli elementi per cui il
classificatore C1 e il C2 sono discordanti. Questo dataset viene utilizzato per l’addestramento
del classificatore C3.
Una volta conclusa la fase di addestramento dei tre classificatori, la regola che si segue per
determinare l’appartenenza di un elemento ad una classe è quella in cui sia il classificatore C1
che il C2 danno la stessa risposta. Nel caso contrario si considera l’assegnazione del
classificatore C3.
Si ottiene in questo modo un classificatore unico (Fig.
1.28) che consente di distinguere in maniera più
precisa i differenti elementi di una classe.
Le variazioni che apporta l’adaptative boosting al
normale processo di boosting sono:
•
Uso di una procedura iterativa che aggiunge
classificatori fino a ottenere una determina
Fig. 1.28: Classificatore finale.
accuratezza di classificazione;
•
Assegnazione di un peso ad ogni pattern di training che indica la probabilità di essere
usato per l’addestramento di un classificatore. Tale peso cambia ad ogni iterazione
dell’algoritmo, diminuendo se il pattern è classificato correttamente, aumentando nel
caso contrario.
In pratica il processo dell’adptative boosting fa sì che venga compiuto il maggior sforzo per la
l’addestramento su quei pattern più difficili da classificare.
44
Stato dell'arte
Algoritmo AdaBoost
1
begin initialize D = {x1,y1, x2,y2,..., xn,yn},kmax,W1(i)=1/n, i =1,...,n
2
k←0
3
do k ← k +1
4
Train weak learner Ck using D sampled according to distribution Wk(i)
5
Ek ← Training error of Ck measured on D using Wk(i)
6
αk ← ln[(1 − Ek)/Ek]
7
Wk+1(i) ←
8
until k = kmax
9
return Ck and αk for k =1 to kmax (ensemble of classifiers with weights)
10
end
Dove hk(xi) rappresenta la classe assegnata al pattern xi.
L’algoritmo descritto in precedenza è una generalizzazione del funzionamento di “AdaBoost”.
Un parametro molto importate da calcolare è l’errore di training di ogni singolo classificatore.
Questo può essere reso arbitrariamente piccolo aumentando il valore di kmax .Risulta quindi
che la formula che lo descrive è:
valida solo per alcuni valori Gk .Il suo valore denota un peso che influisce sull’errore di
apprendimento del singolo classificatore.
Da questa si può ricavare la formula che descrive l’errore complessivo del classificatore:
45
Stato dell'arte
Fig. 1.29: Andamento dell'errore all'aumentare delle iterazioni.
Nel grafico (Fig. 1.29) viene riportato l’andamento dell’errore di training del classificatore
(ensemble training error) al variare del parametro kmax. Inoltre si evidenzia come
all’aumentare del valore kmax l’errore di addestramento di ogni componente successivo è
generalmente più grande del componente precedente (nella Fig. 1.29 è l’andamento riportato
in grigio).
Si registra anche la tendenza dell’errore di test complessivo dell’algoritmo all’aumentare di
kmax che nel grafico (Fig. 1.1) è in colore rosso [23].
1.4.2 Algoritmo di classificazione SVM
Le support vector machines sono state sviluppate negli AT&T Bell Laboratories da Vapnik e
colleghi (Boser et al., 1992, Guyon et al., 1993, Cortes and Vapnik, 1995, Schölkopf et al.,
1995, Vapnik et al., 1997) [24][25].
Alcuni ambiti in cui si utilizzano le SVM sono:
•
l'OCR (optical character recognition, dove in breve tempo le SVM divennero
competitive con i migliori metodi per problemi di OCR);
•
il riconoscimento di oggetti (Blanz et al., 1996);
•
l'identificazione di oratori (Schmidt, 1996);
•
l'identificazione di volti in immagini (Osuna, et al. 1997);
46
Stato dell'arte
•
la classificazione di testi (Joachims, 1997).
Si tratta di un algoritmo di classificazione di tipo binario che apprende i confini tra due
differenti classi. Per fare ciò gli elementi che fanno parte del training set vengono proiettati in
uno spazio multidimensionale e a questo punto si cerca un “iperpiano di separazione”.
Alcune proprietà generali delle SVM:
•
l'improbabile l'overfitting;
•
la capacità di gestire dati con molte caratteristiche descrittive;
•
il compattamento dell'informazione contenuta nel data set in input.
Nella fase di apprendimento l’algoritmo “SVM” genera un insieme di funzioni di soglia:
dove ∆ è un insieme di parametri reali preclassificati nella forma:
L’obiettivo e quello di trovare la funzione fλ* che minimizzi “l’errore teorico” rappresentato
dalla formula:
dove con P(x,y) si indica la distribuzione di probabilità da cui sono stati presi i parametri.
L’errore teorico rappresenta una misura di quanto sia buona un’ipotesi nel predire la classe yi
di un punto x.
Poiché la distribuzione di probabilità P(x,y) non è nota, non è possibile minimizzare tale
errore. Si conosce però un campione di tale probabilità, quella composta dal training set. Si
introduce dunque “l’errore empirico” che rappresenta un’approssimazione dell’errore teorico.
La formula che lo descrive è:
Però non è sufficiente prendere in considerazione l’errore empirico, è necessario introdurre
anche il concetto di “dimensione VC” dello spazio di ipotesi H. Questa misura è un numero
naturale che corrisponde al più grande numero di punti che possono essere separati in tutti i
modi possibili dall’insieme di funzioni fλ. È un indice della complessità dell’insieme H.
La teoria della convergenza uniforme in probabilità, sviluppata da Vapnik e Chervonenkis,
fornisce anche un limite alla deviazione dell’errore empirico dall’errore teorico espresso dalla
disuguaglianza:
47
Stato dell'arte
dove h è la dimensione VC di fλ.
Dunque per poter minimizzare l’errore teorico è necessario minimizzare contemporaneamente
l’errore empirico e il rapporto tra la dimensione VC e il numero di punti (h/l).
L’algoritmo “SVM” risolve efficacemente questo problema.
I dati di training set che possono essere usati sono di due tipi:
•
linearmente separabili;
•
non linearmente separabili.
Partiamo dal caso più semplice, cioè che i dati siano linearmente separabili. In questo caso
non ci sono problemi nell’individuazione di un iperpiano di separazione, l’obiettivo diventa
quello di trovare il migliore.
Per fare questo è necessario minimizzare la norma, ciò comporta la massimizzazione del
margine tra iperpiano di separazione e training set.
Nella figura seguente (Fig. 1.30) si vede come entrambi gli iperpiani di separazione siano
accettabili. Solamente quello nella figura di destra risulta essere l’iperpiano ottimo poiché è
quello che massimizza il margine, cioè la distanza tra se stesso e i punti più vicini
dell’insieme di dati.
La massimizzazione del margine determina una maggiore generalizzazione e quindi minore
overfitting.
Fig. 1.30: Due differenti iperpiani di separazione nel caso di dati linearmente
separabili.
48
Stato dell'arte
Si può descrivere il classificatore nel caso di dati linearmente separabili con la formula:
Si ha che tutti i punti xi a cui corrisponde un moltiplicatore λi strettamente maggiore di zero
vengono detti support vector e si trovano su uno dei due iperpiani H1, H2 riportati nella figura
seguente (Fig. 1.31).
I support vector sono dei punti critici del training set, rappresentano tutti quei valori che sono
i più vicini all’iperpiano di separazione. L’eliminazione di tutti gli altri punti di training set,
ad eccezione di quelli critici, non determina cambiamenti nell’algoritmo di classificazione,
facendo ottenere lo stesso risultato.
Fig. 1.31: Iperpiano di separazione nel caso di
dati linearmente non separabili.
L’eventualità che i dati del training set non siano linearmente separabili (Fig. 1.31) è
determinata dalla presenza di punti in posizione anomala rispetto agli altri della stessa classe.
Si inserisce quindi una costante di scarto ξ , tanto maggiore quanto più lontani sono i punti
anomali,introducendo così una certa tolleranza agli errori. Questo fa sì che si possa utilizzare
un classificatore di tipo lineare come nell'esempio precedente.
Anche in questo caso possiamo scrivere la formula che riassume il classificatore:
49
Stato dell'arte
E' la medesima del caso di dati linearmente separabili. L’introduzione della costante di scarto
non ha conseguenze sulla formula, il suo effetto è quello di determinare un limite superiore C
per i moltiplicatori.
Vi sono alcuni casi in cui non è possibile separare i due differenti gruppi in maniera lineare
(Fig. 1.32), si introducono quindi dei classificatori non lineari.
Fig. 1.32: Caso di dati non linearmente separabili che richiedono una funzione di
mapping.
Un classificatore non lineare si ottiene con l’introduzione di una funzione di mapping Φ.
Questa ci permette di passare da una condizione di non separabilità ad una condizione di
separabilità lineare attraverso la mappatura dei dati originari in un altro spazio.
Purtroppo tali funzioni di mapping possono originare problemi di calcolo poiché per creare la
separazione dei dati si aumenta la dimensione dello spazio fino a comportare un aumento
anche dei vettori su cui lavora l’algoritmo per l’apprendimento.
Per agevolare le condizioni di calcolo vengono introdotte le “funzioni di kernel” che hanno lo
scopo di restituire il valore del prodotto intero fra le immagini di due argomenti.
Ciò era stato introdotto appositamente per creare il mapping in un differente spazio in modo
da ottenere la condizione di separazione lineare dei dati.
La formula che descrive una generica funzione dei kernel è:
A questo punto è possibile riscrivere la formula che rappresenta il classificatore nel seguente
modo:
50
Stato dell'arte
Si è riuscito a ottenere nuovamente un classificatore lineare a partire da dati che non
permettevano il suo utilizzo.
Per assolvere a differenti compiti esistono diverse formule per la funzione di kernel. È
necessario, in base al problema che si deve affrontare, scegliere quella più appropriata. Una
scelta errata porterebbe comunque alla creazione di un classificatore perfetto ma diminuirebbe
la capacità di generalizzazione e di conseguenza lo renderebbe incapace di lavorare in
maniera efficiente su nuovi dati.
Le più diffuse funzioni di kernel sono:
•
funzione di tipo lineare:
•
funzione di tipo polinomiale:
•
funzione di Radial Basis:
•
funzione di Gaussian Radial Basis:
•
funzione Multi-Layer Perceptron:
Dunque gli elementi base per il corretto funzionamento di un algoritmo “SVM” sono un
modulo di apprendimento e una funzione specifica per il problema che si deve andare ad
affrontare.
51
Sviluppo del Software
Capitolo2 - Sviluppo del Software
Dopo aver descritto nei precedenti capitoli il funzionamento teorico degli algoritmi, in questa
sezione ne verrà presentata l'applicazione concreta per realizzare un sistema di ricerca e
identificazione di volti. Si porrà particolare attenzione alle tecniche adottate e si motiveranno
le scelte fatte.
2.1 Ambiente Sviluppo
Il software realizzato ha lo scopo di analizzare un flusso video, indipendentemente che esso
sia acquisito da un file precedentemente salvato su un archivio di massa o direttamente da una
webcam. Il sistema hardware utilizzato è quindi un normalissimo personal computer dotato di
una webcam.
I flussi video solitamente hanno un frame rate di circa 25 fotogrammi per secondo, ovvero in
un secondo vengono visualizzate 25 immagini in successione. Scendendo al di sotto di tale
limite l'occhio umano incomincia a percepire un flusso video in maniera non fluida.
Se volessimo analizzare tutti i frame in tempo reale il sistema di elaborazione dovrebbe essere
in grado di analizzare un frame ogni 40 millisecondi.
La complessità di analizzare un frame è influenzata principalmente dalla sua risoluzione. In
questo caso si prende in considerazione una risoluzione di 640x480 pixel. É evidente che se
avessimo considerato una risoluzione di 320x240 pixel la complessità sarebbe scesa di un
quarto.
Per implementare il software di identificazione e riconoscimento dei volti si è deciso di
utilizzare come linguaggio di programmazione il C++ in ambiente Windows, e come editor
Microsoft Visual C++ Express in quanto completamente gratuito.
La decisione di utilizzare C++ è stata dettata principalmente da due motivazioni:
•
il software sviluppato in tale linguaggio garantisce una capacità computazionale
maggiore rispetto ad altri linguaggi come Java e Python,
•
esistono delle librerie, OpenCV [26], molto complete e affidabili che contengono
implementate un insieme di funzioni destinate all'elaborazione e all'acquisizione di
52
Sviluppo del Software
immagini, oltre ad una vasta gamma di algoritmi di machine learning.
Inoltre OpenCV può essere integrato con QT per migliorare le funzionalità dell'interfaccia
grafica.
La scelta del C++ come linguaggio di programmazione penalizza sicuramente la portabilità
del software. Comunque nella sua stesura si è cercato di utilizzare il più possibile istruzioni
ANSI che quindi dovrebbero garantirne la portabilità su altri sistemi operativi. Non è stato
possibile rispettare l'utilizzo di istruzioni ANSI solamente nel caso dell'uso dei thread poiché
essi dipendono da librerie specifiche del sistema operativo.
2.2 Realizzazione Sistema
Il software realizzato si basa sull'applicazione in successione di differenti tecniche atte a
diminuire ad ogni passo la complessità della ricerca ed dell'identificazione di un volto.
Le operazioni che devono essere eseguite in successione sono le seguenti:
1. acquisizione di un flusso video;
2. estrazione del frame dal flusso video;
3. ricerca di volti presenti nel video;
4. estrazione della sotto area contenente un volto;
5. identificazione del volto contenuto nella sotto area.
Le operazioni al punto 1 e al punto 2 riguardano l'acquisizione del flusso video e la
scomposizione in frame. La libreria OpenCV contiene al suo interno vari codec per la
decodifica di video e immagini già memorizzate in sistemi di archiviazione di massa. Inoltre
integra le api DiretShow che gestiscono l'acquisizione di video direttamente da webcam in
ambienti Windows.
L'operazione al punto 3 si riferisce alla procedura di face detection. Come abbiamo visto nel
capitolo precedente, gli approcci sono diversi, sicuramente uno dei più comuni è l'algoritmo
Viola-Jones.
Nel nostro caso si è decido di procedere con una combinazione di due differenti tecniche che
vengono applicate in cascata. Prima si utilizza la tecnica di skin-segmentation, per ridurre le
aree di ricerca del volto solamente a quelle contenenti pixel che possono essere classificati
come pelle. Poi si applica l'algoritmo Viola-Jones addestrato per cercare singolarmente le aree
contenenti gli occhi e la bocca.
53
Sviluppo del Software
L'operazione al punto 4 consente, a partire dalle informazioni delle posizioni di occhi e bocca,
di determinare il riquadro che meglio contiene il volto. Questa procedura è fondamentale per
ridurre al massimo la presenza di elementi dello sfondo all'interno dell'immagine su cui
compiere la procedura di face recognition.
Infine l'ultima operazione è quella del face recognition che si occupa di confrontare il volto
estratto con quelli campione precedentemente selezionati per costituire il database.
A conclusione di tutto il processo, il software riproduce a video il frame, riquadrando i volti
dei soggetti. Se il volto appartiene al database viene poi etichettato con il nome
corrispondente, altrimenti viene etichettato come sconosciuto.
L'interfaccia grafica è minimale ed è gestita direttamente dalla libreria OpenCV. Per poterla
utilizzare con le piene funzionalità è necessario ricompilare le librerie OpenCV includendo le
dipendenze delle librerie QT.
2.2.1 Procedura di face detection
Come già presentato in precedenza, la procedura di estrazione del volto da un frame video si
compone dell'uso in cascata di due tecniche ben distinte.
La prima è la skin-segmentation che consiste nel classificare ogni singolo pixel per produrre
tutte le sotto aree contenenti aggregazioni consistenti di pixel della classe pelle. Tale
procedura, una volta estratto il frame da analizzare, può essere scomposta nelle seguenti fasi:
•
riduzione in scala del frame;
•
analisi del frame scalato per produrre la skin-map;
•
erosione della skin-map per eliminare pixel isolati;
•
individuazione di tutte le sotto aree che contengono una aggregazione di pixel;
•
eliminazione di tutte le sotto aree che, per la loro dimensione ridotta, non potrebbero
contenere un volto.
La riduzione in scala di un frame non comporta significative perdite di informazioni e viene
utilizzata solamente nella fase di skin-segmentation. Lo scopo è quello di diminuire il più
possibile il peso computazionale della scansione dei pixel contenuti nel frame. Infatti scalando
di un fattore 4 l'altezza e la larghezza del frame originario si ottiene un'immagine di 160x120
pixel che contiene una buona approssimazione dell'immagine originaria. La diminuzione di
54
Sviluppo del Software
pixel in tal caso è sensibile, infatti si tratta di analizzare un sedicesimo dei pixel originari.
La riduzione in scala è conveniente poiché sia l'operazione di erosione che quella di
identificazione delle sotto aree richiedono una scansione completa della skin-map prodotta.
L'analisi del frame scalato consiste nel verificare pixel per pixel il frame e produrre
un'immagine di output a due livelli, bianco e nero, dove con il bianco si indica il pixel
classificato come colore della pelle e con il colore nero un pixel non appartenente a tale
classe. Per eseguire la classificazione ci si limita a verificare se i pixel cadono all'interno di
soglie ben precise.
In questo caso il software è implementato per utilizzare lo spazio di colori nativo della
sorgente video, cioè RGB, e la conversione lineare in YCrCb. In realtà RGB viene
normalizzato al fine di ridurre l'influenza della luminosità. Nel precedente capitolo sono stati
definiti i valori soglia e le formule di conversione per gli spazi di colore.
Inoltre è possibile utilizzare una combinazione dell'estrazione nei due spazi di colore per
definire con più accuratezza i limiti tra pelle e non pelle. In tal caso si definisce che un pixel
appartiene alla classe pelle se viene classificato come tale con uno dei due metodi.
Nella tabella seguente sono riportate le percentuali di colori che ricadono all'interno della
classe pelle per le due tecniche e la loro combinazione. I valori sono calcolati considerando
un'immagine a colori RGB con profondità di 8 bit per canale.
Numero Colori
CrCb
RGB normalizato
CrCb or RGB
1854671
855012
2029019
Percentuale rispetto a
colori rappresentabili con
3 canali a 8 bit
11,05%
5,10%
12,09%
Tabella 2.1: Cardinalità degli insiemi di colori che
appartengono alla classe pelle in base alle soglie riferite a
due differenti spazi di colore.
Come si può vedere dalla tabella, la tecnica che fa uso dello spazio di colore RGB
normalizzato individua come appartenente alla classe pelle meno della metà delle tonalità che
sono selezionate con lo spazio di colore YCrCb.
Dunque la scelta di uno spazio di colore piuttosto che un altro è determinante per il
funzionamento del sistema. Se le soglie definite nei due spazi di colore sono state ottenute
analizzando un campione abbastanza espressivo è molto strano che tra le due tecniche ci sia
una differenza così elevata.
55
Sviluppo del Software
Utilizzando dunque lo spazio di colori YCrCb ci troveremmo nella situazione di avere una
fase di classificazione molto più permissiva rispetto all'utilizzo di RGB normalizzato.
Potenzialmente un numero maggiore di oggetti con colorazioni ritenute simili alla pelle
potrebbero essere erroneamente classificati.
Una volta determinata la skin-map, si deve raffinarla in maniera tale da escludere tutti quei
pixel isolati che rappresentano rumore del background. Per fare questo si è scelto di utilizzare
una delle due operazioni fondamentali della Morphological Image Processing: la tecnica
dell'erosione.
Prevede la definizione di una matrice kernel che verrà applicata a quella che rappresenta
l'immagine binaria, così che ogni aggregazione di pixel di valore 1 con dimensioni inferiori
alla matrice di kernel viene eliminata. Al contempo, le aggregazioni di pixel di dimensioni
maggiori subiranno solamente un'eliminazione delle aree lungo il bordo dell'aggregazione.
Nell'immagine seguente (Fig. 2.1) è possibile vedere graficamente come funziona l'operazione
di erosione quando si applica ad un'immagine di input un kernel di dimensioni 3x3 contenente
tutti 1.
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
←
kernel
1 1 1
1 1 1
1 1 1
=
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
1
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Fig. 2.1: Immagine che descrive come funziona il processo di erosione.
Nel caso specifico, poiché si lavora con un frame di dimensioni 160x120, che è scalato di un
fattore 4 rispetto al frame originale, si utilizza un kernel di dimensioni 3x3. Questa è la
dimensione massima poiché altrimenti si perderebbe troppo contenuto informativo. Sarebbe
come applicare un kernel di dimensioni 12x12 alla skin-map prodotta con la risoluzione
originaria.
E' riportato di seguito (Fig. 2.2) un esempio di skin-map prima e dopo il processo di erosione.
É possibile vedere come le aree con aggregazione di pixel di una certa entità siano state
conservate.
56
Sviluppo del Software
Fig. 2.2: (a) Skin-map ottenuta dalla procedura di
classificazione dei pixel, (b) skin-map ottenuta dopo il
processo di erosione con kernel 3x3
Il passo successivo alla produzione della skin-map è quello della creazione di riquadri che
contengano le aree bianche. Per fare questo è stata sviluppata una procedura che scansiona
tutti i pixel e genera dei rettangoli che inglobano il volto.
Una volta determinati tutti i riquadri che potrebbero contenere un volto, vengono eliminati
quelli di dimensioni ridotte. Per la grandezza originale del frame, la dimensione minima che si
ammette è quella di 40x40 pixel. Dunque nel caso del frame scalato di un fattore 4 la
dimensione minima del rettangolo è quella di 10 x 10.
Ogni rettangolo sarà rappresentato dalla coordinata dell'angolo in alto a destra, dall'altezza e
dalla larghezza, r(x,y,w,h). A questo punto tutti i rettangoli saranno riportati ad una dimensione
compatibile a quella del frame originale semplicemente moltiplicando per il fattore di scala,
ad esempio r'(4x,4y,4w,4h).
Nella figura seguente (Fig. 2.3) i riquadri di colore rosso sono quelli selezionati come
potenziali volti. Nel frame sono presenti due aree che contengono dei pixel classificati come
pelle. Una contiene effettivamente un volto mentre l'altra è un quadro con una colorazione
soltanto molto simile.
57
Sviluppo del Software
Fig. 2.3: Immagine di un frame dove in rosso sono
riquadrate le aree identificate con la procedura di skinsegmentation. Le aree in blu sono le sotto aree di ricerca
per occhio sinistro e bocca. I riquadri verdi indicano gli
elementi individuati con algoritmo Viola-Jones.
La scelta di usare la skin-segmentation per ridurre le dimensioni delle aree in cui cercare i
volti è motivata dall'estrema semplicità di realizzazione di tale tecnica. Inoltre la possibilità di
lavorare in scala consente, anche in condizioni di frame di notevoli dimensioni, di ridurre
l'impatto di questa operazione sul costo complessivo dell'intero sistema.
Una volta ottenuti i riquadri che potenzialmente contengono dei volti è necessario verificare la
presenza degli elementi caratteristici. In questo caso si è scelto di ricercare la presenza di
occhio destro, occhio sinistro e bocca.
Si potrebbe estendere la ricerca aggiungendo altri elementi come naso e orecchie, ma la
presenza di questi 3 dettagli è sufficiente per calcolare l'area da estrarre.
Per cercare gli elementi del volto ci si affida all'utilizzo dell'algoritmo Viola-Jones. Nella sua
formulazione originale è pensato per rintracciare in maniera efficiente i volti presenti in
un'immagine e nel nostro caso, addestrandolo in maniera appropriata, è possibile utilizzarlo
per ricercare gli elementi caratteristici.
Tali addestramenti dell'algoritmo sono presenti a corredo delle librerie, ovviamente in caso di
esigenze differenti da quelle già affrontate è sempre possibile generare il proprio
addestramento.
A corredo delle librerie sono presenti più addestramenti che riguardano la localizzazione degli
58
Sviluppo del Software
occhi. Tra questi è stato scelto quello proposto da Shiqi Yu [27] poiché in fase di utilizzo si è
dimostrato computazionalmente meno costoso. Inoltre questo apprendimento è stato
sviluppato in maniera molto accurata consentendo di estrarre una maggior quantità di
informazioni rispetto alla sola posizione dell'occhio.
Shiqi Yu ha verificato che i precedenti apprendimenti già
presenti a corredo delle librerie avevano dei problemi di
errata classificazione poiché riconoscevano come occhi le
sopracciglia, inoltre il loro funzionamento in caso di scarsa
illuminazione decadeva.
La conoscenza del riquadro che contiene l'occhio di un
individuo ci consente di ricavare altre informazioni come la
posizione della pupilla e la teorica distanza tra i due occhi.
É evidente che il suo funzionamento è ottimale quando il
volto è perfettamente frontale, mentre quando è ruotato è
possibile che le informazioni che si possono ricavare siano
affette da errori.
Nella figura a fianco (Fig. 2.4) è rappresentato un volto
Fig. 2.4: Metodologia di
umano e sono riportate le specifiche con cui sono estratti gli Shiqi Yu [27] per
occhi. Possiamo vedere che l'altezza o la larghezza dell'area l'estrazione delle aree
oculari per apprendimento
dell'occhio sono strettamente legate alla distanza tra i due
occhi. Possiamo dunque ricavare le formule per il calcolo della posizione della pupilla e per la
distanza tra gli occhi:
width height
=
0,6
0,6
1
1
EyeCenterX = DistEye∗0,6= ∗width
2
2
2
2
EyeCenterY = ∗DistEye∗0,6= ∗width
3
3
DistEye=
dove con width e height si intendono larghezza e altezza del rettangolo che contiene l'occhio.
Queste formule sono alla base del calcolo della sotto area di ricerca per l'occhio sinistro
partendo dalla conoscenza dell'occhio destro e viceversa. Infatti data la posizione di un occhio
possiamo calcolare in maniera teorica quella dell'altro e definire un'area di ricerca intorno a
questo punto. Le formule per calcolare la posizione teorica della pupilla dell'altro occhio sono
59
Sviluppo del Software
le seguenti:
x=
+ DistEye
{ EyeCenterX
EyeCenterX − DistEye
se conosco occhio destro
se conosco occhio sinistro
y=EyeCenterY
Inoltre le formule per il calcolo della sotto area di ricerca per l'occhio non ancora trovato sono
le seguenti:
xArea=
{ x−DistEye∗0,65
x−DistEye∗(1,5−0,65)
se conosco occhio destro
se conosco occhio sinistro
yArea= y−DistEye∗0,7
wArea=1,5∗DistEye
hArea=1,2∗DistEye
La zona di ricerca per il secondo occhio da trovare è rappresentata da un rettangolo con
coordinata dell'angolo in alto a destra xArea e yArea e le misure di altezza e larghezza
rispettivamente hArea e wArea (r(xArea, yArea, wArea, hArea)).
Conoscendo le posizione di uno o di entrambi gli occhi è possibile poi calcolare l'area di
ricerca della bocca e la posizione teorica del suo centro.
Le formule per il calcolo teorico sono:
x =CenterRightEyeX − DistEye∗0,5
CenterRightEyeY +CenterLeftEyeY
y=
+1,2∗DistEye
2
Se si conosce la posizione di entrambe le pupille si ricalcola DistEye utilizzando la formula
della distanza euclidea. A questo punto è possibile calcolare la sotto area di ricerca della
bocca. Le formule sono:
wArea= DistEye∗1,6
hArea= DistEye∗1,2
1
xArea= x− wArea
2
1
yArea= y− hArea
2
Tutte le formule precedenti sono ricavate a partire da una teorica struttura del volto descritta
nel lavoro di Vukadinovic e Pantic [28], dove la posizione della bocca è messa in relazione
60
Sviluppo del Software
con la distanza tra gli occhi.
Le sotto aree di ricerca, visibili in blu nella figura del frame estratto dal flusso video
precedente (Fig. 2.3), consentono di ricercare la bocca e l'occhio mancante anche in presenza
di piccoli errori di posizionamento delle componenti conosciute.
Lo schema di esecuzione per la ricerca delle componenti del volto è riportato nell'immagine
seguente (Fig. 2.5). Si ritiene sufficiente la presenza di un occhio per poter passare allo step
successivo dell'identificazione del volto. Le aree che non contengono nessun elemento
vengono rigettate.
Una volta conosciute le posizioni reali o teoriche degli elementi di un volto si passa al calcolo
dell'area da estrarre. Per fare questo è necessario calcolare il rettangolo che seleziona in
maniera migliore il volto.
Le formule utilizzate sono le seguenti:
x =CenterRightEyeX −(0.3+0.333)∗DistEye
(CenterRightEyeY −CenterLeftEyeY )
y=
−(0.4+0.333)∗DistEye
2
w= DistEye+2∗(0.3+0.333)∗DistEye
1
h=CenterMouthY − y+ ∗DisEye
2
Dove il rettangolo che rappresenta l'area del volto è definito da r(x,y,w,h).
Come si può notare dalle formule per il calcolo dell'area che racchiude il volto, in posizione
frontale ci si basa sulla conoscenza della distanza tra gli occhi. Se per qualche motivo tale
distanza non fosse corretta si rischierebbe di racchiudere il volto in un rettangolo di
dimensioni o troppo piccole o troppo grandi.
L'apprendimento su cui è basata l'individuazione degli occhi prevede una finestra di ricerca di
dimensione 20x20 pixel. Dunque possiamo in via teorica calcolare la dimensione minima
dell'area che contiene il volto. Dai calcoli si ottiene che la minima altezza è di 81 pixel mentre
la minima larghezza è di 75 pixel. Questo formato si ottiene se l'occhio destro è di dimensioni
20x20 pixel mentre gli altri elementi del volto vengono ricalcolati in maniera teorica.
Ma in realtà, poiché le posizioni dei differenti elementi possono variare, la dimensione del
volto potrebbe essere ancora inferiore.
61
Sviluppo del Software
Fig. 2.5: Schema di ricerca delle componenti fondamentali del volto. In verde le uscite
positive, in rosso le situazioni che generano un rigetto della sotto area.
62
Sviluppo del Software
La decisione di applicare in successione la tecnica di skin-segmentation e quella di ricerca
degli elementi con l'algoritmo Viola-Jones è motivata dalla volontà di utilizzare la maggior
parte delle informazioni di input possibili. Infatti le due tecniche sono complementari.
Da una parte l'algoritmo di skin-segmentation basa la sua ricerca sulla componente cromatica
dell'immagine, dall'altra l'algoritmo Viola-Jones basa la sua ricerca solamente sulla
componente di luminosità che si ottiene come combinazione pesata dei tre canali di colore
RGB.
La skin-segmentation costituisce un filtro che riduce sensibilmente le aree da investigare con
l'algoritmo Viola-Jones, il quale si trova così in una condizione di lavoro migliore.
Inoltre dopo aver rintracciato un occhio all'interno della sotto area del frame è possibile
calcolare delle sotto aree più precise e di minori dimensioni per la ricerca dell'altro occhio e
della bocca.
La riduzione, ad ogni step della sequenza di ricerca, dell'area da investigare con l'algoritmo
Viola-Jones riduce l'impatto di tale tecnica sul peso computazionale totale.
Altro impatto positivo è quello di inglobare nelle sotto-aree di ricerca, successivamente al
rintracciamento di uno dei due occhi, anche zone del frame che con la skin-segmentation
erano state precedentemente escluse. Potrebbe accadere infatti che un'area del volto, poco o
troppo illuminata, inizialmente non venga classificata come classe pelle e venga dunque
esclusa dalla ricerca. In un secondo momento però, se uno dei due occhi cade all'interno di
tale area gli elementi del volto verranno ricercati in sotto aree opportune, anche esterne alla
sotto area ottenuta con la skin-segmentation.
In alcuni casi però l'algoritmo Viola-Jones, usando gli apprendimenti prescelti per la ricerca
degli occhi, può commettere un errore di classificazione. Poiché è molto difficile discriminare
tra occhio destro e occhio sinistro si potrebbe verificare che erroneamente durante la ricerca
dell'occhio destro si individui e selezioni quello sinistro.
In tal caso l'unico modo per avere certezza di tale errore e correggerlo è quello di cercare la
bocca in due sotto aree del frame.
Per fare questo si considera l'occhio selezionato come destro. Se la ricerca della bocca nella
sotto area calcolata con tale presupposto non dà buon esito si ricalcola l'area di ricerca della
bocca assumendo che l'occhio selezionato sia invece sinistro.
63
Sviluppo del Software
Si possono così verificare due situazioni:
•
non viene identificata la bocca, quindi si attribuisce all'occhio l'etichetta di destro e si
calcola l'area che contiene il volto in base alla sua posizione;
•
viene identificata una bocca all'interno della sotto area, la classificazione dell'occhio
era errata. All'occhio viene così attribuita l'etichetta sinistro e usando le informazioni
della posizione della bocca si calcola l'area contenente il volto.
La strutturazione di una ricerca del volto così articolata consente l'introduzione di varianti per
la ricerca di altri elementi. L'utilizzo di un numero maggiore di dettagli potrebbe essere
motivato dalla necessità di più precisione nel definire il riquadro che lo contiene, oppure dalla
necessità di verificare la posa del volto o la presenza di elementi estranei come ad esempio gli
occhiali.
La struttura scelta è quella che garantisce la migliore efficienza per la ricerca di un volto
quando questo è in posizione frontale. Riesce ad riconoscerlo anche quando è ruotato di
profilo in maniera non eccessiva.
2.2.2 Procedura di Face Recognition
L'output della face detection è una sotto area del frame originario che contiene un volto in
posa prevalentemente frontale e un insieme di informazioni correlate come:
•
distanza tra gli occhi;
•
posizione della pupilla dei due occhi;
•
posizione della bocca.
Tutti questi dati ora possono essere presi in considerazione dall'algoritmo di identificazione
dei volti.
Si è scelta come metodologia la tecnica basata sulle Scale Invariant Features Trasform
(SIFT) appartenente all'algoritmo di apprendimento supervisionato Support Vector Machine
(SVM) [13]. L'analisi comparativa di diverse tecniche mostra la validità di questo approccio.
Il SIFT, come già presentato in precedenza, è una tecnica di estrazione di punti chiave
caratteristici di un'immagine.
Per poter utilizzare tale tecnica è necessario prima di tutto creare un database di volti da cui
estrarre le informazioni. Ne esistono molti, quello qui utilizzato è ORL database, composto da
64
Sviluppo del Software
40 soggetti ognuno dei quali è rappresentato da 10 immagini di volti catturate in condizioni di
posa e luminosità differenti.
A questo database è stato aggiunto il 41esimo soggetto inserendo 10 immagini del mio volto,
rappresentate nella figura seguente.
Fig. 2.6: Dieci immagini raffiguranti il mio volto inserite nel database.
É stato realizzato un software a se stante che serve per generare l'apprendimento
dell'algoritmo SVM. Si limita semplicemente ad acquisire ogni immagine del database
destinata all'apprendimento, estrarne i keypoint e addestrare l'algoritmo in maniera tale da
garantire la massima percentuale di riconoscimento.
L'algoritmo SVM è di tipo multi-classe cioè è in grado di apprendere e distinguere un numero
N di classi. I keypoint estratti da un'immagine vengono processati singolarmente e assegnati
ad un soggetto del database. Il soggetto a cui viene assegnato il maggior numero di keypoint è
quello raffigurato nel volto ignoto.
L'unico problema che mostra questo metodo è quello di non poter classificare un soggetto
come sconosciuto. Infatti, se ci si attiene strettamente ai passaggi descritti in precedenza, un
volto sconosciuto viene comunque classificato con quello a cui assomiglia maggiormente.
Per eliminare tale problema si è introdotta una soglia minima di punti che devono essere
assegnati al soggetto. Se il volto ignoto non supera tale soglia il soggetto viene ritenuto
sconosciuto.
Poiché il numero di keypoint estratti varia in base a posa e dimensione del volto, la soglia va
determinata in percentuale sul numero dei keypoint selezionati. Ponendo k un valore compreso
tra 0 e 1 e n il numero dei keypoint estratti dall'immagine analizzata, si ha che:
soglia=n∗k .
65
Sviluppo del Software
Ad esempio ponendo k=0.2 e n= 20 il valore di soglia sarà 4. Quindi se ad un volto ignoto
saranno assegnati un numero maggiore o uguale al valore di soglia dei keypoint, esso sarà
etichettato con il soggetto corrispondente nel database.
Il valore k va deciso in base alla sensibilità che si vuole avere. Un valore alto garantirà una
maggiore certezza nell'identificazione del volto con uno di quelli del database, poiché per
realizzare ciò è richiesto un maggior numero di corrispondenze. Al contempo però, siccome la
probabilità di soddisfare tutte le corrispondenze necessarie è minore, si può verificare più
frequentemente che il volto venga etichettato come sconosciuto.
Inoltre, si attribuisce al volto ignoto l'etichetta sconosciuto anche nel caso in cui a due soggetti
viene assegnato lo stesso numero di keypoint.
Possiamo schematizzare i passaggi nel seguente modo:
•
conversione dell'area contenente il volto in scala di grigi;
•
cambiamento di scala dell'area contenente il volto;
•
estrazione dei keypoint;
•
analisi di tutti i keipoint per la creazione di un istogramma;
•
identificazione del soggetto più votato;
•
verifica se un altro soggetto ha ottenuto la stessa votazione;
•
verifica se si è superata la soglia minima di keypoint;
•
assegnazione dell'etichetta sconosciuto o del nome del soggetto.
Il passaggio del cambiamento di scala viene attuato quando la dimensione dell'area contenente
il volto ignoto è maggiore della dimensione delle immagini di apprendimento. Questo
passaggio ha lo scopo di ottenere dal volto un numero di keypoint il più simile possibile al
numero che si ottiene dai volti del database.
Per ottimizzare la procedura di analisi dei keypoint, questa è stata strutturata in maniera tale
da funzionare in parallelo. Si può pertanto definire il numero dei thread che si occupano
dell'analisi già in fase di avvio. Questo parametro consente di ottimizzare la fase di face
recognition nel sistema hardware su cui viene eseguito.
Ogni keypoint è rappresentato da un vettore di 128 elementi che ne descrive le caratteristiche.
Nella fase di identificazione è sufficiente utilizzare tale vettore, che prende il nome di
descrittore, per verificare la corrispondenza tra keypoint. Altra informazione invece che
abbiamo a disposizione, cioè la locazione del keypoint all'interno dell'area del volto, viene
completamente trascurata.
66
Sviluppo del Software
Opzionalmente il sistema può funzionare assegnando un punteggio maggiore ai keypoint
localizzati in sotto aree limitrofe agli occhi e alla bocca. Dunque è sufficiente attribuire il
punteggio 1.5 a questi keypoint per renderli predominanti.
Gli altri keypoint manterranno l'assegnazione del punteggio
base, ovvero 1.
Un esempio delle sotto aree che hanno un maggiore peso in
fase di decisione è rappresentato nella figura a lato (Fig. 2.7).
Le aree che riquadrano gli occhi e la bocca hanno
rispettivamente le dimensioni di 74x32 e 50x42 pixel se ci si
riferisce alle immagini di apprendimento che hanno una
dimensione di 92x112 pixel.
Fig. 2.7: Esempio di aree
Poiché il volto potrebbe avere delle dimensioni minori o limitrofe ad occhi e bocca
maggiori rispetto a quelle delle immagini di apprendimento, che hanno un maggiore
peso per la decisione.
le dimensioni delle sotto aree devono essere ogni volta
riportate in scala.
Le formule per il calcolo delle aree sono le seguenti:
DistEye wRetEye
−
2
2
(CenterRightEyeY −CenterLeftEyeY ) hRetEye
yEye =
−
2
2
wEye=wRetEye
hEye=hRetEye
xEye =CenterRightEyeX +
wRetMouth
2
hRetMouth
yMouth=CenterMouthY −
2
wMouth=wRetMouth
hMouth=hRetMouth
xMouth=CenterMouthX −
Dove wRetEye e hRetEye sono la larghezza e l'altezza correttamente scalate riferite alla sotto
area degli occhi. Il rettangolo che racchiude gli occhi sarà quindi definito come r(xEye, yEye,
wEye, hEye).
WRetMouth e hRetMouth sono la larghezza e l'altezza correttamente scalate riferite alla sotto
area della bocca. Il rettangolo che la racchiude sarà quindi definito come r(xMouth, yMouth,
wMouth, hMouth).
67
Sviluppo del Software
L'accuratezza del meccanismo di definizione dei riquadri in cui si trovano occhi e bocca è
minore quando l'area contenente il volto è ottenuta solamente dalla conoscenza di uno dei due
occhi. Di seguito (Fig. 2.8) sono riportate le immagini di occhi e bocca estratti dai volti
campione inseriti nel database.
Fig. 2.8: Sotto aree contenenti occhi e bocca ricavate dalle immagini
raffiguranti il mio volto inserite nel database.
Si è scelto di utilizzare la tecnica di estrazione delle feature SIFT poiché restituisce una
rappresentazione locale del volto sotto forma di keypoint. Ogni keypoint rappresenta un punto
caratteristico dell'immagine presa in considerazione, estrapolando il contenuto informativo e
svincolandolo dalla posizione nel volto. Questo garantisce che, anche se il volto viene
acquisito in condizioni di posa differenti da quelle dell'apprendimento, il descrittore del
keypoint risulta confrontabile con i descrittori ottenuti dalle immagini del database.
Invece, tecniche come PCA o l'approccio ibrido visto nel capitolo precedente considerano
l'immagine in un contesto generale o segmentandola in più parti per fornire una descrizione
globale e locale. Il descrittore del keypoint dà una rappresentazione locale del punto, che
viene completamente svincolato dalla posizione che assume all'interno del volto. Si riduce il
problema ad un confronto tra punti in uno spazio N-dimensionale dove N è la dimensione del
vettore del descrittore, cioè 128. Dunque in presenza di rotazione, cambi di posa e di
espressioni del volto la tecnica SIFT dovrebbe garantire un miglior funzionamento rispetto
alle tecniche precedentemente menzionate.
Invece rispetto ad una tecnica come EBGM, che si basa sull'estrazione di fiducial point e sulla
costruzione di grafi, la tecnica di estrazione SIFT tralascia la componente relativa al
posizionamento dei keypoint. I fiducial point sono posizionati in punti specifici come angoli
della bocca e degli occhi, mentre i keypoint sono dei punti caratteristici estratti dalla
68
Sviluppo del Software
rappresentazione del volto, cioè dei punti stabili a rotazioni e scala che sono significativi per
l'immagine che rappresenta il volto.
Si sposta l'attenzione da punti caratteristici del volto a punti caratteristici dell'immagine che
rappresenta il volto. La conseguenza di questo cambio di focus sta nella necessità di
aumentare il più possibile le condizioni e le pose delle immagini che sono associate a un
soggetto nel database.
Inoltre il fatto che SIFT tralascia la componente morfologica del volto, cioè il grafo che
descrive la distanza tra i fiducial point, comporta una minor dipendenza dall'identificazione
della posa.
Inoltre SIFT dovrebbe garantire una maggiore tolleranza alla presenza di mascheramenti
parziali del volto. L'identificazione dell'individuo può avvenire anche in condizioni di volti
parziali.
A questa tecnica di estrazione delle feature è stato affiancato l'algoritmo di machine learning
SVM per poter apprendere dai volti contenuti nel database i descrittori dei keypoint
rappresentativi dei soggetti. Tali informazioni, correttamente codificate dall'algoritmo,
consentono di classificare un nuovo volto.
La scelta è caduta su tale tecnica poiché è un algoritmo di tipo multiclasse ovvero in grado di
distinguere tra un numero finito N di classi. Altri algoritmi ugualmente validi sono stati
scartati poiché di tipo binario. Inoltre tale metodologia è molto utilizzata con buon successo
affiancata a PCA dove i vettori che rappresentano un soggetto possono avere grandi
dimensioni.
In aggiunta, l'utilizzo di una funzione di kernel adeguata, nel nostro caso si è scelto RBF,
consente di rendere linearmente separabili classi che nella realtà non lo sarebbero.
69
Testing
Capitolo3 - Testing
In questo capitolo verranno svolti alcuni test per verificare l'efficienza e il funzionamento del
sistema nel suo complesso. Verrà valutato come configurare i parametri al fine di ottenere le
migliori prestazioni. Si porrà molta attenzione alla velocità del sistema e si valuterà quanto è
incisivo ogni passo sul tempo complessivo di elaborazione. Tali test serviranno ad evidenziare
dove lavorare per migliorare i tempi di risposta.
Inoltre si verificheranno nello specifico le prestazioni dell'algoritmo di classificazione SVM.
Tale test verrà svolto sull'ORL database.
3.1 Sistema e risorse
Il sistema che verrà utilizzato per eseguire i test è
basato su processore Intel Core 2 Duo T7250 con
frequenza di 2 Ghz, 2 GB di ram e sistema
operativo Windows Vista 32 bit. Come ambiente di
sviluppo si è scelto Visual C++ 2010 Express.
Per acquisizione video sono state utilizzate due
differenti webcam:
•
Toshiba PX134xE-1CAM in grado di
acquisire 30 frame per secondo;
•
HP
Pavilion
WebCam
integrata
sul
notebook della serie dv6000.
Le due webcam differiscono per qualità di
rappresentazione del colore e per lunghezza focale.
La webcam integrata nel pc offre un angolo di
ripresa più ampio. Le differenze tra le due webcam
Fig. 3.1: Confronto tra fotogrammi
acquisiti con webcam differenti. (a)
Nonostante il punto di ripresa sia lo stesso, la frame acquisito con webcam Hp, (b)
frame acquisito con webcam Toshiba
differenza di angolo è molto evidente, basta
sono visibili nella figura qui a fianco (Fig. 3.1).
70
Testing
prendere come riferimento il quadro che compare sullo sfondo di entrambe le immagini. La
webcam Toshiba ci consentirà dunque di allontanarci maggiormente dal punto di ripresa
mantenendo una dimensione del volto tale da consentire il riconoscimento della sua presenza.
Possiamo anche notare una diversa acquisizione del colore, in quanto i colori della webcam
Toshiba appaiono più sbiaditi. Questa differenza potrebbe influenzare la fase di skinsegmentation.
Per poter garantire la ripetibilità dei test al variare dei parametri si è deciso di acquisire e
salvare più filmati con entrambe le webcam. I file sono memorizzati in formato mpg alla
risoluzione di 640x480 pixel ed a 25 frame per secondo.
Il software in realtà è pensato anche per acquisire e analizzare il video, non solo su file
precedentemente registrati, ma su flussi prelevati in tempo reale dalla webcam.
Per i test vengono presi in considerazione 3 semplici video con le seguenti caratteristiche:
•
video 1: acquisito con webcam Hp. Il volto è sempre in primo piano con poche
rotazioni del capo. E' presente una fonte di luce alle spalle. Numero totale di frame
407;
•
video 2: acquisito con webcam Toshiba in ambiente con sfondo regolare.
L'illuminazione proviene da lato rispetto al volto, che viene ripreso con espressioni
facciali differenti, con rotazioni del capo e a diverse distanze dal punto di ripresa.
Numero totale di frame 1364;
•
video 3: acquisito con webcam Hp. Le condizioni di ripresa sono le medesime del
video 2. Numero totale di frame 1311;
•
video 4: acquisito con fotocamera Canon SX100 IS. Le condizioni di ripresa sono
analoghe a quelle del video 2 e 3. Numero totale di frame 2300.
Il video 4 è stato inserito per valutare il comportamento del software quando si utilizzano dei
video provenienti da altre fonti diverse da webcam. É evidente che l'uso di tale strumento di
acquisizione comporta un'analisi offline del video.
3.2 Valutazione Face Detection su Video
Il comportamento del face detection verrà valutato sui 4 video descritti in precedenza. Tre di
questi sono stati girati in condizioni simili e con identico punto di ripresa, ma con tre
71
Testing
hardware di acquisizione differenti.
Il confronto tra questi 3 video ci consentirà di valutare l'influenza del sistema di acquisizione,
in particolare sulla procedura di skin-segmentation. Questo perché tale metodologia fa uso
della componente relativa al colore per identificare le aree di ricerca.
In tutti i frame del video compare il mio volto dunque si può definire la percentuale di volti
correttamente individuati semplicemente facendo il rapporto tra le volte che viene identificato
il volto e il numero totale di frame. Va però tenuto in considerazione che il sistema non è in
grado di riconoscere gli elementi del volto quando questo è parzialmente o completamente di
profilo.
Oltre alla percentuale di volti individuati su tutti i frame del video si verificheranno quanti di
questi sono individuati con uno, due o tutti e tre gli elementi del viso. Un volto identificato
con tutti e tre gli elementi dà una maggiore certezza dell'area selezionata.
Nel capitolo precedente inoltre è stata calcolata la dimensione minima teorica di un volto.
Poiché questa è solo teorica è necessario verificarla. Questo perché occorre valutare le
dimensioni minime delle aree identificate con la skin-segmentation da scartare.
Fig. 3.2: Fotogramma estratto dal video 4 rappresentante l'area
di minori dimensioni che contiene un volto 50x52 pixel.
Utilizzando il video 4 come input dell'algoritmo, poiché in questo video il soggetto si
allontana maggiormente dal punto di ripresa, si è registrata l'immagine la cui area contenente
il volto è minima. Questa è riportata nella figura precedente (Fig. 3.2), è di circa 50x52 pixel,
di molto inferiore rispetto a quella minima teorica calcolata in precedenza. Questo significa
72
Testing
che le sotto aree da scartare con la skin-segmentation devono essere inferiori alla dimensione
di 40x40 pixel circa.
Sempre prendendo in considerazione i video,
in particolare il video 4, è possibile valutare
come
influisce
la
rotazione
del
volto.
Nell'immagine qui a lato (Fig. 3.3) è possibile
vedere il volto catturato sia in posizione
centrale che completamente di profilo, sia
destro che sinistro, nonostante nei frame vi è
quasi sempre un'identificazione corretta del
soggetto. Notiamo che l'area bianca che
delimita la parte del frame che deve essere
usata in fase di identificazione è estremamente
precisa quando il volto è frontale rispetto alla
telecamera o con una lieve rotazione. Mentre
peggiora notevolmente quando è di profilo.
Un altro aspetto che influisce sull'area che
racchiude il volto è l'identificazione di
entrambi gli occhi. Infatti, in tutti i frame in
cui viene identificato solamente un occhio, il
riquadro è calcolato in maniera errata.
Fig. 3.3: Parte di frame estratti dal video 4
Tale problema era prevedibile poiché le che raffigurano diverse posizioni del
volto.
formule di calcolo sono basate sulla
conoscenza della distanza tra gli occhi. Per
poter risolvere questo problema sarebbe necessario introdurre la ricerca di altri elementi
caratteristici come orecchie e naso.
Si potrebbe anche operare una modifica all'albero di ricerca, consentirebbe di identificare in
maniera più accurata la posa del soggetto ma al contempo determinerebbe un deterioramento
delle prestazioni complessive del sistema.
Finché il volto rimane posizionato frontalmente o comunque entrambi gli occhi sono
correttamente identificabili l'area viene estratta in maniera precisa.
73
Testing
Un altro parametro importante da prendere in
considerazione è l'influenza del colore sulla
procedura di skin-segmentation. Nella figura di
lato (Fig. 3.4) sono presenti dei fotogrammi
tratti da tre video girati nello stesso ambiente
con analoga illuminazione ma con sistemi di
acquisizione differenti. Le skin-map prodotte,
immagini in bianco e nero, sono molto diverse.
La prima coppia di immagini in alto è tratta dal
video 2, e la skin-map ottenuta da tale
fotogramma è sicuramente la migliore.
Invece nelle altre due immagini tratte dal video
3 e dal video 4 la skin-map prodotta appare
molto più confusa assegnando la classificazione
come colore della pelle a delle parti di sfondo
che in realtà sono solamente parete.
Fig. 3.4: Fotogrammi tratti dai video 2, 3
e 4. Si noti come varia la skin-map al
variare della sistema di acquisizione.
Quando la skin-map è confusa le sotto aree da
investigare alla ricerca di volti potrebbero aumentare determinando di conseguenza un
decadimento delle prestazioni del sistema.
Purtroppo ogni sistema di acquisizione ha una diversa sensibilità al colore e una differente
interpretazione delle condizioni luminose dell'ambiente. Per ottimizzare quindi il processo di
skin-segmentation potrebbe essere utile tarare le soglie di classificazione della classe pelle in
base al sistema di acquisizione che si utilizzerà.
L'ultimo aspetto che andiamo ad indagare è la frequenza di identificazione del volto sui video.
La tabella seguente riporta i dati estratti dall'analisi di ogni video. I dati riportati sono il
numero totale di volti rintracciati, il rapporto tra totale volti trovati e frame e il numero di
volti identificati con la presenza di 1, 2 o 3 componenti caratteristici del volto.
74
Testing
Totale volti identificati
Percentuale volti identificati
rispetto al numero di frame
Un elemento identificato
Due elementi identificati
Tre elementi identificati
Video 1
407
Video 2
1297
Video 3
1101
Video 4
2177
100,00%
95,09%
83,98%
94,65%
0
12
395
188
941
168
611
344
146
368
290
1519
Tabella 3.1: Sono riportati il numero di volte che è stato estratto un volto dai
diversi video e la percentuale in riferimento al numero totale di frame del
video.
Possiamo vedere che nel video 1, quello in cui il volto rimane frontale per la maggior parte
del tempo, il volto viene identificato in ogni frame. Nella maggioranza dei casi vengono
individuati entrambi gli occhi e la bocca. Negli altri video la percentuale di volti estratti
rispetto al numero di frame rimane comunque molto alta. Nel video 3 si riscontra la
percentuale più bassa perché la parte sinistra del volto risulta ombreggiata per quasi tutto il
filamto. Tale situazione di illuminazione giustifica anche il basso valore legato
all'identificazione del volto con tutti e tre gli elementi.
La perdita di identificazione del volto è principalmente dovuta alla posizione di profilo o
all'eccessivo allontanamento dal punto di ripresa.
Nel complesso il sistema di face detection si comporta conformemente alle aspettative in
quanto riconosce in maniera efficiente i volti frontali. In alcuni casi riesce a riconoscere anche
volti parzialmente di profilo.
3.3 Valutazione Face Recognition su Database
La valutazione della procedura di face recognition viene eseguita su ORL database con
l'aggiunta del mio volto. Analogamente ai risultati riportati nel capitolo 1, in riferimento
all'uso della tecnica SIFT abbinata a SVM [13], si utilizzerà un numero k di voti inferiore a 10
per ogni individuo presente nel database. Il valore k verrà fatto variare da un minimo di 2 ad
un massimo di 9.
A differenza dell'algoritmo adottato in fase di face recognition presentato nel capitolo 2,
l'implementazione utilizzata per svolgere questo tipo di test attribuisce a tutti i punti estratti lo
stesso peso.
Verranno valutati diversi parametri:
75
Testing
•
percentuale di riconoscimenti corretti su tutti i volti del database;
numero volti correttamente riconosciuti
41∗10
•
percentuale di riconoscimenti corretti su tutto il database tranne i volti di
apprendimento;
numero volti correttamente riconosciuti
41∗(10−k )
•
percentuale di classificazioni errate su tutti i volti del database;
numero volti erroneamente classificati
41∗10
•
percentuale di classificazioni errate su tutto il database tranne i volti di apprendimento;
numero volti erroneamente classificati
41∗(10−k )
•
percentuale di classificazioni unknown su tutti i volti del database;
numero volti classificati come sconosciuti
41∗10
•
percentuale di classificazioni unknown su tutto il database tranne i volti di
apprendimento;
numero volti classificati come sconosciuti
41∗10
Le immagini non usate per l'apprendimento decrescono all'aumentare di k. Quando k sarà
uguale a 9 si avranno solamente 42 immagini sconosciute.
Oltre alla variazione del numero di volti per l'apprendimento, si analizza il comportamento del
face recognition al variare della soglia minima di keypoint assegnati ad un soggetto per la
corretta identificazione. Ciò ci consente di valutare i limiti minimi e massimi di tale valore e
di scegliere quale è quello più adeguato in base alla sensibilità che vogliamo ottenere.
Il grafico seguente (Fig. 3.5) riporta la percentuale di corrette identificazioni al variare dei due
parametri presi in considerazione, sono state utilizzate tutte le immagini del database che
includono anche quelle di apprendimento. Possiamo vedere che, al crescere del numero di
volti per soggetto utilizzati per l'apprendimento, si ottengono risultati migliori. Inoltre
l'aumentare del valore di soglia fa diminuire il tasso di riconoscimento poiché un maggior
numero di individui viene classificato come sconosciuto.
76
Testing
100,00%
90,00%
80,00%
70,00%
60,00%
50,00%
40,00%
30,00%
20,00%
10,00%
0,00%
0
0,14
0,2
0,3
1
2
3
4
5
6
7
8
9
Fig. 3.5: Grafico riferito alla percentuale di riconoscimenti corretti
su tutti i volti del database.
Nel grafico seguente (Fig. 3.6) invece è rappresentata la percentuale di successi solamente
sulle immagini che sono state escluse per l'apprendimento. Sostanzialmente l'andamento è
analogo a quello visto in precedenza. Ovviamente va tenuto in considerazione che
all'aumentare delle immagini usate per l'apprendimento si riduce il numero di quelle
disponibili per la verifica. Nel caso di 9 immagini usate si ha che solamente 41 sono quelle
che risultano ignote. Questo motiva l'elevata percentuale di successo in tale caso.
100,00%
90,00%
80,00%
70,00%
60,00%
50,00%
40,00%
30,00%
20,00%
10,00%
0,00%
0
0,14
0,2
0,3
1
2
3
4
5
6
7
8
9
Fig. 3.6: Grafico riferito alla percentuale di riconoscimenti corretti
su tutto il database tranne i volti di apprendimento.
Nel grafico seguente (Fig. 3.7) sono rappresentate le percentuali di individui classificati come
77
Testing
sconosciuti al variare dei due parametri presi in considerazione. Si può vedere che al crescere
del valore di soglia c'è un corrispettivo aumento degli individui che vengono scartati e dunque
classificati come sconosciuti. Questo avviene in particolar modo quando il numero di
immagini per soggetto è basso. Infatti in questo caso i keypoint che rappresentano un
individuo sono in numero minore con la conseguenza di non garantire un corretto
riconoscimento di nuovi volti.
100,00%
80,00%
0
0,14
0,2
0,3
60,00%
40,00%
20,00%
0,00%
1
2
3
4
5
6
7
8
9
Fig. 3.7: Grafico riferito alla percentuale di classificazioni
unknown su tutti i volti del database.
Nel grafico seguente (Fig. 3.8) è raffigurata la percentuale di individui etichettati come
sconosciuti analizzando tutte le immagini tranne quelle usate per l'apprendimento.
100,00%
80,00%
0
0,14
0,2
0,3
60,00%
40,00%
20,00%
0,00%
1
2
3
4
5
6
7
8
9
Fig. 3.8: Grafico riferito alla percentuale di classificazioni
unknown su tutti i volti del database tranne quelli usati per
l'apprendimento.
Vediamo che sostanzialmente tale percentuale si tiene leggermente al di sopra di quelle
78
Testing
ottenute su tutte le immagini del database. Questo è un comportamento atteso poiché si tratta
dell'analisi di volti sconosciuti per l'algoritmo di apprendimento. Al variare del valore di
soglia si osserva un progressivo aumento della percentuale.
In questo grafico (Fig. 3.9) è rappresentata la percentuale di classificazioni errate su tutte le
immagini del database. Come possiamo vedere il crescere del numero di immagini usate
determina un abbassamento della percentuale.
100,00%
90,00%
80,00%
70,00%
60,00%
50,00%
40,00%
30,00%
20,00%
10,00%
0,00%
0
0,14
0,2
0,3
1
2
3
4
5
6
7
8
9
Fig. 3.9: Grafico riferito alla percentuale di classificazioni errate su
tutto il database.
Questo grafico (Fig. 3.10) rappresenta la percentuale di errori di classificazione sulle
immagini non usate per l'apprendimento. Come possiamo vedere tale errore decresce
all'aumentare di volti utilizzati per soggetto. Inoltre l'aumento del valore di soglia determina
un passaggio da volti erroneamente classificati a volti sconosciuti.
79
Testing
100,00%
90,00%
80,00%
70,00%
60,00%
50,00%
40,00%
30,00%
20,00%
10,00%
0,00%
0
0,14
0,2
0,3
1
2
3
4
5
6
7
8
9
Fig. 3.10: Grafico riferito alla percentuale di classificazioni errate su
tutto il database tranne i volti di apprendimento.
Nei grafici finora analizzati abbiamo preso in considerazione solamente 4 livelli di soglia. Per
soglie più elevate di 0,3 si verifica un aumento dei soggetti classificati come sconosciuti
anche se nella realtà sarebbero stati correttamente classificati. Il valore di soglia ottimale che
si può dedurre è tra 0,15 e 0,20. Questo perché si verifica il migliore equilibrio tra individui
correttamente e erroneamente classificati che vengono etichettati come sconosciuti.
Il numero di immagini per soggetto che garantisce dei risultati accettabili deve essere
superiore o uguale a 6. Di seguito sono riportate in tabella le percentuali di corretta
identificazione nel caso del database completo o nel caso di esclusione delle immagini usate
per l'apprendimento. La soglia è fissata al valore 0,14.
Database completo
Database privo delle
immagini di apprendimento
5
94,39%
Numero di volti per soggetto
6
7
8
95,85%
97,56%
98,54%
90,24%
93,29%
93,50%
98,78%
9
99,76%
100,00%
Tabella 3.2: Tabella riassuntiva che contiene le percentuali di corretta identificazione con
valore di soglia fissato a 0,14.
80
Testing
3.4 Valutazione Face Recognition su video
I video vengono utilizzati per verificare il corretto riconoscimento del soggetto estratto dalla
procedura di face detection. Tutti i volti vengono analizzati e etichettati con l'identificativo
dell'individuo a cui assomigliano maggiormente.
Poiché nei video compare solamente il mio volto è molto semplice ottenere le informazioni
relative alla corretta identificazione. Inoltre è stato già ricavato in precedenza il numero di
volti estratti. Questo dato ci servirà per calcolare i valori percentuali.
Le informazioni che possiamo ottenere sono il tasso di corretti riconoscimenti come il
rapporto tra numero di volti correttamente identificati e numero totale di volti estratti.
CR=
numero volti classificati correttamente
.
numero di volti estratti dal video
La percentuale di errata classificazione è ottenuta come rapporto tra volti classificati come
altro soggetto più classificati come sconosciuti e numero totale di volti estratti.
ER=
numero volti classificati errati+numero di volti classificati sconosciuti
.
numero di volti estratti dal video
La percentuale di classificazione come sconosciuti è calcolata come rapporto tra volti
etichettati sconosciuti e volti estratti dal video.
UR=
numero di volti classificati sconosciuti
.
numero di volti estratti dal video
Tutti questi indicatori potranno essere calcolati al variare di due parametri:
•
il valore di soglia;
•
il valore del punteggio per i keypoint localizzati in aree limitrofe a bocca e occhi;
Nel grafico seguente (Fig. 3.11) sono riportate le percentuali di corretta identificazione del
soggetto estratto dai 4 video presi in considerazione. I parametri che vengono variati sono
due: il valore di soglia, che viene valutato per tre differenti valori ( 0; 0,15; 0,20 ) e il
punteggio da assegnare ai keypoint che sono localizzati in posizioni limitrofe agli occhi e alla
bocca.
Come possiamo vedere, i risultati sono molto differenti tra loro. Il primo video, quello più
semplice da analizzare poiché il volto rimane quasi sempre in posizione frontale, dà ottimi
risultati al variare dei due parametri. In particolare utilizzando il valore di soglia 0,15 si
ottiene il migliore risultato indipendentemente dall'altro parametro.
81
Testing
Il parametro che attribuisce ai keypoint un maggior peso ha una particolare influenza sugli atri
3 video determinando in molti casi un miglioramento dell'identificazione soprattutto quando
si sceglie il valore di soglia di 0,15.
100,00%
90,00%
80,00%
70,00%
60,00%
1
2
3
4
50,00%
40,00%
30,00%
20,00%
10,00%
0,00%
0
0,15 0,2
Video 1
0
0,15 0,2
Video 2
0
0,15 0,2
Video 3
0
0,15 0,2
Video 4
Fig. 3.11: Percentuali di identificazioni ottenute al variare dei livelli di
soglia e al punteggio da attribuire ai keypoint localizzati nei pressi degli
occhi e della bocca.
Il video 4 è quello su cui si riscontra la peggiore prestazione. La sorgente video in questo caso
è differente e la qualità delle immagini risulta essere molto diversa da quella ottenuta dalle
due webcam. Abbiamo visto già in fase di skin-segmentation che le sotto aree di ricerca e la
skin-map ottenuta con tale video sono nettamente inferiori. Inoltre in molti fotogrammi il
volto compare in posizione di profilo e questo pregiudica spesso la corretta identificazione.
Nel grafico che segue (Fig. 3.12) viene riportato il numero di volti etichettati come
sconosciuti al variare dei due parametri. Come possiamo vedere, quando la soglia è uguale a 0
non si hanno classificazioni come sconosciuti mentre all'aumentare di tale valore cresce la
quantità di volti scartati. Nel caso del video 4 vediamo come l'aumentare del valore di soglia
determina un gran numero di individui sconosciuti che influiscono negativamente sul tasso di
corretta identificazione.
82
Testing
100,00%
90,00%
80,00%
70,00%
60,00%
50,00%
40,00%
30,00%
20,00%
10,00%
0,00%
1
2
3
4
0
0,15 0,2
Video 1
0
0,15 0,2
Video 2
0
0,15 0,2
Video 3
0
0,15 0,2
Video 4
Fig. 3.12: Percentuale di volti identificati come sconosciuti al variare della
soglia e del peso dei keypoint localizzati vicino a occhi e bocca.
L'aumento del peso dei punti localizzati in posizione significativa del volto determina una
minor quantità di individui sconosciuti. Questo sta ad indicare che molti keypoint analizzati
ricadono nelle sotto aree limitrofe ad occhi e bocca.
Il seguente grafico (Fig. 3.13) riporta l'errore di classificazione inteso come totale dei volti
riconosciuti in maniera errata e quelli etichettati come sconosciuti. Si tratta del grafico
perfettamente speculare a quello rappresentato in figura 3.11.
100,00%
90,00%
80,00%
70,00%
60,00%
1
2
3
4
50,00%
40,00%
30,00%
20,00%
10,00%
0,00%
0
0,15 0,2
Video 1
0
0,15 0,2
Video 2
0 0,15 0,2
Video 3
0 0,15 0,2
Video 4
Fig. 3.13: Percentuale di volti identificati come sconosciuti o classificati in
maniera errata al variare della soglia e del peso dei keypoint localizzati
vicino a occhi e bocca.
83
Testing
I grafici riportati in precedenza evidenziano un buon comportamento generale del sistema di
identificazione, soprattutto quando il volto è frontale rispetto al punto di ripresa. L'altro dato
che emerge è l'importanza della localizzazione dei keypoint estratti, infatti aumentando il peso
di quelli individuati in posizioni sensibili vicino a occhi e bocca, si ottengono generalmente
migliori risultati.
Inoltre, come già sostenuto, il miglior compromesso per quanto concerne il valore di soglia è
0,15.
In questi test è sempre stato utilizzato l'apprendimento ottenuto descrivendo ogni soggetto del
database con 9 immagini di volti. Si è riscontrato che diminuendo il numero di volti per
soggetto si riduce la percentuale di corretti riconoscimenti.
3.5 Prestazioni del sistema nel complesso
I video vengono utilizzati per verificare le prestazioni in termini di numero di frame analizzati
per secondo dal software. Maggiore è tale numero, minori sono le prestazioni. Si valuterà tale
parametro al variare della risoluzione di input dei video. Per fare questo i video verranno
scalati ad una risoluzione di 340x240 pixel.
Inoltre verrà valutato quanto tempo in media si impiega per ogni fase della ricerca e
dell'identificazione. Si suddivide l'algoritmo in 3 parti fondamentali:
•
la skin-segmentation, che racchiude tutte le operazioni eseguite in scala;
•
l'algoritmo
Viola-Jones,
che
comprende
l'identificazione
delle
componenti
fondamentali del volto;
•
la face recognition, che raggruppa tutte le operazioni orientate all'identificazione del
soggetto.
Di seguito è riportata una tabella con i tempi di elaborazione media delle tre fasi
precedentemente descritte per i 4 video presi in considerazione, sia alla risoluzione originaria
di 640x480 pixel che a quella ridotta di 320x240 pixel. Si precisa che i dati riportati riferiti ai
tempi di esecuzione delle tre fasi sono espressi in millisecondi.
84
Testing
Video elaborati alla risoluzione di 640x480 pixel
Skin-Segmentation Viola-Jones
(ms)
(ms)
Video 1
5,1
104,9
Video 2
5,0
115,0
Video 3
4,6
106,4
Video 4
4,6
456,4
Face Detection
(ms)
150,0
249,0
287,0
317,0
Frame per
Secondo
3,6
2,9
2,8
2,3
Keypoint medi
per volto
15,5
33,0
37,1
42,0
Video elaborati alla risoluzione di 320x240 pixel
Skin-Segmentation Viola-Jones
(ms)
(ms)
Video 1
1,4
22,0
Video 2
1,3
23,7
Video 3
1,3
23,5
Video 4
1,4
41,8
Face Detection
(ms)
149,6
315,0
367,2
544,8
Frame per
Secondo
5,2
5,6
7,8
12,6
Keypoint medi
per volto
17,8
39,8
43,1
31,0
Fig. 3.14: Test eseguiti per valutare le prestazioni del sistema.
Dai dati emerge che la fase di skin-segmentation influisce in maniera limitata sul tempo
complessivo di elaborazione, invece molto più pesanti risultano essere le altre due fasi.
Mentre l'uso dell'algoritmo Viola-Jones, come è ovvio, è influenzato positivamente
dall'abbassamento della risoluzione del video, la fase di face recognition impiega sempre la
stessa quantità di tempo.
Abbassare la risoluzione dunque crea un incremento delle prestazioni in termini di frame
analizzati per secondo ma si ripercuote negativamente sulla capacità di estrarre volti. Infatti la
minor risoluzione comporta una riduzione della dimensione del volto, che in alcuni casi non
rientra nella minima dimensione rintracciabile.
La quantità di tempo impiegata dal face recognition non subisce sostanziali variazioni quando
si modifica la risoluzione poiché il numero di keypoint estratti è stabile al mutare della scala
dell'immagine. Questa proprietà dei keypoint determina una piccola riduzione della loro
quantità identificata in un volto ma non sufficiente da influenzare le prestazioni del sistema. I
dati riportati contrastano con quanto affermato poiché il numero di volti estratti, con la
diminuzione della dimensione del frame, è minore e dunque la quantità media dei keypoint
risente del fatto che vengono selezionati solo quelli di maggiore dimensione.
Il video 4 impiega un maggior tempo rispetto agli altri in fase di esecuzione dell'algoritmo di
Viola-Jones, ciò accade perché parte dello sfondo viene erroneamente classificato come
appartenente alla classe pelle. Ne risulta che le sotto aree da analizzare alla ricerca di un
potenziale volto sono maggiori.
85
Testing
Per incrementare le prestazioni del software in termini di aumento del numero di frame
analizzati per secondo, è stata introdotta una procedura che utilizza informazioni del frame
precedente, che è valida solamente per i video pre registrati e non catturati in real-time dalla
webcam.
Tale procedura consiste nell'analizzare una sotto area individuata in fase di skin-segmentation
solamente quando questa si discosta sensibilmente da quella ottenuta nel frame precedente
oppure dopo aver tralasciato un numero N di frame. Alla sotto area che viene scartata
dall'analisi si assegna il riquadro del volto precedentemente identificato con la corrispettiva
identità del soggetto. Tale tecnica risulta utile quando il volto dell'individuo permane per
lungo tempo nella stessa posizione e con la stessa posa, ma è inutile in un contesto dinamico.
Per valutare se due riquadri sono compatibili tra loro si calcola la distanza euclidea tra i loro
baricentri e se questa è inferiore ad un determinato valore significa che la corrispondenza è
verificata.
Per testare il funzionamento e l'influenza sulle prestazioni si eseguirà il software impostando
il parametro N al valore 5 e definendo la massima distanza tra i baricentri assegnando il valore
di 20 pixel. I risultati così ottenuti sono i seguenti:
Video 1
Video 2
Video 3
Video 4
Percentuale
corretta
identificazione
97,05%
94,99%
81,35%
50,16%
Numero totale di Numero effettivo
riquadri da
dei riquadri
analizzare
analizzati
764
427
2202
1243
2462
1489
8583
7050
Frame per
Secondo
10,06
7,02
7,17
3,85
Tabella 3.3: Test eseguiti utilizzando il meccanismo di riduzione del numero
di riquadri da analizzare. Con parametro di soglia impostato a 0,0 e peso dei
keyipoint, localizzati nelle aree vicino agli occhi e alla bocca, pari a 2.
La riduzione dei riquadri da analizzare è sensibile quando il volto è in posa stabile. Infatti
come possiamo vedere nei primi tre video se ne esamina solamente il 50% circa, mentre nel
video 4 la riduzione è di poco inferiore al 20%. Questo risultato è influenzato da come il
sistema di acquisizione codifica il colore del frame. Infatti in questo ultimo video sono
presenti molti riquadri classificati come colore della pelle che in realtà sono delle porzioni di
sfondo.
Il frame rate risultante è nettamente superiore a quello che si otterrebbe se non si usasse il
86
Testing
meccanismo di riduzione. E le percentuali di corretta identificazione rimangono
sostanzialmente uguali.
87
Conclusione
Conclusione
L'estrazione e l'identificazione di volti sono materie molto complesse da trattare poiché la loro
applicazione è influenzata in maniera marcata dalle condizioni ambientali in cui vengono
utilizzate. L'ambiente che circonda un individuo rappresenta nella maggior parte dei casi la
principale fonte di malfunzionamento di software pensati per svolgere tali operazioni. Se ci
trovassimo in condizioni ideali saremmo in grado di ridurre tale tipologia di disturbo.
L'approccio da me proposto è pensato per suddividere le operazioni di identificazione e
ricerca dei volti in piccoli step. Ogni fase è ragionata per rendere più efficiente la
computazione delle successive filtrando e aggregando al meglio le informazioni che vengono
usate.
La suddivisione in piccoli step garantisce una maggiore versatilità consentendo di eliminare
potenziali errori di classificazione, in particolare nelle fasi di ricerca delle componenti
fondamentali del volto. Questo garantisce una maggiore efficacia del prodotto finale.
In fase di testing si è verificato che le prestazioni del software, per quanto riguarda la
precisione di identificazione ed estrazione, sono valide e consentono di ottenere dei buoni
risultati sia per quanto riguarda la verifica su database sia per ciò che concerne la verifica su
video. La percentuale di corretta identificazione del volto si è sempre tenuta a livelli
accettabili.
L'uso di video acquisiti da diverse sorgenti ci ha consentito di valutare la validità del software
per quanto concerne la variazione del sistema di ripresa. Nonostante vi siano nette differenze
in fase di produzione della skin-map, tra i tre video girati nelle stesse condizioni, ma variando
il sistema di acquisizione, il risultato della classificazione è stato sempre accettabile. Se
dovessimo scegliere una delle tre sorgenti sicuramente la webcam Toshiba garantisce, in quel
contesto, la produzione di una skin-map più accurata.
Il problema che più ha afflitto il software è stata la velocità di analisi del video. Purtroppo il
frame rate si è sempre mantenuto tra 2 e 4, nonostante in fase implementativa si sia
ottimizzato il processo di identificazione del volto parallelizzandolo. La scarsa velocità di
identificazione ne pregiudica un utilizzo real-time per il monitoraggio di ambienti.
Confrontando i tempi necessari per estrarre il volto e identificarlo, ci accorgiamo che, esclusa
la parte di skin-segmentation molto rapida, la fase di ricerca dei componenti del volto e quella
di identificazione impiegano tempi molto elevati. Il vero collo di bottiglia è rappresentato
88
Conclusione
dalla fase di identificazione. Il numero di keypoint che viene estratto da ogni volto deve essere
il più possibile ridotto poiché il suo incremento comporta un peggioramento delle prestazioni.
Per poter interpretare più situazioni possibili è necessario utilizzare un numero elevato di
immagini per ogni soggetto. Nei test si è verificato che già con 6 immagini per volto si
ottengono buoni risultati. All'applicazione pratica sui video si è così deciso di adottare 9
immagini per soggetto.
Inoltre, all'interno dei video, utilizzare le informazioni dei frame già analizzati, consente in
generale di aumentare la velocità complessiva del software. Tale applicazione è però efficiente
in un ristretto contesto poiché l'eccessivo dinamismo della scena vanificherebbe questo
meccanismo.
La metodologia utilizzata per l'identificazione e l'estrazione dei volti nel suo complesso
rimane valida e fornisce delle prestazioni apprezzabili.
A partire da tale base si potrebbe migliorare la prontezza di risposta provando ad utilizzare un
algoritmo di machine learning differente da SVM poiché anche se questo dà ottimi risultati di
identificazione risulta essere troppo pesante.
Inoltre potrebbe essere interessante attuare un meccanismo di riduzione dello spazio delle
feature ottenuto con SIFT, realizzabile con l'applicazione di tecniche come PCA e similari.
89
Bibliografia
Bibliografia
[1]
Ming-Hsuan Yang, David J. Kriegman, Narendra Ahuja, “Detecting Faces in Images: A
Survey” , Ieee Transactions on Pattern Analysis and Machine Intelligence, vol. 24, no. 1,
pp. 34-58, 2002.
[2]
Sanjay Kr. Singh, D. S. Chauhan, Mayank Vatsa, Richa Singh, “A Robust Skin Color
Based Face Detection Algorithm”, Tamkang Journal of Science and Engineering, vol. 6,
no. 4, pp. 227-234, 2003.
[3]
Paul Viola, Michael J. Jones, “Robust Real-Time Face Detection”, International Jurnal
of Computer Vision 57(2), pp. 137-154, 2004.
[4]
Son Lam Phung, Abdesselam Bouzerdoum, Douglas Chai, “Skin Segmentation Using
Color Pixel Classification: Analysis and Comparison”, Ieee Transactions on Pattern
Analysis and Machine Intelligence, vol. 27, no. 1, pp. 148-154, 2005.
[5]
Chai D., Ngan K.N., “Face segmentation using skin-color map in videophone
applications ”, Circuits and Systems for Video Technology, IEEE Transactions on ,
vol.9, no.4, pp.551-564, Jun 1999.
[6]
Kap-Ho Seo, Won Kim, Changmok Oh, Ju-Jang Lee , “Face detection and facial feature
extraction using color snake”, Industrial Electronics, 2002. ISIE 2002. Proceedings of
the 2002 IEEE International Symposium on , vol.2, pp. 457- 462, 2002.
[7]
Li Zou, Kamata, S., “Face detection in color images based on skin color models”,
TENCON 2010 - 2010 IEEE Region 10 Conference, pp.681-686, Nov. 2010.
[8]
Yao-Jiunn Chen, Yen-Chun Lin, “Simple Face-detection Algorithm Based on Minimum
Facial Features”, Industrial Electronics Society, 2007. IECON 2007. 33rd Annual
Conference of the IEEE, pp.455-460, Nov. 2007.
[9]
Constantine Papageorgiou, Tomaso Poggio, “A Trainable System for Object Detection”,
International Journal of Computer Vision 38(1), pp.15–33, 2000
[10] Lienhart R., Maydt J., “An extended set of Haar-like features for rapid object
detection”, Image Processing. 2002. Proceedings. 2002 International Conference on ,
90
Bibliografia
vol.1, pp. I-900- I-903, 2002
[11] Tong Liu, Sung-Hoon Kim, Hyon-Soo Lee, Hyung-Ho Kim, “Face Recognition base on a
New Design of Classifier with SIFT keypoint”, Intelligent Computing and Intelligent
Systems, 2009. ICIS 2009. IEEE International Conference on , pp 366 - 370 ,Nov. 2009
[12] Han Yanbin; Yin Jianqin; Li Jinping; , “Human Face Feature Extraction and Recognition
Base on SIFT” Computer Science and Computational Technology, 2008. ISCSCT '08.
International Symposium on , vol.1, no., pp.719-722, 20-22 Dec. 2008
[13] Lichun Zhang; Junwei Chen; Yue Lu; Wang, P.; , “Face Recognition Using Scale
Invariant Feature Transform and Support Vector Machine” Young Computer Scientists,
2008. ICYCS 2008. The 9th International Conference for , vol., no., pp.1766-1770, 1821 Nov. 2008
[14] D. Lowe, “Distinctive Image Features from Scale-Ivariant Keypoint” International
Journal of Computer Vision, vol. 60(2), pp 91 – 110, 2004
[15] Chowdhury, S.; Sing, J.K.; Basu, D.K.; Nasipuri, M.; , “A Hybrid Approach to Face
Recognition Using Generalized Two-Dimensional Fisher's Linear Discriminant
Method” Emerging Trends in Engineering and Technology (ICETET), 2010 3rd
International Conference on , pp.506-511, 19-21 Nov. 2010
[16] Belhumeur, P.N.; Hespanha, J.P.; Kriegman, D.J.; , “Eigenfaces vs. Fisherfaces:
recognition using class specific linear projection” Pattern Analysis and Machine
Intelligence, IEEE Transactions on , vol.19, no.7, pp.711-720, Jul 1997
[17] Xiaoyang Tan, Songcan Chen, Zhi-Hua Zhou, Fuyan Zhang, “Face recognition from a
single image per person: A survey” Pattern Recognition, vol. 39, no. 9, pp 1725-1745,
Sep. 2006
[18] Chowdhury, S.; Sing, J.K.; Basu, D.K.; Nasipuri, M.; , “Feature extraction by fusing
local and global discriminant features: An application to face recognition”
Computational
Intelligence
and
Computing
Research
(ICCIC),
2010
IEEE
International Conference on , vol., no., pp.1-4, 28-29 Dec. 2010
[19] Wiskott, L.; Fellous, J.-M.; Kuiger, N.; von der Malsburg, C.; , “Face recognition by
elastic bunch graph matching” Pattern Analysis and Machine Intelligence, IEEE
Transactions on , vol.19, no.7, pp.775-779, Jul 1997
91
Bibliografia
[20] Kshirsagar, V.P.; Baviskar, M.R.; Gaikwad, M.E.; , “Face recognition using Eigenfaces”
Computer Research and Development (ICCRD), 2011 3rd International Conference on ,
vol.2, no., pp.302-306, 11-13 March 2011
[21] Turk, M.A.; Pentland, A.P.; , “Face recognition using eigenfaces” Computer Vision and
Pattern Recognition, 1991. Proceedings CVPR '91., IEEE Computer Society
Conference on , vol., no., pp.586-591, 3-6 Jun 1991
[22] E. Martinelli,C. Di Natale, “Introduzione al trattamento Statistico dei Dati”
www.uniroma2.it/didattica/Sensori_ed_applic_2/deposito/lez5.pdf
[23] Richard O. Duda, Peter E. Hart, David G. Stork, “Pattern Classification”, Wiley, 2001
[24] Shigeo Abe, “Support Vector Machines for Pattern Classification”, Springer, 2005
[25] Steve R. Gunn, “Support Vector Machine for Classification and Regression”, 1998,
http://users.ecs.soton.ac.uk/srg/publications/pdf/SVM.pdf
[26] “Libreria OpenCV 2.3.1” Intel Corporation http://opencv.willowgarage.com/wiki/
[27] Shiqi Yu, “haarcascade lefteye and righteye” http://yushiqi.cn/research/eyedetection
[28] Vukadinovic, D.; Pantic, M.; , “Fully automatic facial feature point detection using
Gabor feature based boosted classifiers” Systems, Man and Cybernetics, 2005 IEEE
International Conference on , vol.2, pp. 1692- 1698, 10-12 Oct. 2005
92
Scarica