85625620 Kinect Hand Tracking and Pose Recognition

86
UNIVERSIT ` A DEGLI STUDI DI FIRENZE Facolt` a di Ingegneria - Dipartimento di Sistemi e Informatica Tesi di Laurea Ingegneria Informatica Riconoscimento di gesti con Microsoft Kinect Candidato Lorenzo Usai Relatore Prof. Alberto Del Bimbo Correlatori Ing. Lorenzo Seidenari Ing. Andrew Bagdanov Anno Accademico 2010-2011

description

interactivity

Transcript of 85625620 Kinect Hand Tracking and Pose Recognition

Page 1: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 2: 85625620 Kinect Hand Tracking and Pose Recognition

alla mia mamma

i

Page 3: 85625620 Kinect Hand Tracking and Pose Recognition

“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

Page 4: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 5: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 6: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 7: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 8: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 9: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 10: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 11: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 12: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 13: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 14: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 15: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 16: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 17: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 18: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 19: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 20: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 21: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 22: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 23: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 24: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 25: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 26: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 27: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 28: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 29: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 30: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 31: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 32: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 33: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 34: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 35: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 36: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 37: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 38: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 39: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 40: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 41: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 42: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 43: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 44: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 45: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 46: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 47: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 48: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 49: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 50: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 51: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 52: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 53: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 54: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 55: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 56: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 57: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 58: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 59: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 60: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 61: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 62: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 63: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 64: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 65: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 66: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 67: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 68: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 69: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 70: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 71: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 72: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 73: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 74: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 75: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 76: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 77: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 78: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 79: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 80: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 81: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 82: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 83: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 84: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 85: 85625620 Kinect Hand Tracking and Pose Recognition

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

Page 86: 85625620 Kinect Hand Tracking and Pose Recognition

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