85625620 kinect hand tracking and pose recognition
DESCRIPTION
interactivityTRANSCRIPT
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
quelle che lo cambiano per davvero.”
Think Different, Apple
ii
Indice
Introduzione v
1 Microsoft Kinect 1
1.1 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Calcolo della mappa di profondita . . . . . . . . . . . . . . . . 3
1.2.1 Tecnologie per il calcolo della mappa di profondita
della scena . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 Tecnologia PrimeSense . . . . . . . . . . . . . . . . . . 5
1.3 Caratteristiche tecniche . . . . . . . . . . . . . . . . . . . . . . 8
1.4 API Software . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.1 OpenNI (Open Natural Interaction) . . . . . . . . . . . 9
1.4.2 SDK Microsoft . . . . . . . . . . . . . . . . . . . . . . 10
1.4.3 Libfreenect . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.4 API utilizzata . . . . . . . . . . . . . . . . . . . . . . . 10
2 Localizzazione e tracciamento delle mani 12
2.1 Strumenti offerti dalla libreria . . . . . . . . . . . . . . . . . . 12
2.2 Threshold adattivo . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Utilizzo della silhouette . . . . . . . . . . . . . . . . . . . . . . 17
2.4 Inizializzazione dell’hand-tracker . . . . . . . . . . . . . . . . . 17
2.5 Algoritmo per la localizzazione e il tracciamento delle mani . . 19
3 Riconoscimento dello stato delle mani 23
3.1 Costruzione del dataset . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Segmentazione delle immagini . . . . . . . . . . . . . . . . . . 27
iii
3.3 Estrazione feature . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3.1 Momenti di Hu . . . . . . . . . . . . . . . . . . . . . . 30
3.3.2 SIFT (Scale Invariant Feature Trasform) . . . . . . . . 30
3.3.3 SURF (Speeded Up Robust Features) . . . . . . . . . . 31
3.4 Costruzione del modello . . . . . . . . . . . . . . . . . . . . . 33
3.4.1 Scelta del descrittore . . . . . . . . . . . . . . . . . . . 35
4 Realizzazione del detector 45
4.1 Costruzione del modello SVM . . . . . . . . . . . . . . . . . . 45
4.2 Calcolo del descrittore . . . . . . . . . . . . . . . . . . . . . . 46
4.3 Predizione dello stato . . . . . . . . . . . . . . . . . . . . . . . 47
4.4 Robustezza del detector . . . . . . . . . . . . . . . . . . . . . 47
4.4.1 Filtro di Kalman . . . . . . . . . . . . . . . . . . . . . 48
4.4.2 Utilizzo del filtro di Kalman . . . . . . . . . . . . . . . 50
5 Risultati sperimentali 52
5.1 Valutazione dell’accuratezza al variare della distanza dal sensore 52
5.2 Valutazione della robustezza del detector . . . . . . . . . . . . 53
5.3 Valutazione dell’inerzia del detector . . . . . . . . . . . . . . . 61
5.4 Valutazione delle prestazioni temporali . . . . . . . . . . . . . 62
6 Progetto di un sistema di riconoscimento di gesti 64
6.1 Protocollo TUIO . . . . . . . . . . . . . . . . . . . . . . . . . 65
Conclusioni 67
A Libreria OpenNI 68
B Libreria miccKinect 72
Bibliografia 75
iv
Introduzione
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
implementare il detector di posa delle mani.
36
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%(1((' /.-("#0"%&%(1((' /.-("#0"%&%(1(('
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" #$%&$'
&(%))'
!" &*%#+'
()%,#'
!" &$%-,'
&*%#*'!+ (,%&,' !+ (+%*+' !+ ()%"('
!, &(%*-' !, &-%$*' !, &$%,('
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" #)%-('
#*%++'
!" ,-%"#'
&&%"$'
!" &"%,$'
&(%,*'!+ &)%$)' !+ ((%,(' !+ &(%")'
!, &,%))' !, ()%))' !, ("%(*'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" &&%&+'
(+%&"'
!" (+%))'
(&%)-'
!" &$%,('
(#%("'!+ ($%,-' !+ (#%#(' !+ $"%(*'
!, (#%(+' !, (*%*)' !, (#%*)'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *"%+&'
(*%,#'
!" ("%))'
(,%&#'
!" ($%*+'
(,%)$'!+ &-%#+' !+ $)%))' !+ (+%#)'
!, (#%,&' !, &-%(+' !, &-%))'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" (-%,)'
&*%)*'
!" (,%#"'
&$%"&'
!" ($%*+'
&$%")'!+ &)%,&' !+ &)%,$' !+ &"%#$'
!, &#%()' !, &$%((' !, &+%))'
(+,-./0'10'23'45'6-7/38-9:
Figura 3.10: Risultati Momenti di Hu (7 features).
37
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%(1((' /.-("#0"%&%(1((' /.-("#0"%&%(1(('
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *,%&,'
*+%-$'
!" *,%+-'
*#%#,'
!" *&%&"'
*#%&"'!+ *#%&#' !+ *&%&+' !+ *&%&,'
!, *)%*&' !, *#%#*' !, *+%#*'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" $*%,*'
*)%,,'
!" $,%,-'
*)%-*'
!" $-%))'
$-%""'!+ $*%)&' !+ *,%-#' !+ $"%+*'
!, *#%&$' !, *&%(+' !, *$%)#'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" $(%-&'
*)%""'
!" $-%,"'
$#%)-'
!" ($%#*'
$-%)"'!+ *(%,*' !+ $$%""' !+ *#%-('
!, $$%))' !, (&%*#' !, *#%&-'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *&%))'
$#%-+'
!" "))%))'
$(%,*'
!" $)%+"'
(#%#)'!+ $(%(*' !+ $,%#)' !+ &&%))'
!, (,%)*' !, &&%$&' !, (*%))'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -)%+-'
*)%*('
!" -(%&&'
$-%*+'
!" $+%&,'
$$%**'!+ $$%,&' !+ (-%(,' !+ **%)+'
!, $#%-&' !, $,%+-' !, $,%")'
;'#*<!'4;=>'6-7/38-9:
Figura 3.11: Risultati 1 SIFT (128 features).
38
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%(1((' /.-("#0"%&%(1((' /.-("#0"%&%(1(('
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *$%$('
*,%(,'
!" *-%#$'
*(%&-'
!" *,%"#'
*#%"-'!+ *#%((' !+ *$%($' !+ *&%-('
!, $*%#$' !, *+%(,' !, *,%#$'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" $$%&-'
*)%)&'
!" *)%**'
*,%**'
!" (*%,-'
$"%$)'!+ $*%,)' !+ *+%,+' !+ (&%&#'
!, *#%+(' !, **%##' !, *"%"('
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" (*%"*'
$&%(*'
!" *+%)$'
$*%#&'
!" ((%*$'
$)%**'!+ *,%&"' !+ *$%,&' !+ $(%""'
!, $&%,(' !, (&%-#' !, (-%($'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *"%+&'
$#%)+'
!" -)%-"'
$&%)-'
!" (&%-('
(-%#,'!+ $-%*+' !+ $*%$+' !+ $&%-$'
!, ("%))' !, &&%(,' !, ((%,('
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -)%$&'
$&%,,'
!" *&%##'
$#%"#'
!" ((%#*'
$"%&('!+ $"%"$' !+ $"%""' !+ $*%##'
!, (#%)$' !, (&%*$' !, (-%$&'
;'#?@<'4;ABC'6-7/38-9:
Figura 3.12: Risultati 1 SURF (64 features).
39
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%(1((' /.-("#0"%&%(1((' /.-("#0"%&%(1(('
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" **%$$'
*(%-+'
!" -"%"('
*$%**'
!" *(%),'
*(%"&'!+ *$%))' !+ *$%+*' !+ *$%(('
!, *&%))' !, *&%+"' !, *#%$$'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" $-%*#'
*#%*('
!" $*%*"'
*&%+,'
!" $)%),'
$&%#('!+ *&%"&' !+ *,%,,' !+ $)%("'
!, *-%&*' !, -,%&&' !, *&%$#'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" ((%&('
$&%")'
!" *+%$('
*"%(#'
!" $(%)$'
$-%$-'!+ *(%,#' !+ -+%"$' !+ *+%,)'
!, $+%#)' !, $)%))' !, *"%))'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *(%+&'
$*%,+'
!" -(%-$'
*)%-$'
!" $#%#$'
$&%""'!+ *&%+)' !+ *$%+,' !+ *)%(+'
!, (,%&)' !, &*%$)' !, $)%+&'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *(%#('
$(%(#'
!" -(%&&'
$-%#+'
!" $(%,$'
$#%&#'!+ $#%*,' !+ $,%,,' !+ $-%(#'
!, (*%(,' !, (*%,*' !, ($%("'
;'#?@<D'4;A;=>'6-7/38-9:
Figura 3.13: Risultati 1 SURF* (128 features).
40
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%(1((' /.-("#0"%&%(1((' /.-("#0"%&%(1(('
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" **%-('
*(%"+'
!" -"%#)'
**%"*'
!" *,%-,'
*#%-('!+ *(%(*' !+ *$%))' !+ *(%,*'
!, *+%$,' !, *(%",' !, *#%&$'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *#%#*'
*#%-#'
!" *$%,#'
**%+$'
!" $,%*#'
$*%",'!+ *,%$(' !+ *#%&&' !+ $*%))'
!, *(%&*' !, -+%-+' !, *+%&#'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" $-%&&'
*,%),'
!" *#%*,'
*#%)+'
!" *$%$,'
*,%$('!+ **%&,' !+ -,%-*' !+ $$%**'
!, *"%))' !, $,%+&' !, *&%($'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -(%+&'
$$%(('
!" -,%-#'
$*%&#'
!" -&%$#'
$$%(*'!+ $&%$*' !+ *(%"$' !+ $&%"-'
!, ()%-(' !, &&%&+' !, (+%")'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -+%,,'
$*%**'
!" "))%))'
$-%(#'
!" *(%*"'
$*%&"'!+ $&%$#' !+ $"%*&' !+ *,%+,'
!, (*%&$' !, ($%)$' !, (&%#*'
C'#?@<'4CABC'6-7/38-9:
Figura 3.14: Risultati 4 SURF (256 features).
41
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%(1((' /.-("#0"%&%(1((' /.-("#0"%&%(1(('
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" **%)-'
*(%$-'
!" -)%*)'
**%,$'
!" *+%,#'
*&%-('!+ **%#+' !+ *-%+#' !+ **%&"'
!, *,%*(' !, *&%)(' !, *$%)#'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *+%+,'
*(%+)'
!" *$%*('
**%-+'
!" $+%)+'
$-%("'!+ *$%,"' !+ *&%-*' !+ *"%#+'
!, *-%)(' !, -+%-+' !, *&%,-'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *)%*#'
*+%#('
!" *#%"#'
*#%&*'
!" *#%(('
*,%(-'!+ *$%*"' !+ -#%&*' !+ $-%(&'
!, $*%$+' !, $&%)+' !, *(%$('
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -+%&)'
$-%++'
!" -(%-$'
*"%(#'
!" -"%#-'
$-%#&'!+ *+%&"' !+ -+%&&' !+ *"%#)'
!, (+%(&' !, &&%#)' !, (&%#('
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -+%$*'
$-%"$'
!" --%+,'
$-%**'
!" *(%+('
*)%#"'!+ !+ (-%(,' !+ *&%(,'
!, (&%&&' !, $)%$*' !, (-%,#'
C'#?@<D'4CA;=>'6-7/38-9:
Figura 3.15: Risultati 4 SURF* (512 features).
42
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%(1((' /.-("#0"%&%(1((' /.-("#0"%&%(1(('
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -)%(*'
*(%-('
!" -)%-)'
*$%*&'
!" *,%($'
*&%)#'!+ *$%($' !+ **%,&' !+ *(%*+'
!, *+%&+' !, *#%+-' !, *#%(+'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *,%""'
*(%#"'
!" **%""'
*-%#+'
!" $&%,#'
*"%"+'!+ *$%**' !+ *$%-(' !+ *+%(&'
!, **%+,' !, -+%+)' !, *&%,*'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *+%,&'
*#%)&'
!" *)%&('
*"%"+'
!" *(%#+'
*+%&)'!+ -)%*)' !+ -$%&,' !+ $*%"*'
!, $-%))' !, $+%"(' !, *+%-"'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -(%)&'
$*%*&'
!" "))%))'
*)%(('
!" -,%"*'
$(%#('!+ $-%))' !+ *(%*"' !+ $(%&('
!, ("%&)' !, &&%"$' !, &-%(,'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -+%,,'
$-%(+'
!" -*%#$'
$-%"&'
!" *(%+('
$-%)$'!+ $$%+-' !+ $)%))' !+ *+%&,'
!, (-%+,' !, (*%-*' !, (*%#,'
E'#?@<'4EABC'6-7/38-9:
Figura 3.16: Risultati 5 SURF (320 features).
43
CAPITOLO 3. RICONOSCIMENTO DELLO STATO DELLE MANI
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%(1((' /.-("#0"%&%(1((' /.-("#0"%&%(1(('
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -)%"$'
*$%*"'
!" -,%&$'
**%*,'
!" *"%*)'
*&%+$'!+ -)%))' !+ *-%&#' !+ *-%""'
!, *,%+$' !, *,%,$' !, *#%-)'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7 /.-("#0"%&%233345333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *,%$*'
*(%&+'
!" **%(,'
*-%($'
!" $,%$)'
*+%,,'!+ *$%$(' !+ **%-*' !+ **%$*'
!, **%),' !, -"%#)' !, *#%&+'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7 /.-("#0"%&%533345833%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" *)%$+'
*+%*&'
!" *+%))'
*+%,,'
!" *,%,)'
*)%#$'!+ *$%",' !+ -)%$#' !+ $$%+$'
!, *)%(-' !, (-%*-' !, *)%*,'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7 /.-("#0"%&%583345933%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -*%(*'
*"%#-'
!" -(%**'
*)%,-'
!" "))%))'
*)%()'!+ *(%,)' !+ *-%)"' !+ *)%#$'
!, &-%&)' !, &&%+-' !, ("%,+'
!"#$%&%'#()"*+' !"#$%&%,'-()" !"#$%&%-.#.-()"
/.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7 /.-("#0"%&%59334:333%6*7
!"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$ !"#! $%%& $%%&'(")*$
!" -,%))'
*)%$"'
!" -(%"$'
*)%**'
!" *#%(+'
*)%,"'!+ $*%##' !+ $(%$*' !+ *&%&#'
!, $)%$)' !, (-%$)' !, $)%$('
E'#?@<D'4EA;=>'6-7/38-9:
Figura 3.17: Risultati 5 SURF* (640 features).
44
Capitolo 4
Realizzazione del detector
In questo capitolo e descritta la struttura del sistema capace di rico-
noscere lo stato delle mani degli utenti presenti nella scena, la cui
efficacia e stata incrementata utilizzando un filtro di Kalman per eli-
minare le predizioni di classificazione errate.
Lo scopo della tesi consiste nella realizzazione di un sistema capace di rile-
vare in real-time lo stato delle mani degli utenti presenti nella scena, la cui
posizione e individuata dal sistema di localizzazione e tracciamento. Nel ca-
pitolo precedente abbiamo visto che il miglior descrittore per rappresentare
lo stato della mano e realizzato mediante un array di 640 feature, derivato
dal calcolo della griglia di 5 SURF*. Per individuare lo stato delle mani degli
utenti e quindi necessario realizzare un detector, la cui struttura e mostrata
in figura 4.1.
4.1 Costruzione del modello SVM
Utilizzando tutti i dati del dataset (circa 31000 esempi) abbiamo addestra-
to un classificatore SVM con kernel RBF, utilizzando la libreria libSVM.
Per la valutazione dei parametri SVM ottimi e stata utilizzata una 5-fold
cross-validation che ha dato come risultato C = 8 e γ = 0.03125, con un’ac-
curatezza sul training-set del 97.82%.
45
CAPITOLO 4. REALIZZAZIONE DEL DETECTOR
Predizione dello stato
Calcolo descrittore
Modello SVM
Posizione della mano nel frame
Stato della mano "aperta" - "chiusa"
Estrazione immagini della mano
Segmentazione
Estrazione feature
Figura 4.1: Schema del detector
Con questi parametri e stato quindi addestrato il classificatore, che ha por-
tato alla definizione di un modello SVM con 8024 vettori di supporto. L’ac-
curatezza del modello e stata valutata con un test-set costituito da immagini
appartenenti ad un soggetto al di fuori degli otto che compongono il dataset,
ottenendo un’accuratezza del 97.97%.
4.2 Calcolo del descrittore
Ad ogni frame conosciamo la posizione delle mani degli utenti sia nell’im-
magine di profondita che nell’immagine rgb. Per calcolare il descrittore
procediamo nello stesso modo visto nel precedente capitolo:
1. estrazione immagini della mano dal frame rgb e dal frame della mappa
di profondita;
2. calcolo dell’immagine segmentata (figura 3.5);
3. calcolo del descrittore dato dalla concatenazione di 5 SURF* (figura
3.9).
46
CAPITOLO 4. REALIZZAZIONE DEL DETECTOR
4.3 Predizione dello stato
Una volta calcolato il descrittore dell’immagine della mano di cui vogliamo
conoscere lo stato, utilizziamo il modello SVM per determinare se questa
e aperta oppure chiusa: lo stato della mano e funzione dell’output della
predizione di SVM. Utilizzando la libreria libSVM calcoliamo lo stato della
mano predetto dal classificatore, fornendo come input l’array di 640 elementi
estratto dall’immagine segmentata: SVM restituisce lo stato predetto come
numero reale y: a valori di y > 0 corrisponde lo stato “mano aperta”, mentre
per valori di y < 0 corrisponde lo stato “mano chiusa”. L’output di SVM
indica il grado di confidenza della predizione: piu il valore si discosta dallo
zero, piu lo stato predetto ha una confidenza elevata.
4.4 Robustezza del detector
Il detector realizzato con questo sistema a volte commette degli errori nel
determinare lo stato delle mani degli utenti. Puo capitare infatti che SVM
sbagli la predizione per qualche frame, ad esempio quando la mano dell’u-
tente e in uno stato semi-definito (ad esempio quando passa da uno stato
all’altro) oppure quando l’utente muove le mani troppo velocemente. Infatti
muovendo le mani ad una velocita elevata si ottengono immagini rumorose la
cui conseguente segmentazione risulta sbagliata. In questi casi la predizione
di SVM puo risultare errata. Gli errori tuttavia sono poco frequenti, nel senso
che avvengono solo per pochi frame e in questi casi si registra che l’output di
SVM e un valore molto vicino allo zero (basso grado di confidenza). Tuttavia
la presenza di questi errori nel sistema comporta dei problemi quando questo
viene applicato in contesti di interazione naturale. Supponiamo ad esempio
di voler utilizzare il detector per realizzare un’interfaccia che permetta agli
utenti di “afferrare“ alcuni contenuti digitali con la possibilita di “trascinar-
li” sullo schermo. Per realizzare il gesto dell’“afferrare” l’utente posiziona la
mano aperta sopra l’oggetto, chiudendola successivamente; mentre per “tra-
scinarlo” l’utente deve mantenere la mano chiusa spostandosi nello schermo.
Se durante il “trascinamento” dell’oggetto il detector commette un errore
47
CAPITOLO 4. REALIZZAZIONE DEL DETECTOR
di predizione restituendo un valore positivo (mano aperta), l’utente “perde”
il controllo dell’oggetto che deve essere nuovamente “afferrato”. Da questo
semplice esempio applicativo si capisce l’importanza di dover correggere que-
sti errori. Per questo viene utilizzato un filtro di Kalman per “inseguire”
l’output di SVM cosı da eliminare le predizioni sbagliate.
4.4.1 Filtro di Kalman
Il filtro di Kalman [5] e un filtro ricorsivo molto utilizzato nell’ambito dei
controlli automatici per valutare lo stato di sistemi dinamici soggetti ad errori
di misurazione dovuti a rumore e ad imprecisioni del modello del sistema.
Formulazione matematica
Consideriamo un processo a tempo discreto P e indichiamo con x ∈ Rn il
suo stato e con u ∈ Rl l’insieme dei suoi ingressi. Lo stato del processo al
tempo k + 1 e dato da:
xk+1 = Axk +Buk + wk
dove A ∈ Rn×n lega lo stato attuale allo stato al tempo precedente, B ∈ Rn×l
lega lo stato attuale agli ingressi e wk ∈ Rn rappresenta il rumore di processo.
Lo stato viene stimato per mezzo di misurazioni z ∈ Rm tali che:
zk = Hxk + vk
dove H ∈ Rm×n lega le misurazioni allo stato del sistema e vk ∈ Rm rappre-
senta il rumore di misurazione.
Sia x−k ∈ Rn la stima dello stato a priori, ovvero dello stato al passo k prima
di effettuare la misurazione e conoscendo gli stati precedenti x0 . . . xk−1 e sia
xk ∈ Rn la stima dello stato a posteriori, ovvero dello stato una volta noto
zk. Definiamo quindi errore di stima a priori il vettore:
e−k = xk − x−k
48
CAPITOLO 4. REALIZZAZIONE DEL DETECTOR
ed errore di stima a posteriori il vettore:
ek = xk − xk
Inoltre definiamo la covarianza dell’errore stimata a priori come:
P−k = E[e−k e−T
k ]
e la covarianza dell’errore stimata a posteriori come:
Pk = E[ekeTk ]
L’idea del filtro di Kalman e quella di esprimere la stima a posteriori xk
come combinazione lineare tra la stima a priori x−k e la differenza pesata tra
la misurazione zk e una sua previsione Hkx−k , ovvero:
xk = x−k +Kk(zk −Hx−k )
La quantita (zk−Hx−k ) esprime la differenza tra la previsione di misurazione
e la misurazione reale: se tale differenza e nulla significa che c’e un totale
accordo tra la stima e la misurazione. La matrice Kk ∈ Rn×m e detta guada-
gno di Kalman ed e determinata in modo tale da minimizzare la covarianza
dell’errore a posteriori Pk. Una forma per esprimere il guadagno di Kalman
e data da:
Kk =P−k H
T
HP−k HT +Rk
dove Rk e la covarianza dell’errore di misurazione. Si osserva che quando
Rk → 0 la stima dello stato a posteriori xk e funzione solo della misurazio-
ne zk, ovvero la misurazione e considerata “piu attendibile”. Al contrario
quando P−k → 0 la stima dello stato a posteriori dipende solo dalla stima
dello stato a priori, ovvero la misurazione e considerata “meno attendibile”.
In altre parole quando la misurazione si discosta molto dal valore predetto,
questa influenza di meno lo stato del sistema rispetto a quando il suo scosta-
mento e piccolo: in questo modo il filtro di Kalman e in grado di “eliminare”
misurazioni sbagliate.
49
CAPITOLO 4. REALIZZAZIONE DEL DETECTOR
Algoritmo di aggiornamento del filtro
Il processo di aggiornamento del filtro di Kalman si divide in due fasi ovvero
predizione e correzione. Durante la fase di predizione viene stimato lo sta-
to del sistema, mentre durante la fase di correzione lo stato viene corretto
pesando il valore della misurazione come mostrato in figura 4.2.
Misurazione
PREDIZIONEStima dello stato del sistema
CORREZIONECorrezione dello stato del sistema
Figura 4.2: Aggiornamento del filtro di Kalman.
4.4.2 Utilizzo del filtro di Kalman
Il filtro di Kalman e quindi in grado di eliminare le predizioni SVM sba-
gliate ed e posto in cascata all’output di SVM come mostrato in figura 4.3.
Per ogni descrittore estratto si calcola la predizione dello stato della mano
con SVM e con il valore restituito si aggiorna lo stato del filtro di Kalman.
Diversamente da prima lo stato della mano non e funzione diretta dell’out-
put del classificatore ma dell’output del filtro di Kalman: in questo modo e
possibile eliminare eventuali predizioni sbagliate rendendo il detector molto
piu robusto. Supponiamo ad esempio che la mano si trovi nello stato “mano
aperta” e che SVM restituisca invece in uscita un valore negativo, anche se
molto prossimo allo zero. Dato che lo stato di partenza e un valore positivo,
il valore dello stato predetto dal filtro sara con buona probabilita un valore
positivo e pertanto il detector non fallira la predizione dello stato: il filtro
di Kalman elimina la predizione SVM sbagliata. Consideriamo ora il caso in
cui l’utente chiuda realmente la mano, passando allo stato “mano chiusa”.
50
CAPITOLO 4. REALIZZAZIONE DEL DETECTOR
Predizione SVM
Aggiornamento filtro
Output filtro
Predizione dello stato
Calcolo descrittore
Posizione della mano nel frame
Stato della mano "aperta" - "chiusa"
Estrazione immagini della mano
Segmentazione
Estrazione feature
Figura 4.3: Schema del detector utilizzando il filtro di Kalman.
Supponiamo che SVM restituisca un valore (corretto) negativo: per via del
filtro di Kalman l’output del detector per alcuni frame continuera ad essere
positivo per poi convergere comunque ad un valore negativo.
Il filtro di Kalman introduce quindi un po’ di inerzia al sistema risultante,
ma questo migliora la robustezza del detector dato che riesce ad eliminare gli
errori. E possibile modificare il comportamento del detector variando la co-
varianza dell’errore di misurazione. Generalmente in contesti di interazione
naturale gli utenti utilizzano le applicazioni muovendosi non troppo veloce-
mente (come nell’esempio visto in precedenza): in questi casi e necessario
che il detector sia molto robusto (e quindi meno reattivo). Al contrario, nei
videogiochi gli utenti si muovono molto piu freneticamente e quindi e ne-
cessario che il detector sia reattivo, pagando pero la reattivita in termini di
peggioramento della robustezza.
51
Capitolo 5
Risultati sperimentali
In questo capitolo sono presentati dei risultati sperimentali per valu-
tare l’efficienza del sistema; in particolare viene valutata l’invarianza
dell’accuratezza del classificatore al variare della distanza dal sensore,
l’utilizzo del filtro di Kalman per eliminare predizioni errate di SVM
e le prestazioni temporali al variare del numero di utenti.
5.1 Valutazione dell’accuratezza al variare del-
la distanza dal sensore
Come mostrato nel capitolo precedente, la bonta del modello SVM e stata
valutata sul test-set ottenendo un’accuratezza del 97.97%. Per dimostrare
che tale valore varia di poco con la distanza dal sensore, abbiamo suddiviso le
immagini dell’insieme di test in quattro sotto-insiemi in base alla profondita
alla quale sono state salvate durante il processo di acquisizione. Il test-set e
stato quindi suddiviso in base ai seguenti intervalli di distanze:
(a) da 1000 a 2000 cm;
(b) da 2000 a 2400 cm;
(c) da 2400 a 2700 cm;
(d) da 2700 a 3000 cm.
52
CAPITOLO 5. RISULTATI SPERIMENTALI
Per ciascun sotto-insieme del test-set e stata calcolata l’accuratezza del clas-
sificatore utilizzando la libreria libSVM. I risultati ottenuti mostrano che
l’accuratezza sostanzialmente resta invariata allontanandosi dal sensore, di-
mostrando quindi la bonta del modello addestrato, come si puo vedere in
figura 5.1.
0,80
0,82
0,84
0,86
0,88
0,90
0,92
0,94
0,96
0,98
1,00
1000-2000 cm.! 2000-2400 cm.! 2400-2700 cm.! 2700-3000 cm.!
Acc
urat
ezza!
Distanza dal sensore!
Accuratezza del classificatore!
Figura 5.1: L’accuratezza del classificatore resta sostanzialmente invariata
rispetto alla distanza dal sensore.
5.2 Valutazione della robustezza del detector
La robustezza del detector e valutata mediante degli esperimenti condotti in
real-time da un utente non appartenente al training-set. In ciascun esperi-
mento l’utente ha eseguito il medesimo task, “disegnando” nello spazio delle
circonferenze, prima con le mani aperte e poi con le mani chiuse muovendosi
all’interno della scena a differenti distanze dal sensore. Per ogni test e stata
valutata la robustezza del detector progettato e la capacita del filtro di Kal-
man di eliminare gli errori nelle predizioni SVM, considerando come errore
di misura il valore 10−3. I risultati di ciascun esperimento sono stati raccolti
53
CAPITOLO 5. RISULTATI SPERIMENTALI
in grafici: per ogni frame contenente l’immagine della mano estratta durante
il processo di acquisizione e riportata la confidenza della classificazione e la
confidenza filtrata con Kalman, come mostrato in figura 5.2. I punti blu del
grafico al di sopra dell’asse delle ascisse indicano che il classificatore ha rile-
vato la mano come “aperta”, mentre i punti al di sotto di tale asse indicano
che il classificatore ha rilevato la mano come “chiusa”. La linea rossa rap-
presenta la confidenza sogliata ovvero lo stato predetto dal detector: anche
il questo caso l’asse delle ascisse discrimina fra mano aperta e mano chiusa.
1! 2! 3! 4! 5! 6! 7! 8! 9! 10! 11! 12! 13! 14! 15! 16! 17! 18! 19! 20!Frame!
Classificazione immagini di una sequenza mano aperta - mano chiusa!
Confidenza! Confidenza filtrata!
Figura 5.2: Grafico di una sequenza mano aperta - mano chiusa in cui sono
riportati i valori della confidenza del classificatore con e senza filtraggio.
Nei grafici che raccolgono i risultati dei test sono indicati i frame che si
riferiscono ad immagini di mani aperte e quelli che si riferiscono ad immagi-
ni di mani chiuse cosı da poter individuare gli errori del classificatore e del
detector. Il valore di verita dei frame e indicato con dei box gialli: punti al
di fuori dei box costituiscono errori del classificatore oppure del detector; per
alcuni di questi sono riportati i frame che sono stati predetti in modo errato.
54
CAPITOLO 5. RISULTATI SPERIMENTALI
Nel grafico di figura 5.3 si nota come la presenza del filtro di Kalman renda
il sistema robusto, evitando errori di predizione con confidenza prossima
allo zero. Analizzando i frame che generano gli errori, e possibile osservare
che questi sono determinati da problematiche differenti. Sia il frame (a)
che il frame (b) hanno un valore di confidenza molto basso, anche se per
motivi differenti: infatti il frame (a) e un’immagine a basso contrasto che
viene quindi mal interpretata dal descrittore che invece discrimina molto in
base alla texture della mano, mentre il frame (b) contiene anche un errore
dovuto segmentazione dell’immagine della mano. Questo errore e dovuto alla
mancanza di sincronizzazione tra i flussi provenienti dal sensore di profondita
e dal sensore RGB: quando l’utente muove la mano troppo velocemente si
crea un disallineamento tra le immagini, che determina un errore nel calcolo
della maschera e quindi nella segmentazione. Gli errori dei frame (c), (d) e
(e) sono generati per lo stesso motivo: in particolare nel frame (c) si nota
come l’errore nella segmentazione porta ad includere nel frame anche parte
della scena, con un conseguente errore nella predizione dello stato.
1! 11! 21! 31! 41! 51! 61! 71! 81! 91! 101! 111! 121! 131! 141! 151! 161! 171! 181!Frame!
Classificazione immagini mano destra alla distanza 1000-2000 cm.!
Confidenza!
Confidenza filtrata!
Mano aperta
Mano chiusa(a) (b)
(c) (d)
(e)
Figura 5.3: Risultati mano destra ad una distanza tra 1000 e 2000 cm.
55
CAPITOLO 5. RISULTATI SPERIMENTALI
Anche nell’esempio di figura 5.4 si nota come il detector non fallisca mai
le predizioni dello stato delle mani, correggendo gli errori del classificatore
SVM. In particolare gli errori generati dai frame (a) e (b) sono dovuti al
basso contrasto delle immagini e a questi e associato un output di SVM molto
prossimo allo zero. Il frame (c) determina invece un output di SVM positivo
per via di un evidente errore nella segmentazione del frame, dovuto alla
mancanza di sincronizzazione dei flussi e ad un’elevata velocita di movimento
della mano: e possibile infatti osservare come la maschera binaria sia molto
piu grande della dimensione effettiva della mano, segno che quest’ultima si e
spostata troppo velocemente.
1! 11! 21! 31! 41! 51! 61! 71! 81! 91! 101! 111! 121! 131! 141! 151!Frame!
Classificazione immagini mano sinistra alla distanza 1000-2000 cm.!
Confidenza!
Confidenza filtrata!
Mano aperta
Mano chiusa
(a) (b)
(c)
Figura 5.4: Risultati mano sinistra ad una distanza tra 1000 e 2000 cm.
Gli esempi delle figure 5.5 e 5.6 mostrano come il filtro di Kalman renda
il sistema robusto rispetto a predizioni errate con confidenze molto basse. Al
solito gli errori sono dovuti al basso contrasto delle immagini e alla mancanza
di sincronizzazione tra i flussi.
56
CAPITOLO 5. RISULTATI SPERIMENTALI
1! 11! 21! 31! 41! 51! 61! 71! 81! 91! 101! 111! 121! 131! 141! 151! 161! 171! 181! 191!Frame!
Classificazione immagini mano destra alla distanza 2000-2400 cm.!
Confidenza!
Confidenza filtrata!
Mano aperta
Mano chiusa(a)
(b)
(c)
(d) (e)
Figura 5.5: Risultati mano destra ad una distanza tra 2000 e 2400 cm.
1! 11! 21! 31! 41! 51! 61! 71! 81! 91! 101! 111! 121! 131! 141! 151! 161! 171!Frame!
Classificazione immagini mano sinistra alla distanza 2000-2400 cm.!
Confidenza!
Confidenza filtrata!
Mano aperta
Mano chiusa
(a)
(b)
Figura 5.6: Risultati mano sinistra ad una distanza tra 2000 e 2400 cm.
57
CAPITOLO 5. RISULTATI SPERIMENTALI
L’esempio di figura 5.7 mostra invece alcuni fallimenti del detector, in
cui il filtraggio non riesce comunque a risolvere le predizioni SVM errate. I
frame che generano gli errori (che nella figura sono riportati ingranditi per
permettere meglio la loro analisi) hanno quasi tutti un basso contrasto ed
evidenti errori di segmentazione. In particolare per il frame (e) anche il de-
tector fallisce la predizione: in questo caso la confidenza del classificatore non
e prossima allo zero ed e seguente ad un’altra predizione errata anch’essa con
un valore piuttosto positivo; in questo caso il filtro di Kalman con errore di
misurazione impostato al valore 10−3 non riesce ad eliminare questo errore
(nella sezione seguente sara mostrato come variando questo parametro e pos-
sibile irrobustire il filtro).
1! 11! 21! 31! 41! 51! 61! 71! 81! 91! 101! 111! 121! 131! 141! 151! 161!Frame!
Classificazione immagini mano destra alla distanza 2400-2700 cm.!
Confidenza!
Confidenza filtrata!
Mano aperta
Mano chiusa(a) (b)
(c)
(d) (e)
Figura 5.7: Risultati mano destra ad una distanza tra 2400 e 2700 cm.
58
CAPITOLO 5. RISULTATI SPERIMENTALI
1! 11! 21! 31! 41! 51! 61! 71! 81! 91! 101! 111! 121! 131! 141! 151! 161! 171!Frame!
Classificazione immagini mano sinistra alla distanza 2400-2700 cm.!
Confidenza!
Confidenza filtrata!
Mano aperta
Mano chiusa
(a) (b) (c)
(d)
Figura 5.8: Risultati mano sinistra ad una distanza tra 2400 e 2700 cm.
Infine nelle figure 5.9 e 5.10 sono riportati i risultati dei test effettuati
ad una distanza molto elevata dal sensore. In particolare nella figura 5.9 si
nota un fallimento del detector per il frame (e) la cui origine e identica a
quella degli errori presenti in figura 5.7. Negli altri casi comunque e bene
sottolineare che il detector corregge numerosi errori di predizione.
In conclusione e possibile calcolare l’accuratezza del classificatore e del
detector per valutare quanto la presenza del filtro di Kalman aumenti l’accu-
ratezza complessiva del sistema. Con il classificatore (output SVM) si ottie-
ne un’accuratezza del 96.34%, mentre con il detector (classificatore filtrato)
l’accuratezza sale al 98.95% aumentando cioe del 2.6%, che e un aumento
importante per i sistemi di interazione naturale.
59
CAPITOLO 5. RISULTATI SPERIMENTALI
1! 11! 21! 31! 41! 51! 61! 71! 81! 91! 101! 111! 121! 131! 141! 151! 161! 171!Frame!
Classificazione immagini mano destra alla distanza 2700-3000 cm.!
Confidenza!
Confidenza filtrata!
Mano aperta
Mano chiusa
(a) (b)
(c)
(d)(e)
(f)
Figura 5.9: Risultati mano destra ad una distanza tra 2700 e 3000 cm.
1! 11! 21! 31! 41! 51! 61! 71! 81! 91! 101! 111! 121! 131! 141! 151! 161! 171! 181!Frame!
Classificazione immagini mano sinistra alla distanza 2700-3000 cm.!
Confidenza!
Confidenza filtrata!
Mano aperta
Mano chiusa
(a)
(b) (c)
(d)
Figura 5.10: Risultati mano sinistra ad una distanza tra 2700 e 3000 cm.
60
CAPITOLO 5. RISULTATI SPERIMENTALI
5.3 Valutazione dell’inerzia del detector
Le prestazioni del detector riportate nella sezione precedente, sono state valu-
tate considerando il rumore di misurazione costante e pari a 10−3. Variando
tale parametro e possibile modificarle: aumentando il rumore di misurazione
si ottiene un sistema piu robusto ma meno reattivo, al contrario diminuendo
il rumore di misurazione si ottiene un sistema molto reattivo ma molto meno
robusto. Consideriamo il test della figura 5.7 in cui il detector commetteva
alcuni errori. Variando il rumore di misurazione e possibile ottenere un detec-
tor molto piu robusto ma scarsamente reattivo, come mostrato in figura 5.11.
Considerando come errore di misurazione i valori 10−1 e 10−2 si ottengono
detector molto robusti nonostante la misurazione errata con alta confiden-
za (come mostrato nel rettangolo). Viceversa pero sono estremamente poco
reattivi, tanto che il passaggio dallo stato “mano aperta” allo stato “mano
chiusa” avviene dopo 5 e 10 frame rispetto al valore reale.
1! 11! 21! 31! 41! 51! 61! 71! 81! 91! 101! 111! 121! 131! 141! 151! 161!Frame!
Inerzia del detector al variare dell'errore di misurazione!
Confidenza!
Errore 10^-1!
Errore 10^-2!
Errore 10^-3!
Mano aperta
Mano chiusa
Figura 5.11: Aumentando l’errore di misurazione il detector risulta piu
robusto ma molto meno reattivo.
61
CAPITOLO 5. RISULTATI SPERIMENTALI
5.4 Valutazione delle prestazioni temporali
Sono state valutate infine le prestazioni temporali del sistema, calcolando i
tempi medi per l’esecuzione di ciascun task che costituisce il sistema nel suo
complesso. In particolare sono stati valutati i tempi medi per:
• localizzare le mani dell’utente (localizzazione mediante il threshold
adattivo e l’hand-tracker della libreria);
• estrarre le immagini rgb e depth delle mani dell’utente, compresa la
segmentazione e cropping;
• calcolare il descrittore per ciascuna immagine (griglia di 5 SURF*);
• determinare lo stato di ogni mano (calcolo accuratezza SVM e corre-
zione con filtro di Kalman).
Per valutare le prestazioni sono stati calcolati i tempi al variare del numero
di utenti che interagiscono simultanemente col sistema ottenendo i risultati
mostrati nel grafico di figura 5.12.
0
0,02
0,04
0,06
0,08
0,1
0,12
0,14
0,16
0,18
0,2
1! 2! 3!
tem
po (s
)!
numero utenti!
Prestazioni temporali Predizione dello stato
Calcolo descri7ore
Estrazione e segmentazione mani
Localizzazione mani
Figura 5.12: I tempi medi complessivi aumentano con l’aumentare del numero
degli utenti che interagiscono col sistema.
62
CAPITOLO 5. RISULTATI SPERIMENTALI
Dal grafico si nota come il tempo medio complessivo per l’esecuzione di tutti i
task aumenti con l’aumentare del numero degli utenti coinvolti. In particolare
si osserva che i task per la localizzazione delle mani degli utenti e per il calcolo
del loro stato sono quelli che hanno un peso maggiore, al contrario invece dei
task per la segmentazione delle mani e l’estrazione delle features.
63
Capitolo 6
Progetto di un sistema di
riconoscimento di gesti
Il sistema di riconoscimento di gesti progettato puo essere utilizzato per rea-
lizzare applicazioni di interazione naturale. Un esempio di applicazione puo
essere quello di un’interfaccia in cui l’utente (o gli utenti) possono interagire
con degli oggetti digitali, ad esempio spostandoli all’interno di un’area pro-
iettata su una parete di grandi dimensioni. Per “afferrare” un oggetto basta
posizionare la mano aperta “sopra” di esso e quindi chiuderla; mantenendo la
mano chiusa e possibile spostare l’oggetto nello schermo e rilasciarlo aprendo
la mano.
Figura 6.1: Esempio di interfaccia di interazione naturale
64
CAPITOLO 6. PROGETTO DI UN SISTEMA DI RICONOSCIMENTO DI GESTI
Per realizzare questa interfaccia e possibile utilizzare il sistema che abbiamo
progettato. Infatti siamo in grado di determinare la posizione della mano
all’interno del piano immagine ed il suo stato: per rilevare che l’utente ha
afferrato l’oggetto basta verificare che la mano sia chiusa, analogamente per
rilasciarlo basta verificare che la mano sia aperta; durante il suo trascina-
mento e necessario verificare sempre che la mano continui ad essere chiusa.
La necessita di filtrare l’output di SVM e quindi fondamentale per realizzare
al meglio l’applicazione: sarebbe fastidioso per l’utente “perdere” il controllo
dell’oggetto durante il suo spostamento.
6.1 Protocollo TUIO
La maggior parte delle applicazioni di interazione naturale sono basate sul
protocollo TUIO [14]. TUIO e un framework open-source che definisce sia un
protocollo che una API standard per l’interazione con le superfici multitouch.
Il protocollo TUIO permette la comunicazione tra il sistema di acquisizione
(basato sulla computer-vision) e l’applicazione stessa, come mostrato in figu-
ra 6.2. Lo scopo del protocollo e quello di codificare i dati provenienti dalla
tracker application che rileva i gesti degli utenti sulla superficie, in modo tale
che siano utilizzabili dalla client application che li traduce i gesti in azioni
sull’interfaccia.
Figura 6.2: Protocollo TUIO
65
CAPITOLO 6. PROGETTO DI UN SISTEMA DI RICONOSCIMENTO DI GESTI
TUIO nasce come protocollo per interfacce multitouch fisiche come i tavoli
multimediali, ma puo essere utilizzato con qualsiasi altra interfaccia di intera-
zione. In particolare e possibile legare il sistema progettato ad una qualunque
interfaccia progettata con lo standard TUIO, realizzando una TUIO tracker
application, che converte i segnali provenienti dal sistema di riconoscimento
di gesti progettato nello standard TUIO, inviando cosı alla TUIO client ap-
plication la posizione delle mani degli utenti e il loro stato, come mostrato
in figura 6.3.
Coordinate delle mani nel piano immagine 2D
Coordinate delle mani nello spazio reale 3D
Utente presente nella scena
Stato delle mani
TUIO client application
TUIO tracker application
(x,y)
apertachiusa
Figura 6.3: Applicazione del sistema progettato ad una interfaccia utente
TUIO-based
66
Conclusioni
In questo lavoro di tesi e stato realizzato un sistema per il riconoscimento di
gesti delle mani utilizzando Microsoft Kinect. In particolare il sistema e in
grado di localizzare la posizione delle mani degli utenti nello spazio 3D e nel
piano immagine e di determinarne lo stato.
Il sistema progettato e risultato essere molto accurato nel rilevare lo sta-
to delle mani degli utenti, mantenendosi pressoche invariante in base alla
distanza dell’utente dal sensore, al suo abbigliamento e alla sua fisionomia.
Inoltre i tempi di esecuzione piuttosto contenuti ne garantiscono l’utilizzo in
real-time.
Possono essere apportati molti miglioramenti al sistema. Innanzitutto lo
sviluppo di un hand-tracker piu robusto e preciso rispetto a quello offerto da
NITE, sfruttando le informazioni della mappa di profondita.
Altri miglioramenti possono essere apportati al sistema di segmenta-
zione delle immagini delle mani degli utenti, per aumentare il contrasto
dei frame e per individuare quelli segmentati in modo errato per via della
sincronizzazione, cosı da ridurre gli errori durante il rilevamento dello stato.
Per quanto riguarda invece il filtraggio dell’output del classificatore, sa-
rebbe importante ottimizzare il valore del rumore di misurazione in modo
tale da minimizzare l’inerzia del detector e massimizzare la robustezza.
Osservando poi i tempi di esecuzione si nota come sia possibile aumen-
tare il numero di feature, dato l’estrazione ha un costo molto basso; i tempi
per la predizione SVM possono invece essere ridotti utilizzando altri kernel.
Infine potremmo pensare anche di parallelizzare i task per distribuirli su piu
processori utilizzando come unita di calcolo anche la GPU.
67
Appendice A
Libreria OpenNI
La libreria OpenNI (Open Natural Interaction) e un framework open-source
che svolge la funzione di interfaccia di programmazione standard per lo svi-
luppo di applicazioni di interazione naturale, realizzando un collegamento
fra i sensori audio-video e una serie di moduli software, detti componenti
middleware, che processano i dati provenienti dai sensori “interpretandoli”
e realizzando elaborazioni 3D (ad esempio riconoscendo la posizione di una
mano all’interno di un frame). L’interfaccia di OpenNI offre agli sviluppa-
tori sia API per la comunicazione coi i sensori fisici che con i componenti
middleware, mantenendo pero sempre la loro indipendenza: e possibile in-
fatti scrivere applicazioni e conseguentemente cambiare dispositivi di input
oppure i moduli software intermedi senza la necessita di riscrivere il codice
(a patto di rispettare l’interfaccia). Uno di questi componenti middleware e
NITE ed e stato sviluppato da PrimeSense.
Grazie ad OpenNI gli sviluppatori possono realizzare applicazioni di in-
terazione naturale utilizzando informazioni 3D della scena, che provengono
dall’elaborazione dei dati provenienti dai sensori, come ad esempio la rappre-
sentazione del corpo degli utenti, la localizzazione delle loro mani, la mappa
di profondita della scena.
68
APPENDICE A. LIBRERIA OPENNI
La struttura di OpenNI e su tre livelli, come mostrato in figura A.1:
• Livello alto: software che implementa applicazioni di interazione natu-
rale, al di sopra di OpenNI;
• Livello medio: interfaccia OpenNI per la comunicazione con i sensori e
i componenti middleware;
• Livello basso: dispositivi hardware che registrano le informazioni audio,
video e 3D presenti nella scena.
OpenNI
Applicazione
Componente middleware A
Componente middleware B
Interfaccia OpenNI
Figura A.1: Struttura del framework OpenNI
I dispositivi fisici e i componenti middleware sono detti moduli : le API della
libreria permettono di registrare molti moduli all’interno del framework. I
moduli supportati dalla libreria sono:
• moduli di input:
– sensori 3D (ad esempio Microsoft Kinect);
– telecamera RGB;
– telecamera IR;
– array di microfoni;
69
APPENDICE A. LIBRERIA OPENNI
• moduli middleware:
– analisi del corpo degli utenti: processa i dati provenienti dai mo-
duli di input restituendo informazioni sul corpo degli utenti come
la posizione e l’orientazione dei giunti del corpo e la posizione del
centro di massa;
– analisi delle mani degli utenti: processa i dati provenienti dai mo-
duli di input restituendo la posizione delle mani degli utenti nello
spazio reale 3D e nel piano immagine 2D;
– riconoscimento di gesti: riconosce se all’interno della scena un
utente sta eseguendo un gesto della mano (fra un serie di gesti
predefiniti);
– analisi della scena: analizza le immagini della scena realizzando la
separazione delle figure dallo sfondo, l’identificazione delle coor-
dinate del pavimento, l’identificazione delle figure presenti nella
scena.
Gli oggetti principali della libreria sono i generatori che i implementano i
moduli di input e i moduli middleware. Esistono vari tipi di generatori:
• MapGenerator e l’interfaccia base per tutti i generatori connessi ai
sensori:
– DepthGenerator: permette l’acquisizione della mappa di profon-
dita della scena ed inoltre offre la funzionalita per convertire pun-
ti nello spazio reale 3D in punti nel piano immagine 2D e vi-
ceversa grazie alle funzioni ConvertRealWorldToProjective() e
ConvertProjectiveToRealWorld();
– ImageGenerator: permette l’acquisizione della mappa a colori
della scena;
– IRGenerator: permette l’acquisizione della mappa ripresa dalla
telecamera IR;
• HandsGenerator implementa l’hand-tracker e permette quindi di loca-
lizzare le mani degli utenti nello spazio 3D;
70
APPENDICE A. LIBRERIA OPENNI
• UserGenerator implementa il full-body-tracker e permette quindi di
determinare la posizione e l’angolazione dei giunti del corpo degli uten-
ti nello spazio 3D; inoltre e capace di localizzare il centro di massa
dell’utente con la funzione GetCoM() e di calcolare la sua silhouette
con la funzione GetUserPixels().
Altre funzionalita della libreria molto importi sono la possibilita di registra-
re le immagini di profondita con le immagini rgb utilizzando la funzione
GetalternativeViewPointCap() e la possibilita di sincronizzare i flussi in
modo tale che arrivino all’applicazione nello stesso istante di tempo grazie
alla funzione GetFrameSyncCap().
71
Appendice B
Libreria miccKinect
Questo lavoro di tesi e stato interamente sviluppato in linguaggio C++, uti-
lizzando la libreria opencv per tutte le funzionalita di computer-vision e di
elaborazione delle immagini e OpenNI come interfaccia con Microsoft Kinect.
Il sistema progettato per il rilevamento dello stato delle mani degli utenti
e stato organizzato come libreria denominata miccKinect e che permette
l’interazione con Microsoft Kinect offrendo una semplice interfaccia per ge-
stire le informazione degli utenti presenti all’interno della scena. La libreria
e costituita da tre blocchi fondamentali:
• miccKinect: offre una semplice interfaccia con Microsoft Kinect con
la quale e possibile acquisire la mappa di profondita della scena e la
mappa rgb (figura B.1);
+miccKinect()+display_depthMap()+display_rgbMap()+grab_and_retrieve()+init()+retrive_depthMap()+retrive_rgbMap()
#main_context:Context#depth_generator:DepthGenerator#img_generator:ImageGenerator#rgbMap:Mat#depthMap:Mat
miccKinect
Figura B.1: UML classe miccKinect
72
APPENDICE B. LIBRERIA MICCKINECT
• playerKinect: permette di gestire gli utenti che interagiscono con
l’applicazione e in particolare resituisce le coordinate delle loro mani
sia come punti nello spazio reale 3D che come punti nel piano immagine
2D. In particolare:
– la gestione degli utenti e indipendente dal sistema utilizzato per
localizzare e tracciare le mani di questi: e stato scelto di ren-
derla tale cosı da poter essere facilmente sviluppabile nel futuro;
attualmente (figura B.2) e possibile utilizzare sia l’hand-tracker
(thresholdPlayer) che il full-body-tracker (skeletonPlayer);
miccKinect
+playerKinect()+update_CoM()+init()+update_hands()+get_player()
#user_generator:UserGeneratorplayerKinect
+init()+update_hands()
skeletonKinect
+init()+update_hands()
-hands_generator:HandsGeneratorthresholdKinect
Figura B.2: UML classe miccPlayer
– la classe playerKinect ha al suo interno un array di oggetti di tipo
Player che rappresentano gli utenti che interagiscono col sistema.
Ciascun utente e modellato con la struttura mostrata in figura B.3
ed e costituito da due oggetti di tipo Hand che rappresentano le
mani. A ciascuna mano e associato un filtro di Kalman in modo
tale da poter filtrare le predizioni SVM.
73
APPENDICE B. LIBRERIA MICCKINECT
playerKinect
*#P
+Hand()#position:XnPoint3D
Hand#left_hand
#right_hand
+Player()
#id:XnUserID#CoM:XnPoint3D#present:bool
Player
+Kalman()+predict()+correct()
-KF:KalmanFilter-measurament:Mat-has_measure:bool
Kalman#KF
Figura B.3: UML classe Player
• gestureKinect: implementa il detector capace di riconoscere lo stato
delle mani degli utenti (figura B.4).
miccKinect
+gestureKinect()+get_handStatus()+load_model()+load_scaleFactors()+update_maps()
-bgrMap_original:Mat-depthMap_original:Mat-model_svm:svm_model*-feature_min:double*-feature_max:double*
gestureKinect
Figura B.4: UML classe gestureKinect
74
Bibliografia
[1] E. H. Adelson and J. Y. A. Wang, “Single lens stereo with a ple-
noptic camera,” IEEE Transactions on Pattern Analysis and Machine
Intelligence, vol. 14, no. 2, pp. 99–106, 1992.
[2] H. Bay, A. Ess, T. Tuytelaars, and L. Vangool, “Speeded-up robust
features (surf),” Computer Vision and Image Understanding, vol. 110,
no. 3, pp. 346–359, 2008.
[3] C.-C. Chang and C.-J. Lin, LIBSVM: a library for support vector
machines, 2001.
[4] M.-K. Hu, “Visual pattern recognition by moment invariants,” In-
formation Theory IRE Transactions on, vol. 8, no. 2, pp. 179–187,
1962.
[5] R. E. Kalman, “A new approach to linear filtering and prediction pro-
blems,” Journal Of Basic Engineering, vol. 82, no. Series D, pp. 35–45,
1960.
[6] D. G. Lowe, “Distinctive image features from scale-invariant keypoints,”
International Journal of Computer Vision, vol. 60, no. 2, pp. 91–110,
Nov. 2004.
[7] S. V. Machine, “Support vector machine,” Constraints, vol. 3, no. 2, pp.
1–6, 2006.
[8] Microsoft. (2012, February) Kinect for windows sdk beta 2. [Online].
Available: http://www.microsoft.com/download/en/details.aspx?id=
27876
75
BIBLIOGRAFIA
[9] D. Norman, The design of everyday things, 1st ed. MIT Press, 1998.
[10] openkinect.org. (2012, February) libfreenect. [Online]. Available:
http://openkinect.org/wiki/Main Page
[11] openni.org. (2012, February) Openni user guide. [Online]. Available:
http://openni.org/Documentation
[12] primesense.org. (2012, February) Nite controls user guide. [Online].
Available: http://primesense.org
[13] T. Sawada, K. Ito, M. Nakayama, and S. Kawahito, “Tof range image
sensor using a range-shift technique,” 2008 IEEE Sensors, pp. 1390–
1393, 2008.
[14] tuio.org. (2012, February) Tuio protocolo. [Online]. Available:
http://tuio.org
[15] A. Valli, “Natural interaction white paper,” Citeseer, vol. 15, no.
September, p. 21, 2007.
[16] Zalevsky, Method and system for object recostruction, PrimeSense, 2007.
76
Ringraziamenti
Cerchero di scrivere dei ringraziamenti il piu possibile scientifici, ringrazian-
do chi mi ha veramente aiutato a vivere questa bellissima esperienza di tesi :)
Vorrei innanzitutto ringraziare i miei genitori che mi hanno sempre so-
stenuto economicamente, spiritualmente, umanamente durante questo primo
percorso di studi, incoraggiandomi sempre ad andare avanti superando le
difficolta ed educandomi a riconoscere sempre il vero nelle cose.
Un ringraziamento particolare lo devo alla mia mamma: per te ho scrit-
to ogni singolo carattere di questa tesi e ogni singola riga di codice che fa
funzionare questo trabiccolo, sperando di essere riuscito a dimostrarti il bene
che ti voglio.
Restando sempre in ambito familiare, ringrazio anche Matteo, Carolina
e le piccole pesti Tommaso e Carlotta, anche se spesso mi fate uscire di testa!
Marta, per te non ci sono parole sufficienti per descrivere l’enorme con-
tributo che mi hai dato e che continuamente mi dai, non solo nello studio ma
soprattutto nella vita, a cominciare dal sopportarmi! GRAZIE
LUCIA! Compagna di studio un po’ tonterella, di chiaccherate sulla vita
senza mai capirci, di pettegolezzi sulla gente, di tante e tante risate. Ho tra-
scorso con te un periodo universitario fantastico, in particolare questo della
tesi, anche se come prevedibile mi sono laureato prima di te :) Devo ringra-
ziarti per tanti motivi: per aver sopportato le mie pazzie, per avermi aiutato
77
BIBLIOGRAFIA
negli esperimenti, per essere entrata nella storia comparendo nelle foto della
tesi, per aver trovato chissa come tutti quegli errori nascosti, ma soprattutto
per essere mia amica. Mi mancherai
Ringrazio poi particolarmente il Prof. Del Bimbo per avermi dato questa
straordinaria opportunita della tesi, che mi ha realmente cambiato e che ha
risvegliato in me una voglia incredibile di studiare. Come poi non ringraziare
Lorenzo e Andy che mi hanno seguito come dei veri mentori, portandomi
sulla retta via della programmazione intelligente! Vorrei inoltre ringraziare
tutti gli amici del MICC, dai noti Beppino, Beppone, Lambe a chi ho co-
nosciuto in questi mesi: il canterino-pompato Masi, Marco, il veterano Da
Campo. Ho vissuto uno dei periodi piu belli della mia vita lavorando con voi.
Al limite dello scientifico devo poi ringraziare i miei tre piu cari amici
ingegneri (non me ne vogliano gli altri): il mitico Vannu che mi ha fatto cre-
scere e diventare quello che sono, il fantastico Giorgio perche mi ha sempre
rilanciato nello studio e il Novix (alias schizzo) per avermi mostrato cosa
significa non studiare!
Scendendo ancora meno nello scientifico devo ovviamente ringraziare la
mia farmacista di fiducia Camilla, l’amico di vecchia data Giova, il Nardel-
lo e il Becks, Alex per gli amici capellone, l’Annina, il mitico Bazzica “per
avermi passato questo fantastico template”, i pischelli Tommi e Cristian, la
“piccola letterata” Sara e tutti gli uomini di buona volonta che sicuramente
mi hanno aiutato e che mi perdoneranno se non ho ringraziato...ma sono le
3.57 di notte! (mi rifaro alla magistrale).
Infine ringrazio il Signore per avermi donato questa vita.
78