UNIVERSIT ` A DEGLI STUDI DI FIRENZE Facolt` a di Ingegneria - Dipartimento di Sistemi e Informatica Tesi di Laurea Ingegneria Informatica Riconoscimento di gesti con Microsoft Kinect Candidato Lorenzo Usai Relatore Prof. Alberto Del Bimbo Correlatori Ing. Lorenzo Seidenari Ing. Andrew Bagdanov Anno Accademico 2010-2011
86
Embed
85625620 Kinect Hand Tracking and Pose Recognition
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
UNIVERSITA DEGLI STUDI DI FIRENZEFacolta di Ingegneria - Dipartimento di Sistemi e Informatica
Tesi di Laurea Ingegneria Informatica
Riconoscimento di gesticon Microsoft Kinect
CandidatoLorenzo Usai
RelatoreProf. Alberto Del Bimbo
CorrelatoriIng. Lorenzo Seidenari
Ing. Andrew Bagdanov
Anno Accademico 2010-2011
alla mia mamma
i
“La preoccupazione dell’uomo e del suo destino deve sempre costituire
l’interesse principale di tutti gli sforzi tecnici; non dimenticatelo mai, in
mezzo ai vostri diagrammi e alle vostre equazioni”
Albert Einstein
“Ecco i pazzi. I disadattati. I ribelli. I contestatori. Puoi citarli,
disapprovarli, glorificarli o denigrarli. Ma cio che non potrai fare e ignorarli.
Perche sono quelli che cambiano le cose. Fanno progredire l’umanita.
Perche le persone cosı pazze da pensare di poter cambiare il mondo...sono
Oggigiorno e cambiato il modo con cui gli utenti utilizzano il computer: sia-
mo passati da macchine disegnate con lo scopo di essere utilizzate solo da un
ristretto gruppo di esperti a dispositivi sempre piu semplici da utilizzare e
sempre piu alla portata di tutti. Questa evoluzione del cambiamento di uti-
lizzo dell’elaboratore ha ovviamente influenzato il modo con cui gli utenti si
approcciano a questo, introducendo il concetto di interfaccia. Tutti utilizzia-
mo interfacce grafiche basate sul paradigma GUI (Graphical User Interface)
per interagire con le applicazioni mediante icone, finestre, menu e sistemi di
puntamento [15]. Nell’ultimo periodo tuttavia siamo di fronte ad una ulte-
riore evoluzione, grazie alla quale stiamo passando da interfacce di tipo GUI
ad interfacce di tipo NUI (Natural User Interface) il cui obiettivo e quello
di favorire l’interazione dell’utente con l’applicazione, permettendogli di po-
ter dialogare con la macchina in modo naturale, ovvero utilizzando lo stesso
linguaggio utilizzato normalmente nella vita toccando gli oggetti, facendo
domande, muovendosi [9].
L’interazione naturale e definita come l’abilita di interagire con il mon-
do digitale senza la necessita di dispositivi fisici artificiali e obsoleti come
controller o joystick che impediscono il naturale modo con cui le persone co-
municano fra di loro e con l’ambiente. L’interazione naturale e definita in
termini di esperienza: le persone comunicano in maniera naturale tramite
espressioni vocali, gesti, emozioni esplorando gli ambienti attraverso la vi-
sione e la manipolazione di oggetti fisici: la chiave e quindi permettere loro
di interagire con la tecnologia nello stesso modo con cui interagiscono con la
realta tutti i giorni. La rivoluzione che stiamo vivendo e quindi il passaggio
da sistemi che si adattano all’utente a sistemi che permettono la sua intera-
v
zione: l’utente non e piu visto come elemento finale del progetto ma come
punto di partenza. Sta mutando quindi la definizione di utente, passando
da fattore umano, sostanzialmente passivo al sistema, ad attore umano, un
individuo attivo, capace di controllo e di scelta. Sono i sistemi che devono
adattarsi agli utenti e non viceversa [15].
Recentemente l’interazione naturale ha subito un notevole impulso grazie
al lancio sul mercato di Microsoft Kinect, un accessorio della console Xbox
3601 che permette di interagire con i videogame senza l’utilizzo di controller
fisici: con Microsoft Kinect e possibile un’interazione realmente naturale con
il gioco, dato che i giocatori possono “calciare la palla” oppure “giocare” con
altri giocatori. Grazie alle API disponibili per interagire con il dispositivo,
e possibile utilizzare Microsoft Kinect non solo nel campo dei videogame,
ma come sensore per realizzare ambienti di interazione uomo-macchina in
cui gli utenti utilizzano le interfacce senza l’utilizzo di controller fisici ma
semplicemente utilizzando i gesti delle mani e del corpo, afferrando oggetti e
spostandoli come nella realta.
La maggior parte delle applicazioni di interazione naturale che utilizzano
Microsoft Kinect permettono all’utente di interagire con oggetti e contenuti
digitali sfruttando il meccanismo della persistenza, dato che il dispositivo non
offre un meccanismo automatico di riconoscimento della posa delle mani. In
base a questo meccanismo l’utente per iniziare ad interagire con gli oggetti
deve posizionare la mano sopra di questi per un certo tempo. Tuttavia nella
vita di tutti i giorni noi non interagiamo con gli oggetti attraverso la persi-
stenza ma utilizzando le mani per afferrarli e manipolarli.
L’obiettivo di questo lavoro di tesi consiste nella realizzazione di un siste-
ma capace di offrire all’utente questo tipo di interazione. A tale scopo occorre
localizzare ad ogni frame la posizione delle mani degli utenti, determinando
se queste sono aperte oppure chiuse. Determinare la posizione delle mani e il
loro stato costituisce quindi la base per la realizzazione di interfacce che con-
1www.xbox.com
vi
sentono all’utente un’interazione realmente naturale con l’applicazione. Nei
prossimi capitoli verra descritto il metodo proposto. Il primo capitolo con-
tiene una panoramica sul funzionamento di Microsoft Kinect, illustrandone
le caratteristiche tecniche, le API disponibili per interagire con la periferica
e la tecnologia utilizzata per il calcolo della mappa di profondita della scena.
Nel secondo capitolo viene affrontato il problema della localizzazione del-
le mani degli utenti all’interno del frame; in particolare viene proposta una
soluzione al problema dell’inizializzazione del tracker di libreria. Nel terzo
capitolo viene studiato il problema centrale della tesi, ovvero la costruzione
di un classificatore per il riconoscimento dello stato delle mani degli utenti;
nel capitolo viene descritta la procedura seguita per la costruzione del dataset
di immagini e lo studio effettuato su tali immagini per la scelta del descrit-
tore da utilizzare per la costruzione del classificatore. Nel quarto capitolo
viene descritta la soluzione proposta per la realizzazione del classificatore,
mentre nel quinto capitolo vengono riportati alcuni risultati sperimentali
che ne dimostrano l’accuratezza e la robustezza. Infine nel sesto capitolo
e illustrata una soluzione per poter utilizzare il sistema progettato al fine di
implementare applicazioni di interazione naturale.
vii
Capitolo 1
Microsoft Kinect
In questo capitolo viene presentato Microsoft Kinect descrivendone le
caratteristiche tecniche, la tecnologia utilizzata per il calcolo della map-
pa di profondita della scena e le principali API software disponibili per
interfacciarsi con il dispositivo.
Microsoft Kinect e una periferica per la console Xbox 360 che permette di
interagire con i videogiochi senza l’utilizzo di controller fisici. A differenza
delle altre console presenti sul mercato, come ad esempio Nintendo Wii op-
pure Sony PlayStation, i giocatori interagiscono con i videogiochi solo con
movimenti del corpo e comandi vocali. Microsoft Kinect offre quindi all’u-
tente la possibilita di vivere un’esperienza di gioco molto piu coinvolgente
rispetto ai videogame tradizionali. Dal 2010 (anno di lancio) ad oggi Mi-
crosoft Kinect sta diventando sempre piu oggetto di studio per ricercatori e
sviluppatori di sistemi di human pose recognition perche in grado di resti-
tuire in real-time una mappa di profondita della scena abbastanza precisa,
realizzando un ottimo compromesso fra prestazioni e costo (il prezzo infatti
e di circa 150 $).
1.1 Hardware
Microsoft Kinect e costituito da una barra orizzontale connessa ad una base
con un perno motorizzato, capace di ruotare il sensore attorno al suo asse
1
CAPITOLO 1. MICROSOFT KINECT
orizzontale. Il dispositivo mostrato in figura 1.1 e dotato di:
• telecamera a colori RGB in tecnologia CMOS;
• proiettore di pattern luminosi in luce IR;
• telecamera IR in tecnologia CMOS;
• array di microfoni.
Perno motorizzato
Led di stato
Array di microfoni
(a) Vista esterna: il led di stato indica la connessione della periferica al PC;
l’array di microfoni (che non si vede) e disposto internamente lungo tutta la
lunghezza del frontalino.
Proiettore pattern IR
Telecamera RGB Telecamera IR
(b) Vista interna: si nota la coppia proiettore-telecamera IR che permette la
ricostruzione 3D della scena e la telecamera a colori RGB.
Figura 1.1: Microsoft Kinect
2
CAPITOLO 1. MICROSOFT KINECT
1.2 Calcolo della mappa di profondita
Le immagini di profondita semplificano molti problemi di computer-vision e
di interazione come ad esempio:
• rimozione del background e segmentazione della scena;
• tracking di oggetti e persone;
• ricostruzione 3D degli ambienti;
• riconoscimento della posa del corpo;
• implementazione di interfacce basate su gesti.
1.2.1 Tecnologie per il calcolo della mappa di profon-
dita della scena
Diamo innanzitutto la definizione di mappa di profondita della scena:
Definizione 1.2.1 (Mappa di profondita) La mappa di profondita della
scena e un’immagine M di dimensione m × n, in cui ciascun pixel p(x, y)
codifica la distanza nella scena 3D del punto (x, y) dal sensore.
In letteratura esistono molte tecniche per calcolarla e le piu utilizzate sono:
• triangolazione stereo: la scena e ripresa da due telecamere e una volta
nota la geometria del sistema (la distanza tra le telecamere e i parame-
tri interni) e possibile determinare la profondita di un oggetto a partire
dalla posizione dei pixel che lo rappresentano nelle due immagini, dato
che lo scostamento tra i punti e legato alla distanza di tale oggetto
dal sistema [1]. Questa tecnica presenta molti svantaggi, in particolare
la necessita di utilizzare (almeno) due telecamere calibrate. Inoltre la
risoluzione delle immagini 3D dipende da numerosi fattori come l’illu-
minazione della scena, la qualita delle telecamere, la quantita di dettagli
presenti nella scena stessa. Altro svantaggio e dato dall’impossibilita
di calcolare la mappa di profondita con un frame-rate elevato poiche
sono necessarie molte operazioni di processing;
3
CAPITOLO 1. MICROSOFT KINECT
• time-of-flight : questa tecnica utilizza solo una telecamera. Nella scena
viene proiettato un segnale luminoso (in genere infrarosso) e la profon-
dita e calcolata studiando la distorsione che tale segnale subisce quando
entra in contatto con gli oggetti [13]. Diversamente dalla triangolazione
stereo questa tecnica utilizza una sola telecamera e permette di ottenere
una mappa 3D ad una risoluzione che non dipende dalle condizioni di
illuminazione della scena e dalla sua complessita. Tuttavia presenta co-
munque alcuni svantaggi come il costo elevato del sistema e la necessita
di utilizzare meccanismi per la soppressione di rumore ed interferenze;
• proiezione di pattern: questa tecnica utilizza un sistema di visione ste-
reo costituito da una coppia proiettore-telecamera. Nella scena viene
proiettato un pattern luminoso (infrarosso) noto e la profondita degli
oggetti e calcolata studiando la sua distorsione sugli oggetti. E possibile
implementare questa tecnica con varie tecnologie:
– proiezione di linee (figura 1.2) e studio della loro curvatura sugli
oggetti: non molto veloce e soggetta a disturbi quando gli oggetti
sono in movimento;
Figura 1.2: Proiezione di fasci di luce IR nella scena
– proiezione di pattern 2D periodici e studio del loro scostamento
quando colpiscono gli oggetti: l’informazione 3D e ottenuta in
real-time ma non e in grado di lavorare su lunghe distanze per via
della distorsione del pattern;
4
CAPITOLO 1. MICROSOFT KINECT
– proiezione di pattern 2D pseudo-casuali: anche in questo caso i
pattern sono 2D (figura 1.3) ma la loro randomicita permette di
ottenere accurate mappe 3D in real-time con un sistema molto
semplice ed economico.
Figura 1.3: Proiezione di pattern 2D
1.2.2 Tecnologia PrimeSense
Microsoft Kinect costruisce la mappa di profondita della scena utilizzando
come tecnologia la proiezione di pattern pseudo-casuali, mediante un sistema
di visione stereo costituito da un proiettore IR e da una telecamera sensibile
alla stessa banda. Questa tecnologia e stata brevettata nel 2005 [16] da
Zalevsky, Shpunt, Maizels e Garcia, sviluppata e integrata in un chip dalla
compagnia israeliana PrimeSense 1. Il sistema mostrato in figura 1.4a e
costituito da 3 elementi principali:
1. proiettore di pattern pseudo-casuali IR;
2. telecamera IR (in tecnologia CMOS);
3. unita di controllo (chip PS1080).
Il proiettore e molto semplice ed economico ed e costituito da un emettitore
di raggi IR e da un generatore di pattern che devia tali raggi nella scena
imprimendo ad essi angolazioni pseudo-casuali. Una volta proiettato il pat-
tern, la telecamera acquisisce l’immagine IR della scena contenente il pattern
distorto e la invia all’unita di controllo che costruisce cosı la mappa di pro-
fondita della scena, come mostrato in figura 1.4b.
1www.primesense.org
5
CAPITOLO 1. MICROSOFT KINECT
(a) Sistema brevettato costituito da proiettore e telecamera IR
e dall’unita di controllo
(b) Il chip PS1080 ricostruisce la mappa di profondita a partire
dall’immagine ripresa dalla telecamera IR
Figura 1.4: Tecnologia PrimeSense per la ricostruzione della mappa di
profondita della scena 6
CAPITOLO 1. MICROSOFT KINECT
Con questo sistema e necessario acquisire una singola immagine e quindi uti-
lizzare un singolo algoritmo di matching per determinare la profondita degli
oggetti (dato che l’altra “immagine” e costituita dal pattern originale che e
noto). L’unita di controllo, conoscendo la struttura del pattern proiettato,
calcola lo scostamento fra i punti proiettati e quelli ripresi dalla telecamera
determinando in questo modo la mappa di profondita della scena (figura 1.5).
(a) Immagine della scena illuminata dal
pattern IR
(b) La mappa di profondita e ricostrui-
ta a partire dall’immagine della scena
illuminata dal pattern proiettato
Figura 1.5: Ricostruzione della mappa di profondita della scena
La dimensione dei punti proiettati, la loro forma e orientazione non e costante
ma dipende dalla distanza dal sensore. Il brevetto individua tre differenti ti-
pologie di punti per tre differenti regioni dello spazio come mostrato in figura
1.6: una prima regione R1 (0.8 - 1.2 m) in cui si ha la massima risoluzione,
una seconda regione R2 (1.2 - 2 m) con una buona accuratezza e una terza
regione R3 (2 - 3.5 m) dove l’accuratezza e scarsa.
PrimeSense non ha solo sviluppato un nuovo sistema di acquisizione del-
la mappa 3D della scena, ma soprattutto una tecnologia capace di elaborare
questi dati realizzando molti task di processing 3D. Infatti il chip PS1080
ha al suo interno molte funzionalita di processing per il tracciamento, la
ricostruzione della scena, il riconoscimento di gesti.
7
CAPITOLO 1. MICROSOFT KINECT
Figura 1.6: Regioni dello spazio individuate dal brevetto PrimeSense
1.3 Caratteristiche tecniche
In tabella 1.1 sono riportate le caratteristiche tecniche di Microsoft Kinect.
Field of View 58◦H,45◦V,70◦D
Risoluzione x/y (a 2 m dal sensore) 3 mm
Risoluzione z (a 2 m dal sensore) 10 mm
Range di lavoro 0.8 m - 3.5 m
Interfaccia USB 2.0
Consumo 2.25 W
Immagine di profondita 640× 480 pixel
Immagine a colori RGB 640× 480 pixel
Frame-rate 30 fps
Stream audio 4 canali 16 bit (fc 16KHz)
Tabella 1.1: Caratteristiche tecniche di Microsoft Kinect
La caratteristica principale di Microsoft Kinect e quella di essere uno scanner
3D con un ottimo compromesso fra costi e prestazioni. Difatti anche se la ri-
soluzione e molto inferiore rispetto ai tradizionali scanner 3D, sta diventando
8
CAPITOLO 1. MICROSOFT KINECT
sempre piu oggetto di studio nel campo dell’interazione naturale come siste-
ma di acquisizione economico e con sufficienti prestazioni per la realizzazione
di interfacce applicabili a qualsiasi contesto.
1.4 API Software
E possibile sviluppare applicazioni con Microsoft Kinect mediante l’utiliz-
zo di API software, che realizzano un’interfaccia tra il dispositivo fisico e
l’applicazione.
1.4.1 OpenNI (Open Natural Interaction)
OpenNI [11] e un framework open-source multi-language e cross-platform
che offre allo sviluppatore una serie di API software per lo sviluppo di appli-
cazioni di interazione naturale, utilizzabile per tutti i sensori costruiti attorno
alla tecnologia PrimeSense (Microsoft Kinect non e l’unico sensore esistente,
anche se sicuramente e il piu famoso). OpenNI rappresenta una API stan-
dard per realizzare la comunicazione tra l’output proveniente dai sensori fisici
(immagini RGB, mappa di profondita e stream audio) e moduli software che
elaborano tali dati per realizzare funzionalita di processing 3D come il trac-
king di oggetti e persone nella scena e il riconoscimento di gesti di alto livello.
OpenNI mette a disposizione quindi sia API per interagire con il dispositivo
fisico, che API per interagire con i moduli software realizzando una totale
indipendenza tra questi (ovvero le API di elaborazione sono indipendenti
dal sensore utilizzato) offrendo cosı agli sviluppatori la possibilita di scrive-
re algoritmi utilizzando i dati “grezzi” provenienti dal sensore oppure dati
piu “complessi” provenienti dall’elaborazione 3D. PrimeSense ha sviluppato
uno di questi componenti software chiamato NITE (Natural Interaction
Technology for End-user) [12] non open source. NITE utilizza algoritmi
di computer-vision per realizzare:
• segmentazione della scena: processo per individuare gli utenti e gli
oggetti presenti nella scena separandoli dal background ;
9
CAPITOLO 1. MICROSOFT KINECT
• hand-tracking : processo per individuare e tracciare le mani degli utenti;
• full-body-tracking : utilizzando l’output proveniente dalla segmentazio-
ne della scena realizza il tracking degli utenti, tracciando nel tempo la
posizione delle loro parti del corpo.
1.4.2 SDK Microsoft
Con il lancio di Kinect, Microsoft ha rilasciato anche la propria SDK ufficiale
[8] per gli sviluppatori. La libreria permette di ottenere i flussi provenienti
dal sensore offrendo inoltre funzionalita di processing 3D, in particolare un
tracker di utenti molto preciso che non necessita della posa di inizializzazione
e che supporta al massimo due utenti.
1.4.3 Libfreenect
Libreria open source [10] (ottenuta come reverse engeneering della periferi-
ca) che offre una semplice interfaccia con il dispositivo: restituisce soltanto
l’output proveniente dai sensori e non implementa nessuna funzionalita di
processing 3D di alto livello.
1.4.4 API utilizzata
Per questo lavoro di tesi abbiamo utilizzato la libreria OpenNI con il modulo
software NITE. Infatti sia OpenNI che la libreria Microsoft offrono allo svi-
luppatore non solo la possibilita di processare l’output “grezzo” proveniente
dal sensore, ma anche di utilizzare numerose risorse software di processing
3D. La scelta di utilizzare OpenNI e da giustificarsi per una serie di motivi:
1. offre la possibilita di realizzare applicazioni indipendenti sia dal sensore
che dal modulo software utilizzato (permettendo anche di svilupparne
di nuovi), a differenza della libreria Microsoft;
2. non pone vincoli sul fine delle applicazioni sviluppabili, mentre Mi-
crosoft concede la propria SDK per sviluppare solo applicazioni non
commerciali;
10
CAPITOLO 1. MICROSOFT KINECT
3. esistono versioni per i principali sistemi operativi (Windows, Linux e
Mac OSX) sia a 32 che a 64 bit;
4. e in grado di tracciare tutti gli utenti che occupano la scena, a differenza
della SDK che permette di tracciarne solo due.
11
Capitolo 2
Localizzazione e tracciamento
delle mani
Questo capitolo affronta il problema della localizzazione e del traccia-
mento della posizione delle mani degli utenti nello spazio. Per il trac-
ciamento delle mani si utilizza il tracker della libreria e nel capitolo e
presentato un metodo per la sua inizializzazione.
Passiamo quindi ad affrontare il primo problema, ovvero quello di determi-
nare la posizione delle mani degli utenti che si trovano all’interno della scena.
L’obiettivo e quello di realizzare un sistema capace di tracciare le mani degli
utenti nello spazio reale 3D, fornendo ad ogni frame la localizzazione della
loro posizione nel piano immagine 2D.
2.1 Strumenti offerti dalla libreria
La libreria OpenNI (ovvero il suo modulo NITE ) contiene al suo interno un
sistema basato sulla mappa di profondita per la localizzazione ed il traccia-
mento delle mani degli utenti nello spazio reale 3D. In particolare esistono
due sistemi per il raggiungimento dello scopo:
• hand-tracker : localizza e traccia le mani degli utenti nello spazio reale
3D, determinandone ad ogni frame la posizione;
12
CAPITOLO 2. LOCALIZZAZIONE E TRACCIAMENTO DELLE MANI
• full-body-tracker : localizza e traccia gli utenti nello spazio reale 3D,
determinando ad ogni frame posizione e angolazione dei giunti del
corpo.
Vista la disponibilita di questi due strumenti, appare superfluo per questo
lavoro di tesi sviluppare un sistema di localizzazione e tracciamento delle
mani degli utenti, mentre risulta piu conveniente concentrarsi sullo sviluppo
di un sistema per riconoscere la posa delle loro mani. Inoltre entrambi questi
sistemi risultano precisi e robusti alle occlusioni, anche se presentano alcuni
problemi:
• l’hand-tracker necessita di conoscere come input iniziale la coordinata
della mano da tracciare come punto nello spazio reale 3D; inoltre e
necessario reinizializzarlo nel caso in cui non sia in grado, per qualche
frame, di determinare la posizione della mano che stava tracciando (ad
esempio perche e occlusa). Per risolvere questo problema sono pos-
sibili molti approcci. Nella documentazione della libreria e suggerito
di utilizzare una focus gesture (ad esempio tap, swipe, circle): NI-
TE possiede un sistema capace di riconoscere se all’interno della scena
un utente sta effettuando questa gesture della mano, determinando la
coordinata in cui questa e stata rilevata: basta quindi utilizzare questa
coordinata per inizializzare il tracker. Un’altra soluzione consiste nel
posizionare la mano in una particolare regione dello spazio (nota), da
cui e possibile determinare la coordinata e quindi inizializzare il tracker.
Altra soluzione consiste invece nell’effettuare un threshold della mappa
di profondita della scena con un valore di soglia predefinito: quando
l’utente posiziona le mani ad una distanza dal sensore inferiore a tale
valore, e possibile localizzare la posizione delle mani e quindi inizializ-
zare il tracker. Tutti questi approcci risolvono il problema dell’inizia-
lizzazione, tuttavia progettare un’applicazione di interazione naturale
utilizzando uno di questi, la rende difficilmente utilizzabile dagli utenti
dato che questi sono “costretti” ad effettuare alcune azioni, come una
particolare gesture della mano, posizionarsi in una specifica area della
scena per effettuare il threshold ;
13
CAPITOLO 2. LOCALIZZAZIONE E TRACCIAMENTO DELLE MANI
• il full-body-tracker richiede la calibrazione iniziale degli utenti per poter
procedere al loro tracciamento. La calibrazione consiste nel far assu-
mere al giocatore una specifica posa come mostrato in figura 2.1 (detta
“posa a ψ”) necessaria al tracker per determinare la posizione inizia-
le dei giunti del corpo e iniziare cosı il loro tracciamento nello spazio.
L’assumere questa posa innaturale non e accettabile in contesti di in-
terazione naturale. Recentemente e stata rilasciata una nuova versione
della libreria (NITE 1.5 ) che non richiede la calibrazione iniziale degli
utenti: tuttavia il tracciamento che ne consegue non e affatto preciso e
commette errori nella posizione dei giunti anche di diversi centimetri,
il che e molto critico per un sistema di localizzazione delle mani, dato
che queste occupano un’area all’interno del frame molto piccola.
Figura 2.1: Posa di calibrazione.
Per questo lavoro di tesi abbiamo scelto di utilizzare l’hand-tracker, sia perche
il full-body-tracker presenta i problemi di cui abbiamo discusso in precedenza,
sia perche per questo lavoro non e necessario conoscere la posizione di tutti i
giunti del corpo ma solo quella delle mani. Inoltre l’hand-tracker risulta es-
sere molto robusto e computazionalmente efficiente. Resta quindi da trovare
una soluzione per l’inizializzazione sia all’avvio dell’applicazione che durante
la sua esecuzione, nel caso in cui il tracker non sia in grado di individuare la
posizione delle mani per qualche frame.
14
CAPITOLO 2. LOCALIZZAZIONE E TRACCIAMENTO DELLE MANI
2.2 Threshold adattivo
La difficolta dell’inizializzazione dell’hand-tracker consiste nel determinare la
posizione iniziale delle mani degli utenti che si trovano nella scena senza che
questi assumano posizioni o pose particolari.
La libreria offre alcuni strumenti utili per lo scopo. Infatti per ogni utente
presente nella scena:
• e in grado di localizzare la sua posizione nello spazio come punto 3D,
che chiameremo centro di massa CdM := (xc, yc, zc);
• e in grado di costruire un’immagine, che chiameremo mappa utente,
contenente la sua silhouette, definita come l’insieme dei punti risultan-
te dalla proiezione del corpo dell’utente nel piano immagine 2D come
mostrato in figura 2.2.
Figura 2.2: Ricostruzione della mappa utente.
La silhouette e ottenuta mediante la background-subtraction del cor-
po dell’utente che si muove all’interno della scena ed e robusta alle
occlusioni, ovvero NITE non effettua semplicemente una foreground-
segmentation nel 2D ma sfrutta le informazioni 3D a disposizione per
segmentare correttamente gli utenti che si occludono, dato che questi
si trovano comunque a distanze differenti, come nell’esempio di figura
2.3. La mappa utente e quindi un’immagine in cui ciascun pixel codifica
l’identita di quel punto all’interno della scena.
15
CAPITOLO 2. LOCALIZZAZIONE E TRACCIAMENTO DELLE MANI
(a) Immagine RGB (b) Mappa utente
Figura 2.3: Le mappe utente sono segmentate correttamente sfruttando le
informazioni del 3D.
Sfruttando questi due strumenti possiamo realizzare una procedura capace di
localizzare la posizione iniziale delle mani dell’utente. L’idea di base consiste
nell’effettuare un threshold adattivo della mappa di profondita, ovvero un
threshold il cui valore di soglia dipende dalla posizione dell’utente all’interno
della scena. Con il threshold si ottiene un’ immagine binaria contenente tutto
quello che sulla mappa di profondita si trova oltre soglia.
Sia M la mappa di profondita proveniente dal sensore e δ un valore espresso
in millimetri. Fissiamo con s = zc + δ il valore della soglia. Calcolando
il threshold della mappa di profondita con il valore di soglia s si ottiene la
mappa sogliata definita come:
Ms = {p(x, y) ∈M | p(x, y) < s}
La mappa sogliata Ms e un’immagine binaria che contiene la proiezione nello
spazio proiettivo 2D di tutto quello che nello spazio reale si trova di fronte
all’uente. In particolare quando l’utente discosta le mani dal corpo, pro-
tendendole in avanti, la mappa di profondita sogliata conterra due blob che
rappresentano la proiezione delle mani nel piano immagine. In questo modo
e quindi possibile localizzare le mani nel piano immagine, convertire la loro
posizione in punti 3D e quindi iniziare il loro tracciamento.
16
CAPITOLO 2. LOCALIZZAZIONE E TRACCIAMENTO DELLE MANI
Osservazione 2.2.1 E ovvio che se l’utente non muove le mani e non le
porta avanti al suo corpo, non e possibile localizzarle: per questo occorre
progettare un’interfaccia dell’applicazione che stimoli l’utente a scostare le
mani dal suo corpo portandole avanti.
2.3 Utilizzo della silhouette
La maschera binaria ottenuta con il threshold adattivo presenta un inconve-
niente: sogliando la mappa di profondita si ottiene un’immagine contenente
non solo la proiezione delle mani, ma ovviamente anche la proiezione di tutto
quello che si trova oltre la soglia nella mappa di profondita. Ad esempio, se ci
sono oggetti davanti all’utente, oppure se sono presenti altri utenti piu vicini
al sensore, l’immagine binaria conterra non solo i blob delle mani dell’utente
che stiamo considerando ma anche la proiezione di questi, come nell’esempio
di figura 2.4b. Per risolvere questo problema combiniamo la mappa sogliata
Ms con la mappa utente Mu costruendo cosı un’immagine, che chiameremo
mappa delle mani, contenente solo la proiezione delle mani dell’utente nel
piano immagine 2D, come nell’esempio di figura 2.4d. La mappa delle mani
e definita come:
Mm = Ms ∧ Mu = {p(x, y) ∈Ms | p(x, y) ∈Mu}
La mappa delle mani contiene due blob: per discriminare quale dei due si
riferisce alla mano destra e quale alla mano sinistra basta determinare la
posizione rispetto al centro di massa dell’utente.
2.4 Inizializzazione dell’hand-tracker
Conoscendo dunque la posizione delle mani, come proiezione nello spazio rea-
le 3D dei pixel appartenenti alla mappa delle mani, e possibile inizializzare
l’hand-tracker. Consideriamo quindi la mappa delle mani dell’utente: questa
e un’immagine binaria contenente due blob, che rappresentano la proiezione
della mano destra e della mano sinistra sul piano immagine 2D. Per deter-
minare la coordinata di ciascuna mano, calcoliamo per ognuno dei blob il
17
CAPITOLO 2. LOCALIZZAZIONE E TRACCIAMENTO DELLE MANI
(a) Immagine RGB (b) Mappa sogliata Ms
(c) Mappa utente Mu (d) Mappa delle mani Mm
Figura 2.4: Costruzione della mappa delle mani: una volta individuata la
posizione dell’utente nella scena viene calcolata la mappa sogliata la quale,
combinata con la mappa utente, permette di calcolare la mappa delle mani
centroide. Ciascun centroide c rappresenta la coordinata 2D della mano nel
piano immagine. L’hand-tracker tuttavia necessita di conoscere la coordi-
nata della mano nello spazio reale come punto 3D (x, y, z). Per convertire
ciascun centroide c in un punto 3D si utilizza una funzione di libreria, che
necessita di conoscere la coordinata z del punto da convertire (fig.2.5), ovvero
la profondita alla quale si trova la mano rispetto al sensore.
La profondita della mano si ricava dalla mappa di profondita della scena M
come valore di profondita minimo in un intorno di pixel I(c, ρ) di raggio ρ
centrato nel centroide c:
z = minp(x,y)∈I(c,ρ)
M
18
CAPITOLO 2. LOCALIZZAZIONE E TRACCIAMENTO DELLE MANI
Kinect
z
Figura 2.5: Per convertire un punto 2D nel piano immagine in un punto
3D nello spazio reale e necessario conoscere la distanza z di tale punto dal
sensore
2.5 Algoritmo per la localizzazione e il trac-
ciamento delle mani
La procedura vista nella precedente sezione si utilizza per l’inizializzazione
dell’hand-tracker sia all’avvio del sistema che durante la sua esecuzione, nel
caso in cui il tracker fallisca nel rilevare la posizione delle mani dell’utente.
Puo capitare infatti che l’utente occluda la mano con il suo corpo oppure
che un altro utente si interponga tra lui e il sensore: il tracker in questi casi
non e in grado di determinare la posizione della mano e per questo motivo e
necessario re-inizializzarlo utilizzando la stessa procedura. In una visione di
insieme, il sistema per la localizzazione e il tracciamento delle mani mostrato
in figura 2.6, per ogni utente presente nella scena:
1. localizza il centro di massa CdM (xc, yc, zc) (figura 2.7b);
2. crea la mappa utente Mu (figura 2.7c);
3. crea la mappa sogliata Ms mediante un threshold della mappa di pro-
fondita M con un valore di soglia s = zc + 15 cm (e stato scelto di
utilizzare il valore 15 cm poiche rappresenta una distanza sufficiente
per determinare la posizione delle mani quando queste si discostano
dal corpo dell’utente);
19
CAPITOLO 2. LOCALIZZAZIONE E TRACCIAMENTO DELLE MANI
4. crea la mappa delle mani Mm combinando la mappa sogliata Ms con
la mappa utente Mu (figura 2.7d);
5. localizza i centroidi dei blob della mappa delle mani, ovvero le coordi-
nate delle mani nel piano immagine 2D (figura 2.7e);
6. converte i punti 2D in punti 3D, considerando come profondita della
mano il valore z = minp(x,y)∈I(c,ρ)
M ;
7. se e necessario (re)-inizializza il tracker.
La procedura viene calcolata ad ogni frame, cosı da rendere il sistema robusto
rispetto a possibili fallimenti dell’hand-tracker.
20
CAPITOLO 2. LOCALIZZAZIONE E TRACCIAMENTO DELLE MANI
Utente presente nella scena
Localizzazione CdM (xc,yc,zc)
Creazionemappa sogliata Ms
Mappa di profondità M
s = zc + 15 cm Creazionemappa utente Mu
Creazionemappa delle mani Mm
&
blob sinistro blob destro
calcolocentroide
conversione2D → 3D
(re)inizializzareil tracker ?
inizializzazione tracker
SI
calcolocentroide
conversione2D → 3D
(re)inizializzareil tracker ?
inizializzazione tracker
SI
Figura 2.6: Schema del sistema per la (re)inizializzazione dell’hand-tracker
21
CAPITOLO 2. LOCALIZZAZIONE E TRACCIAMENTO DELLE MANI
(a) Utente entra nella scena (b) Localizzazione CdM
(c) Costruzione mappa utente Mu (d) Costruzione mappa delle mani Mm
(e) Localizzazione centroidi (f) Localizzazione delle mani nel frame
Figura 2.7: Non appena l’utente entra nella scena viene localizzato il suo
centro di massa e calcolata la sua silhouette. Con queste informazioni si
calcola la mappa delle mani contenente due blob che rappresentano la proie-
zione delle mani nel piano immagine. Calcolando i centroidi si determinano
le coordinate 2D delle mani, che vengono poi convertiti in punti 3D. Con
tali punti si inizializza l’hand-tracker cosı da individuare ad ogni frame la
posizione delle mani degli utenti nell’immagine RGB.22
Capitolo 3
Riconoscimento dello stato
delle mani
In questo capitolo e stata studiata la realizzazione di un classificatore
per discriminare quando le mani dell’utente sono aperte e quando so-
no chiuse. Per la realizzazione del classificatore e stato innanzitutto
costruito un dataset di immagini e successivamente e stato studiato
un descrittore capace di discriminare quando l’immagine di una mano
si riferisce ad una mano aperta oppure ad una mano chiusa.
Una volta costruito un sistema per la localizzazione e il tracciamento della
posizione delle mani degli utenti nella scena, passiamo ad affrontare lo studio
di un sistema per riconoscerne lo stato.
Definizione 3.0.1 (Stato della mano) Data una mano, il suo stato con-
siste nell’essere aperta oppure chiusa. Una mano si dice aperta quando le
dita non ne occludono il palmo, mentre si dice chiusa altrimenti.
Per determinare lo stato della mano realizziamo un classificatore, ovvero un
sistema di intelligenza artificiale che, data l’immagine di una mano aper-
ta oppure chiusa, e capace di determinarne lo stato. Seguiremo lo schema
mostrato in figura 3.1.
23
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
Segmentazione immagini
Estrazione feature
Costruzione modello
Costruzione dataset
Realizzazione classificatore
Figura 3.1: Schema per la realizzazione del classificatore
3.1 Costruzione del dataset
Per addestrare il classificatore e necessario innanzitutto costruire un dataset
di immagini di mani aperte e chiuse acquisite tramite Microsoft Kinect. Il
dataset e costituito sia da immagini a colori (immagini rgb) che da immagini
di profondita (immagini depth). Per realizzarlo si utilizza il sistema di lo-
calizzazione e tracciamento delle mani, individuando la posizione delle mani
degli utenti nel piano immagine 2D. Conoscendo la posizione della mano al-
l’interno del frame, e possibile ritagliare da questo una immagine della mano
e quindi salvarla. Per ritagliare correttamente l’immagine della mano dal
frame rgb e dal frame della mappa di profondita, occorre che i frame siano
registrati ovvero che ad ogni pixel nella mappa rgb corrisponda lo stesso pixel
nella mappa di profondita. Le immagini provenienti da Microsoft Kinect non
sono registrate, in quanto i sensori si trovano in posizioni fisiche differenti:
esiste tuttavia una funzione di libreria per registrare i flussi provenienti dai
due sensori, risolvendo quindi il problema dell’allineamento delle immagini.
Abbiamo visto in precedenza l’esistenza della funzione di libreria che con-
verte punti sul piano immagine 2D in punti 3D: la stessa funzione e capace di
realizzare anche la conversione inversa, passando da punti nello spazio reale
3D a punti nel piano immagine 2D. In questo modo si ha la localizzazione
delle mani nel piano immagine. E possibile quindi ritagliare da entrambi i
frame un quadrato centrato nel punto del piano immagine in cui e localiz-
zata la mano, ottenendo cosı coppie di immagini rgb-depth registrate come
24
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
mostrato in figura 3.2. La dimensione del quadrato varia in base alla distan-
za dell’utente dal sensore: utilizzando la funzione per la conversione delle
coordinate e possibile infatti scalare il quadrato in modo tale che contenga
sempre al suo interno i pixel appartenenti alle mani degli utenti. Ogni cop-
pia di immagini e quindi salvata in un file con estensione .png indicando nel
nome del file:
• il numero del frame (ogni coppia ha lo stesso numero di frame);
• l’id associato all’utente quando questo entra nella scena;
• se l’immagine si riferisce alla mano destra oppure alla mano sinistra;
• la profondita alla quale e stata localizzata la mano.
Figura 3.2: Una volta localizzata una mano nella mappa rgb, si ritaglia da
questa un quadrato contenente l’immagine della mano; analogamente per le
immagini ritagliate dalla mappa di profondita. Ciascuna coppia rgb-depth
salvata ha lo stesso numero di frame.
25
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
Con questo sistema e stato quindi realizzato un dataset di 8 soggetti,
acquisendo le immagini delle mani aperte e chiuse a differenti distanze dal
sensore. In particolare sono state individuate 4 regioni:
(a) da 1000 a 2000 cm;
(b) da 2000 a 2400 cm;
(c) da 2400 a 2700 cm;
(d) da 2700 a 3000 cm.
Ciascun utente si e quindi spostato fra le quattro regioni muovendo le mani
nello spazio mentre un sistema di acquisizione salvava le coppie di frame.
1000-2000 cm
2000-2400 cm
2400-2700 cm
2700-3000 cm
Figura 3.3: Per la costruzione del dataset ciascun utente si e spostato
all’interno delle quattro regioni.
La tabella 3.1 riassume il contenuto del dataset mentre nella figura 3.4 sono
riportate alcune coppie rgb-depth di immagini di mani aperte e chiuse.
26
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
SOGGETTO IMG. MANO CHIUSA IMG. MANO APERTA
S1 1174 1587
S2 2371 2130
S3 2212 2158
S4 1299 1811
S5 1453 1854
S6 1278 1782
S7 1704 2409
S8 2953 2997
TOT. 14444 16728
Tabella 3.1: Dataset utilizzato.
3.2 Segmentazione delle immagini
Per rendere il classificatore piu robusto, elaboriamo le immagini del data-
set per rimuovere da esse lo sfondo. Guardando i dati a disposizione per
la costruzione del modello, si nota come non sia possibile utilizzare solo le
immagini di profondita. Infatti Microsoft Kinect e molto preciso nel rilevare
la profondita degli oggetti nei pressi del sensore, mentre allontanandosi da
questo risulta piu impreciso. Analizzando infatti le immagini di profondita
del dataset si osserva che, mentre da vicino ci sono sufficienti dettagli per
poter discriminare fra mano aperta e mano chiusa (si riescono a distinguere
le dita della mano), allontanandosi questo non e piu vero. Dato che vogliamo
realizzare un classificatore robusto e il piu possibile invariante rispetto alla
distanza, non e possibile utilizzare solo l’informazione di profondita e occorre
quindi unirla all’informazione delle immagini a colori. Le immagini a colori
d’altro canto hanno il difetto di contenere oltre ai pixel della mano, anche pi-
xel appartenenti allo sfondo (pareti della stanza, altri soggetti presenti nella
scena). Un classificatore addestrato con queste immagini non sarebbe molto
robusto dato che le informazioni che deve apprendere (la forma delle mani)
si trovano ad essere confuse con lo sfondo, come mostrato negli esempi di
27
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
Figura 3.4: Esempi di immagini del dataset.
figura 3.4.
Per rimuovere lo sfondo dalle immagini a colori si utilizzano le immagini
di profondita. Ogni coppia di immagini e stata salvata codificando nel nome
del file la distanza alla quale si trovava la mano nello spazio 3D. Possiamo
quindi utilizzare questo valore per effettuare una sogliatura delle immagini
di profondita cosı da ottenere una maschera binaria contenente un blob che
rappresenta la proiezione della mano nel piano immagine. Usando quindi
questa maschera binaria e possibile estrarre dalle immagini rgb solo i pixel che
si riferiscono alla mano, eliminando cosı lo sfondo. Durante questo processo
le immagini rgb sono convertite in scala di grigio in quanto l’informazione
del colore non e utile nel processo discriminativo (infatti il colore dei pixel
delle mani non cambia nelle immagini delle mani aperte e in quelle delle
mani chiuse). Infine completiamo il processo di elaborazione effettuando un
cropping dell’immagine per ridurre al minimo i pixel che non contengono
contenuto informativo. Il processo di segmentazione e riassunto in figura 3.5,
mentre in figura 3.6 sono riportati alcuni esempi di immagini del dataset
segmentate.
28
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
Immagine a colori
Immagine di profondità
Sogliatura
Maschera binaria&
Immagine priva del background
Cropping
Immagine segmentata
Immaginescala di grigi
D
Figura 3.5: Schema del processo di segmentazione: le immagini di profondita
sono sogliate con un valore pari a D+10 cm dove D e la profondita alla quale
si trovava la mano nello spazio 3D (codificata nel nome del file) mentre il va-
lore 10 cm e stato scelto considerando che una mano rientra sufficientemente
in questo spazio. Con la sogliatura si ottiene una maschera binaria, la quale
e combinata con l’immagine della mano in scala di grigi per rimuovere lo
sfondo.
3.3 Estrazione feature
Per realizzare il classificatore e necessario estrarre da ciascuna immagine un
insieme di feature per ottenere una descrizione compatta. Le feature di una
immagine costituiscono le informazioni principali associate all’immagine stes-
sa grazie alle quali e possibile addestrare il classificatore per discriminare fra
immagini di mani aperte e chiuse. Il classificatore impara cioe a classificare
le immagini in base al valore delle feature ad esse associate. La bonta del
classificatore, ovvero la capacita del modello di classificare correttamente, di-
29
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
Figura 3.6: Esempi di immagini segmentate.
pende dalla capacita delle feature di rappresentare la differenza fra gli stati.
Per questo lavoro di tesi sono state valutate le seguenti feature:
• Momenti di HU;
• SIFT;
• SURF.
3.3.1 Momenti di Hu
I momenti sono feature molto semplici da calcolare che danno informazioni
sulla forma degli oggetti. I momenti di Hu [4] sono 7 particolari momenti
invarianti alla traslazione, alla variazione di scala e alla rotazione. Utilizzando
questo insieme di feature, per ogni immagine del dataset e stato estratto un
vettore di 7 elementi (7 momenti di Hu).
3.3.2 SIFT (Scale Invariant Feature Trasform)
E un algoritmo molto utilizzato in computer vision per rilevare e descrivere
proprieta locali nelle immagini. Le ffeature SIFT sono invarianti alla lumi-
nosita, alla rotazione e alla variazione di scala. L’algoritmo [6] consiste nel
determinare un insieme di punti di interesse, detti keypoint, in corrisponden-
za dei quali sono calcolati i descrittori SIFT, ciascuno costituito da un array
di 128 elementi.
Per questo lavoro non abbiamo estratto i keypoint dalle immagini del data-
set perche a ciascuna immagine deve essere associato un array dello stesso
30
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
numero di elementi. Pertanto abbiamo solo calcolato il descrittore SIFT in
specifici punti. Per ogni immagine di dimensione m × n abbiamo utilizzato
come keypoint il punto centrale (⌊m2
⌋,⌊n2
⌋) e abbiamo calcolato il descrittore
SIFT all’interno di una patch di dimensione r × r con r = min(m,n) posta
al centro dell’immagine, come mostrato in figura 3.7.
Figura 3.7: Estrazione del descrittore nella patch centrata.
3.3.3 SURF (Speeded Up Robust Features)
E un altro descrittore locale [2] invariante alla scala e alla rotazione molto
veloce da calcolare (a differenza di altri descrittori come SIFT). Come per
SIFT, l’algoritmo SURF calcola un descrittore in corrispondenza dei keypoint.
Nell’algoritmo originale ogni descrittore SURF e costituito da un array di 64
elementi, anche se esiste una variante dell’algoritmo, che chiameremo SURF*,
che estrae invece array di 128 elementi.
Come per SIFT non abbiamo calcolato i keypoint ma soltanto il descrittore
in specifici punti delle immagini. Diversamente da SIFT pero non abbiamo
estratto il descrittore SURF solo in corrispondenza del keypoint centrale, ma
abbiamo considerato anche da una griglia densa di quattro e cinque keypoint.
SURF centrato
Abbiamo seguito lo stesso procedimento visto per SIFT calcolando il descrit-
tore all’interno di una patch r × r centrata nell’immagine (di dimensione
m× n) e di dimensione pari a r = min(m,n), come mostrato in figura 3.7.
31
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
Griglia di 4 SURF
Per calcolare la posizione dei keypoint all’interno della griglia partiamo dal-
l’assunzione che ogni patch entro cui e necessario calcolare il descrittore deve
avere la stessa dimensione e che le patch relative a keypoint adiacenti abbia-
no un’intersezione del 50%. Consideriamo quindi un’immagine m × n. Per
estrarre la griglia partiamo individuando la patch posizionata nel centro del-
l’immagine (⌊m2
⌋,⌊n2
⌋) e di dimensione r×r con r = min(m,n). Per estrarre
le sotto-patch in modo tale che siano della stessa dimensione e che abbiano
un’intersezione del 50%, costruiamo una griglia 3 × 3: i keypoint sono dati
dalle intersezioni della griglia. Una volta individuati, per ciascuno di essi si
calcola un descrittore SURF di dimensione pari a 23r (figura 3.8).
Figura 3.8: Estrazione della griglia di 4 SURF.
Griglia di 5 SURF
E realizzata a partire dalla griglia di 4 SURF vista in precedenza, con l’ag-
giunta di un ulteriore keypoint al centro di una patch della stessa dimensione
delle precedenti, come mostrato in figura 3.9.
32
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
Figura 3.9: Estrazione della griglia di 5 SURF.
3.4 Costruzione del modello
Il classificatore e realizzato addestrando una macchina a vettori di supporto
SVM (Support Vector Machine) [7]. Una SVM e un classificatore supervisio-
nato molto utilizzato per risolvere problemi di apprendimento. L’addestra-
mento del classificatore si ottiene fornendo a questo un insieme di esempi di
apprendimento detto training-set : ogni istanza dell’insieme contiene il valore
target, ovvero la classe cui si riferisce l’esempio, e un array di feature che
costituisce l’esempio da apprendere. SVM in base agli esempi di training co-
struisce un modello dei dati, ovvero una funzione capace di discriminare se
un esempio appartiene ad una classe oppure ad un’altra. Una volta costruito
il modello ne viene calcolata l’accuratezza, determinando la classe di appar-
tenenza degli esempi di un altro insieme di dati (diverso dal training-set)
detto test-set. Per ciascun esempio il classificatore determina la classe alla
quale appartiene sfruttando il modello addestrato: alla fine viene determina-
ta l’accuratezza complessiva del classificatore calcolando il numero di esempi
la cui classe e predetta correttamente.
Formulazione Matematica
Consideriamo un training-set di l esempi di apprendimento, costituito da cop-
pie (xi, yi) dove xi ∈ Rn rappresenta l’esempio da apprendere e yi ∈ {−1, 1}l’etichetta che indica la classe alla quale appartiene l’esempio. L’obiettivo di
33
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
SVM e quello di risolvere il seguente problema di ottimizzazione vincolata:
minw,b,ξ
12wTw + C
l∑i=1
ξi
con i vincoli yi(xTφ(xi) + b) ≥ 1− ξi
ξi ≥ 0
La funzione φ : Rn → RN mappa gli esempi xi in uno spazio di dimensio-
ne N >> n (potenzialmente infinita). La mappatura in realta non viene
mai calcolata in quanto al posto di risolvere il problema come espresso in
precedenza, viene risolto il problema duale:
minα
12αTQα− eTα
con i vincoli yTα = 0
0 ≤ αi ≤ C
dove C > 0 e Q = yiyjK(xi, xj) e una matrice l × l semi-definita positiva.
La funzione K(xi, xj) = φ(xi)Tφ(xj) e detta kernel. In letteratura sono
disponibili molti kernel utilizzabili a seconda del problema da trattare. Per
questo lavoro e stato utilizzato il kernel RBF (Radial Basis Function):
K(xi, xj) = exp(−γ||xi − xj||2), γ > 0
Il processo di ottimizzazione consiste nel determinare l’iperpiano che meglio
separa i punti nello spazio suddividendoli in base alla classe di appartenen-
za. Il risultato del processo di ottimizzazione e dato da un insieme di vettori
αi 6= 0 detti vettori di supporto che costituiscono il modello SVM insieme agli
esempi xi corrispondenti. I parametri C e γ ottimi sono ottenuti mediante la
cross-validazione sul training-set, variandoli su una griglia logaritmica (ov-
vero C = 2−5, 2−4, . . . , 215, γ = 2−15, 2−14, . . . , 26): la coppia ottima C∗, γ∗ e
quella con la quale si ottiene il minor errore di classificazione e viene utiliz-
zata per addestrare il modello sul training-set.
Nel nostro caso il classificatore e un classificatore binario, dato che le classi
che deve discriminare sono due e sono “mano aperta” e “mano chiusa”. Ogni
esempio fornito a SVM e quindi costituito da una coppia etichetta-valore in
34
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
cui l’etichetta e uguale a 1 se l’esempio si riferisce ad un’immagine di “mano
aperta” oppure 0 se si riferisce ad un’immagine di “mano chiusa” mentre il
valore e dato dall’array di feature estratto con una delle tecniche viste nella
precedente sezione.
3.4.1 Scelta del descrittore
Sono stati realizzati numerosi esperimenti per determinare la migliore confi-
gurazione di feature da utilizzare per la realizzazione del classificatore, uti-
lizzando un sottoinsieme del dataset costituito da tre soggetti S1, S2 e S3.
Ciascun test consiste nell’addestrare un classificatore SVM con kernel RBF
utilizzando come training-set le immagini appartenenti a due soggetti, deter-
minando cosı un modello la cui accuratezza e testata utilizzando le immagini
appartenenti all’altro soggetto come mostrato in tabella 3.2.
TEST TRAINING-SET TEST-SET
T1 S1+S2 S3
T2 S1+S3 S2
T3 S2+S3 S1
Tabella 3.2: Test
Per ciascun criterio di estrazione delle feature sono stati condotti 45 test,
suddividendo ulteriormente il dataset in base alla distanza dal sensore e
distinguendo tra mano destra e sinistra. I test sono stati condotti con la
libreria open source libSVM [3], determinando i parametri C e γ ottimi per
ciascun modello mediante una 5-fold cross-validation. Nelle figure seguenti
sono riportati i risultati dei test, da cui possiamo fare alcune considerazioni:
• i momenti di Hu (figura 3.10) non sono un buon descrittore per lo stato
della mano. E vero infatti che la forma di una mano aperta e molto
diversa da quella di una mano chiusa, ma questo non e sempre vero se
si considera la rotazione della mano e la sua distanza dal sensore ed
infatti i risultati ottenuti con questo descrittore sono molto scadenti;
35
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
• SIFT (figura 3.11) ha dato dei risultati decisamente migliori rispetto
ai momenti di Hu, ma comunque inferiori a quelli ottenuti utilizzando
SURF sia nella versione base con array di 64 elementi (figura 3.12)
che, soprattutto, nella sua versione con array di 128 elementi (figura
3.13). L’invarianza alla luminosita del descrittore SIFT risulta essere
uno svantaggio per questo problema in quanto nella discriminazione tra
mano aperta e mano chiusa le ombre che si creano nelle immagini delle
mani giocano un ruolo chiave per la classificazione. Per questo motivo
non si e ritenuto opportuno effettuare dei test utilizzando griglie di
SIFT ma abbiamo effettuato solo test utilizzando griglie di SURF;
• i risultati ottenuti utilizzando le griglie di SURF (figure 3.14, 3.15, 3.16,
3.17) sono i migliori, in particolare il miglior descrittore risulta essere
quello costituito dalla griglia di 5 SURF* nella versione a 128 feature,
con una lunghezza complessiva del descrittore di 5x128 = 640 elementi;
• effettuare i test al variare della distanza dal sensore e stato molto utile
per avere un’idea di come varia l’accuratezza in base alla profondita;
• separando invece i dataset in base alle mani si sperava in un forte
miglioramento dell’accuratezza media, che invece non si e realizzato.
I test sono quindi serviti per determinare quale descrittore utilizzare per