Analisi della gestualità per il controllo di interfacce multimediali

Transcript

Analisi della gestualità per il controllo di interfacce multimediali
Analisi della gestualità per il controllo di
interfacce multimediali
Tesi di laurea specialistica
Marco Soave
Marzo 2011 - Febbraio 2012
Universita' degli Studi di Trento
Relatore: Nicola Conci
Correlatori: Gabrio Girardi
Raaele de Amicis
ii
Prefazione
Il lavoro svolto consta nello sviluppo di un sistema automatico di Gesture Recognition facente uso dell'hardware Microsoft Kinect e utilizzabile per lo sviluppo di una
Interfaccia Utente Naturale.
La tematica, oltre ad essere un interesse personale, è un argomento di ricerca comune
del laboratorio universitario MMLab e della fondazione Graphitec che hanno collaborato
nella realizzazione di questo progetto.
Oltre al sistema di riconoscimento dei movimenti nello spazio è stato sviluppato un
applicativo al ne di dimostrare un possibile utilizzo del metodo implementato.
iii
iv
Indice
Prefazione
iii
Lista delle gure
vii
1 Introduzione
1
1.1
Evoluzione delle interfacce utente
. . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Natural User Interface
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2 Stato dell'arte
5
2.1
Riconoscimento delle mani utilizzando immagini di profondità
2.2
Riconoscimento della posa delle mani tramite l'analisi delle curve concave
e convesse dei contorni
. . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
8
2.3
Utilizzo della trasformata di Fourier per il confronto tra movimenti
. . . .
10
2.4
Utilizzo della trasformata Wavelet . . . . . . . . . . . . . . . . . . . . . . .
10
2.5
Utilizzo del metodo Characteristic Loci . . . . . . . . . . . . . . . . . . . .
11
2.6
Quantizzazione angolare
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.7
Dinamic Time Warping . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.8
Miglioramenti della tecnica DTW . . . . . . . . . . . . . . . . . . . . . . .
15
3 Metodo Implementato
19
3.1
Hand shape analysis and trigger detection
. . . . . . . . . . . . . . . . . .
20
3.2
Fast gesture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
3.3
3d gesture recognition
23
3.3.1
Rappresentazione del percorso tramite le derivate dei vettori in
ingresso
3.3.2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Rappresentazione del percorso tramite vettori nello spazio delle
coordinate sferiche
3.4
25
. . . . . . . . . . . . . . . . . . . . . . . . . . .
26
3.3.3
Rappresentazione del percorso tramite vettori nello spazio euclideo .
28
3.3.4
Normalizzazione del percorso rispetto all'origine degli assi . . . . . .
29
Gesture a due mani e possibili ampliamenti del metodo . . . . . . . . . . .
30
4 Risultati Sperimentali
33
v
5 Applicativo sviluppato
49
5.1
Logica e schema a blocchi dell'algoritmo implementato
. . . . . . . . . . .
53
5.2
Strumenti
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
5.2.1
HardWare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
5.2.2
Skeleton recognition frameWork . . . . . . . . . . . . . . . . . . . .
66
5.2.3
Microsoft Kineck SDK
69
. . . . . . . . . . . . . . . . . . . . . . . . .
6 Conclusioni, problemi irrisolti e sviluppi futuri
71
Bibliograa
73
vi
Elenco delle gure
1.1
Microsoft surface 2.0
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
1.2
HoloWall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3
DiamondTouch
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1
Chamfer Distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.2
Roboust Hand Detection . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.3
Gesture riconosiute in Fast and Accurate 3D Gesture Recognition Interface
[10] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.4
Loci characteristic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.5
Quantizzazione Angolare . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.6
Perdita caratteristiche locali nella angle quantization
. . . . . . . . . . . .
13
2.7
DTW warping path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.8
MD DTW: analisi dei vantaggi . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.1
Vista delle mani tramite la depth camera . . . . . . . . . . . . . . . . . . .
20
3.2
Area percentuale occupata dalla mano aperta e chiusa . . . . . . . . . . . .
21
3.3
Fast gesture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.4
Esempio di gesture registrata
. . . . . . . . . . . . . . . . . . . . . . . . .
24
3.5
Smoothed gesture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
3.6
Ragurazione di due punti acquisiti in coordinate cartesiane . . . . . . . .
26
3.7
Coordinate sferiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.8
Problema nell'utilizzo delle coordinate sferiche . . . . . . . . . . . . . . . .
28
3.9
Confronto tra gesture eseguite con due mani . . . . . . . . . . . . . . . . .
30
4.1
Percorso della DTW nel caso di match corretto ed errato . . . . . . . . . .
39
5.1
Screenshot del programma sviluppato . . . . . . . . . . . . . . . . . . . . .
50
5.2
CowerFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
5.3
Gesture drawing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
5.4
Precdeura eseguita ad ogni avvio del programma . . . . . . . . . . . . . . .
53
5.5
Indice dei colori utilizzati . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
5.6
Procedura eseguita ogni volta che ci sia un nuovo frame RGB disponibile
57
.
vii
5.7
Schema funzionale del procedimento che permette di disegnare . . . . . . .
5.8
Schema a blocchi della procedura eseguita quando è disponibile una nuova
depth frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
Processo eseguito ad ogni nuova SkeletonFrame disponibile . . . . . . . . .
60
5.10 Routine per il calcolo della velocità istantanea delle mani . . . . . . . . . .
61
5.11 Routine eseguita per vericare se viene eseguita una FastGesture . . . . . .
62
5.12 Procedura eseguita per vericare se le mani vengono aperte o chiuse . . . .
63
5.13 Il dispositivo Microsoft Kinect . . . . . . . . . . . . . . . . . . . . . . . . .
65
5.14 Schema funzionale del MS Kinect
66
5.9
. . . . . . . . . . . . . . . . . . . . . . .
5.15 Fascio infrarosso proiettato dal Kinect
5.16 OpenNi framework
. . . . . . . . . . . . . . . . . . . .
67
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
5.17 IISU interaction deigner
viii
58
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
Capitolo 1
Introduzione
1.1
Evoluzione delle interfacce utente
Il mondo delle
Tecnologie dell'informazione e della comunicazione è in costante evoluzione:
si osserva un continuo e rapido aumento delle prestazioni di calcolo che hanno permesso
lo sviluppo di applicazioni avanzate.
L'interazione con l'utente avviene per mezzo dell'interfaccia uomo macchina HMI (human machine interface); cioè la totalità degli input (tastiera, mouse, interruttori e leve)
riconosciuti dal sistema e degli output (video, audio) interpretabili dall'utente.
I metodi di interazione non hanno seguito lo stesso trend del resto del settore informatico
e tecnologico; i cambiamenti in questo settore sono stati sostanziali ma poco frequenti.
I primi personal computer funzionavano grazie all'immissione di comandi a riga di testo
da parte dell'utente:
interfaccia chiamata CLI (command line interface).
L'hardware
richiesto in questo caso è la tastiera e l'utente deve essere molto istruito per poter utilizzare
il calcolatore, rendendo quest'ultimo uno strumento non alla portata di tutti.
In seguito si assisté alla nascita dei primi sistemi operativi dotati di interfaccia graca
(GUI) controllabile per mezzo del mouse. Le GUI comandate da mouse e tastiera sono
evolute no a sfruttare al meglio questi dispositivi che risultano però limitati per il controllo di applicativi complessi e in paricolare per la gestione della terza dimensione.
Il
mouse è limitato alla gestione di uno spazio bidimensionale e solo l'utilizzo combinato di
pulsanti e movimento permette la navigazione in ambienti complessi e/o tridimensionali:
l'esperienza di utilizzo non risulta così naturale e necessita una fase di apprendimento del
sistema di controllo dato che questo si discosta dall'esperienza quotidiana dell'utente.
Negli ultimi anni, grazie ad una sensibile abbassamento dei costi dell' hardware, si è vista la
nascita di molteplici dispositivi adatti a gestire l'interazione uomo-macchina che puntano
ad avvicinare la metodologia comunicativa adottata a quella normalmente utilizzata per
interagire con il mondo sico che ci circonda e nella comunicazione con altri individui.
Questi dispositivi deniscono un nuovo tipo interfaccia detta Natural User Interface
1
(NUI): l'idea è quella di consentire una comunicazione con i dispositivi tecnologici il più
semplice, intuitiva e naturale possibile. Sono sempre più comuni dispositivi con interfacce
touchscreen (smartphone, tablet), anche multitouch, che rendono l'utilizzo semplice e intuitivo; anche i sistemi di riconoscimento vocale (Es: gestione dei comandi dell'automobile,
software speech to text ecc.) sono in continuo sviluppo e miglioramento.
1.2
Natural User Interface
Con il termine Natural User Inteface (NUI) si intende un metodo di interazione con i
sistemi completamente invisibile, che non richieda di agire direttamente su strumenti sici
quali mouse o tastiera, immediatamente e facilmente comprensibile dall'utente grazie alla
similitudine con il normali metodi di comunicazione con le persone e di interazione con
gli oggetti.
I comandi vengono impartiti da azioni, gesti e movimenti che risultano comuni all'utente;
anche gli output non sono strettamente visivi come avveniva in precedenza: per avvicinarsi
all'esperienza quotidiana vengono usati feedback graci, sonori e tattili.
L'industria che lavora nel settore ha investito molte risorse in questo tipo di dispositivi.
Tra questi troviamo Microsoft Surface [1] (Fig. 1.1), un tavolo interattivo sensibile a 50
punti di pressione in grado di riconoscere anche oggetti appoggiati su di esso; HoloWall
[2, 3] (Fig. 1.2) un sistema a basso costo e poco complesso che permette di utilizzare
una supercie retroproiettata come multi touch con riconoscimento di dita, mani, arti e
potenzialmente oggetti senza la necessità del contatto sico.
Fonte http: // www. microsoft. com/ surface/
Figura 1.1: Microsoft surface 2.0 table (
en/ us/ purchaseprocess. aspx )
Interessante è anche il progetto di Mitsubishi DiamondTouch [4, 5] (Fig. 1.3): uno speciale
tavolo multi touch e multi utente in grado di riconoscere l'identità del soggetto che sta
2
Figura 1.2: Componenti e schema funzionale del sistema HoloWall (
Fonte http: // www.
sonycsl. co. jp/ person/ rekimoto/ holowall/ )
interagendo, grazie ad un sistema integrato nelle sedie degli utilizzatori che sfrutta la
conducibilità elettrica del corpo umano.
Figura 1.3: DiamondTouch e l'utilizzo multi utente (
Fonte http: // www. merl. com/
areas/ DiamondTouch/ )
PreSense [6, 7] invece è un sistema touch sensibile alla pressione esercitata e in grado di
restituire un feedback tattile all'utente.
Tutti gli strumenti sopra illustrati hanno un costo economico non trascurabile. Si tratta
di soluzioni sviluppate per aziende, scuole o istituti ma che risultano ancora inaccessibili
all'utente domestico.
Recentemente sono usciti sul mercato dispositivi che mettono a disposizione del pubblico
sistemi di controllo con grandi potenzialità e prezzi accessibili:
importanti compagnie
come Nintendo hanno sviluppato e prodotto controller equipaggiati con un'ampia varietà
di sensori in grado di rilevare con buona precisione i movimenti del corpo umano.
3
La piattaforma di intrattenimento Nintendo Wii rappresenta la prima soluzione consumer
a proporre un'interfaccia controllata da movimenti complessi eseguiti anche con l'intero
corpo; questi vengono rilevati da accelerometri posti nel gamepad (chiamato
wiiMote )
e da una videocamera sensibile nella banda dell'infrarosso accoppiata a due emettitori
led per il calcolo della posizione. Al
la
BalanceBoard
wiiMote
sono seguiti controller molto specici come
sempre della Nintendo, dispositivi simili come il
strumento utilizzato nel lavoro in trattazione: il
Microsoft Kinect.
playStation Move
e lo
Un futuro sviluppo nel campo delle interfacce saranno le Organic User Interface, dove
l'organicità di un interfaccia si traduce nell'assenza di schemi e/o strutture rigide, sostituiti
da elementi aancabili tra di loro capaci di assumere composizioni sempre diverse ed
adatti all'ambiente e alle funzionalità richieste. Inoltre, come ogni elemento organico e
quindi vivo, un'interfaccia organica deve saper evolvere nel tempo, trasformandosi per
migliorare la sua accessibilità.
4
Capitolo 2
Stato dell'arte
La letteratura in questo settore è molto ricca, perchè coinvolge svariate sfaccettature della
visione articiale. Per quanto riguarda il lavoro di tesi, gli aspetti di maggiore interesse
gesture recognition, 3d gesture recognition, stroke matching, hand detection
pose recognition.
sono:
e
hand
Fattore molto importante e da considerare nella scelta della metrica da implementare e
sviluppare è l'invarianza: il sistema deve essere in grado di riconoscere un movimento
nello spazio a prescindere dalla posizione, la scala e la velocità con cui viene eettuato.
Si rende inoltre necessario che l'elaborazione delle immagini e dei dati possa avvenire ad
una velocità che permetta l'utilizzo del metodo in tempo reale.
Il processo di elaborazione può essere suddiviso in tre fasi fondamentali caratterizzate da
diverse possibili scelte implementative:
ˆ Riconoscimento delle mani:
un requisito fondamentale per riconoscere i movi-
menti è individuare chiaramente la posizione delle articolazioni del corpo umano, in
particolar modo delle mani. Nel sistema sviluppato questo problema è trasparente:
ad occuparsi dell'individuazione nello spazio dei
sviluppato da
Microsoft.
Joint
è il Framework
KinectSDK
Un confronto tra i frameWork disponibili a questo scopo
sarà trattato in 5.2.2.
ˆ Analisi della forma delle mani:
riuscire ad analizzare e capire la gesticolazione
permette di interpretarne la semantica e di ridurre il divario comunicativo tra uomo
e macchina. La completa interpretazione delle movenze delle mani è un obiettivo
arduo da raggiungere, va inoltre considerato che la risoluzione sica della
camera
non permette di ottenere risultati cosi precisi.
limite sico del
MS Kinect
depth
E' stato appurato che il
è il riconoscimento del numero di dita mostrate alla
camera se si rimane ad una distanza compresa tra gli 1.5 m e i 3 m. Le metodologie
analizzate e la soluzione adottata sono descritte in 3.1.
5
ˆ Analisi delle traiettorie:
è la capacita di analizzare le traiettorie, nello specico
degli arti umani, e riuscire a identicare in un database il gesto più somigliante a
quello eettuato. Nel lavoro svolto è stato dato un peso rilevante a questa tematica;
gli strumenti utilizzati funzionano egregiamente nell'identicare la posizione nello
spazio degli arti. In 3.3 verranno spiegati nei dettagli i procedimenti sperimentati.
2.1
Riconoscimento delle mani utilizzando immagini di
profondità
Xia Liu e K. Fujimura nel loro trattato
Hand gesture recognition using depth data
[8]
propongono un metodo facile ma eciente per riconoscere la locazione della mano da
un'immagine di profondità, ottenuta da una telecamera bastata sul principio del 'time to
ight'. L'utilizzo di immagini di profondità permette una facile separazione tra
BG)
(
e
foreground (FG),
background
si può inoltre assumere che la mano sarà l'oggetto più vicino
alla camera.
Una semplice suddivisione dell'immagine in blob uniformemente connessi permette di
riconoscere la mano in maniera abbastanza precisa. Risulta invece roblematica la scissione
tra la parte superiore dell'avanbraccio e il palmo, superata imponendo dei vincoli sul
rapporto d'aspetto.
Il confronto tra il frame da analizzare e il database delle possibili pose della mano avviene
utilizzando la distanza di Chamfer. Per tutti i template memorizzati viene calcolata la
distance transform : un immagine dove ogni pixel assume un intensità proporzionale alla
sua distanza dall'edge ad esso più vicino. Viene poi calcolata la correlazione tra l'immagine
contenente solo i contorni del frame da analizzare e il database di templates trasformati,
utilizzando la
distance transform.
La correlazione viene calcolata come
S=
XX
i
dove
E(i, j)
è la edge image e
DT (i, j)
E(i, j) × DT (i, j)
(2.1)
j
è la
distance transform image.
Minore è il valore
di S e maggiore sarà la correlazione, quindi la somiglianza tra il campione e il componente
del database in analisi.
Per riconoscere i movimenti viene proposto un metodo basato sulla suddivisione di questi
sui 3 assi dello spazio cartesiano: per ogni asse esiste una collezione di vettori di riferimento
composti da
K
campioni da utilizzare per il confronto.
Per semplicare l'elaborazione, i movimenti di lieve entità non vengono considerati, il
movimento registrato inoltre viene sottocampionato in modo da ottenere
K
campioni in
uscita. In questo modo si ottengono vettori della stessa lunghezza e quindi facilmente con-
6
Figura 2.1:
A sinistra si vede l'immagine contorni, mentre a destra vi è una rap-
presentazione della stessa immagine dopo aver applicato la
distance transform.
Fonte
[8]
frontabili per mezzo di dierenti metriche tra cui la distanza euclidea e l'errore quadratico
medio.
Inne la gesture eettuata viene classicata in funzione delle sue informazioni caratteristiche, cioè l'unione di tutte le peculiarità precedentemente analizzate, ottenendo un errore
percentuale inferiore al 5% e utilizzando un database di 14 gesture.
I vantaggi di questo metodo sono:
ˆ
Facile da implementare e non molto oneroso computazionalmente.
ˆ
Invariante a cambiamenti di scala per quanto riguarda l'analisi delle forme.
ˆ
Invariante ai cambi di luminosità.
ˆ
Le variazioni nella velocità del movimento possono dierenziare gesture caratterizzate dallo stesso percorso.
Gli svantaggi invece:
ˆ
Ineciente se i cambiamenti di scala della gesture registrata sono plurimi e non
uniformi.
ˆ
L'imposizione di vincoli sul rapporto d'aspetto non è il sistema più eciente per
selezionare soltanto la mano; spesso l'avambraccio viene confuso portando ad errori.
ˆ
Non si ha invarianza di scala nel riconoscimento del percorso eettuato dall'arto in
analisi.
X.Chai,Y.Fang, K.Wang in
wsing
Roboust hand gesture analysis and application in gallery bro-
[9] propongono un sistema per rendere più ecacie l'hand detection rispetto che
in [8].
Anche in questo caso viene utilizzata una
depth camera,
dai cui dati viene estratta una
regione approssimata in cui è presente la mano con la metodologia già illustrata nella
sezione 2.1.
7
Figura 2.2:
(a)Immagine intensità originale (b)Regione della mano approssimativa
(c)Centroide approssimativo della mano (d)Gruppo di cerchi estratti (e)Palmo della mano selezionato (f )
Bounding Box
(g)Direzioni di taglio determinate (h)Posizione di taglio
determinata (i)Immagine binaria nale (l)La zona selezionata dell'immagine intensità.
Fonte [9]
Basandosi sui pixel più vicini al sensore si calcola un centro approssimativo per la mano,
questo verrà utilizzato nel prossimo passo come punto di partenza per un'identicazione
più precisa.
Viene utilizzata la
Scale space feature detection
per calcolare i cerchi che potrebbero
rappresentare il palmo, quello corretto viene poi selezionato tramite un algoritmo iterativo.
Vengono inne determinate le direzioni in cui tagliare l'immagine approssimativa inizialmente selezionata, in modo da rimuovere l'avambraccio.
In questa fase sono utilizzate
le informazioni precedentemente calcolate congiuntamente all'imposizione di un rapporto
d'aspetto predeterminato, che permette di capire in che direzione tagliare l'immagine.
Utilizzando un Intel Pentium D CPU a 2.33Ghz, equipaggiato con 2 Gb di RAM, i tempi
di elaborazione medi sono di 15 ms e l'errore percentuale ottenuto è inferiore all'1%
considerando un vocabolario di sole 6 gesture.
Questo metodo ha il vantaggio di essere molto eciente nel distinguere il palmo dall'avambraccio e invariante a cambiamenti di scala e di luminosità. Gli svantaggi invece sono
un'implementazione complessa e l'elevato onere computazionale per ogni frame in analisi. I risultati riportati sono soddisfacenti ma il vocabolario di gesture utilizzato è molto
limitato.
2.2
Riconoscimento della posa delle mani tramite l'analisi delle curve concave e convesse dei contorni
J. Segen and S. Kumar in
Fast and Accurate 3D Gesture Recognition Interface
[10] svi-
luppano un metodo per riconoscere la disposizione delle mani basato sul riconoscimento
dei picchi e delle valli nell'immagine contorni.
8
L'obbiettivo è quello di riconoscere quattro classi di
gesture ; tre statiche e una dinamica.
Figura 2.3: Le quattro gesture riconosciute e la rappresentazione dei picchi e delle valli
nei primi due casi. Fonte [10]
La
gesture
di pointing verrà ulteriormente analizzata al ne di individuare la direzione
indicata nello spazio 3d cosi da poter comodamente gestire un ambiente virtuale a tre
dimensioni.
Vengono utilizzate due normali videocamere in stereovisione con risoluzione di 320x240
per analizzare l'ambiente.
I contorni vengono salvati come una lista di pixel in senso orario.
Successivamente si
calcola l'angolo tra ogni vettore composto da 2 pixel adiacenti. Vengono quindi individuati
i picchi e le valli come i punti in cui la curvatura è relativamente positiva e negativa nonchè
superiore a una determinata soglia. Viene eettuata una prima classicazione basata sul
numero di picchi e di valli che permette di identicare tre delle possibili forme:
reach & ground.
Per quanto riguarda il click il tipo di analisi è dierente e si basa sui
frame successivi alla
gesture
di point.
in maniera dierente per le tre
dinamica
click.
Le performance del sistema sono state valutate
gesture statiche (point, reach & ground ) e per la gesture
Nel primo caso il rapporto d'errore è inferiore a
nella maggior parte dei casi, da attribuire al
click
point,
motion blur.
1
e la causa dell'errore è,
500
Per quanto riguarda la
gesture
invece, i risultati variano molto di utente in utente, passando dal 10% a oltre il 50%
di errore.
Vantaggi:
ˆ
Piuttosto veloce
9
ˆ
Implementazione non molto complessa
ˆ
Invariante ai cambi di scala e volendo anche all'angolo di visione
Svantaggi:
ˆ
Si possono riconoscere senza problemi soltanto poche pose
ˆ
Il sistema di estrazione degli edge non è adabile se l'illuminazione della scena non
è costante
Altri metodi per riconoscere la posa statica delle mani sono il confronto tra istogrammi
[11] (derivante dalle tecniche di template matching) e l'utilizzo di mappe di orientazione
locale [12] calcolate utilizzando
steerable lters
[13].
Lo sviluppo di camere di profondità più precise, a risoluzione maggiore e meno soggette
al rumore ambientale, permetterà l'analisi delle mani confrontandole con un modello 3d
e quindi una descrizione estremamente accurata della disposizione delle dita nello spazio.
2.3
Utilizzo della trasformata di Fourier per il confronto tra movimenti
Un segnale discreto
f (x)
n comdalla sua trasformazione nel dominio di Fourier F (f (x)) [14].
ottenuto può essere ridotta valutando soltanto i primi m < n
campionato
ponenti complessi ottenuti
La complessità del segnale
n
volte è identicamente rappresentato dagli
campioni.
Il metodo di
Naftel e Khalid
scindendolo in due segnali
[15] prevede di convertire il vettore posizione
x e y, S x
tamente la trasformata di Fourier
S
in ingresso
S y , che verranno poi trasformati applicando separax
y
ad entrambi: X = F (S ) e Y = F (S ). Considerando
e
m elementi (sia reali che immaginari) di ogni vettore otterremo un vettore caratteristico totale di 4m elementi. Dato che la potenza di un segnale è solitamente
concentrata nelle frequenze basse, il valore m può essere piuttosto piccolo [16].
soltanto i primi
Secondo il teorema di Parseval la distanza euclidea tra segnali nel dominio delle frequenze
è uguale alla loro distanza nel dominio temporale [17], la loro somiglianza può dunque
essere stimata in funzione della distanza tra le loro feature di Fourier.
2.4
Utilizzo della trasformata Wavelet
f (x), composto da n campioni, produce un segnale
la metà dei campioni e d(ω) contenente i dettagli
La decomposizione Wavelet del segnale
grezzo c(x)
10
con approssimativamente
dell'alta frequenza, cosi che
e
f (x) possa essere completamente ricostruito a partire da c(x)
d(ω).
La complessità del segnale può essere ridotta decomponendolo iterativamente n che
contenga solo pochi campioni e considerando soltanto i primi elementi di
ponendo un segnale composto da
nc =
n
2j
Il segnali
elementi e
x
e
y
(n − n( c))
n
campioni
j
d(ω).
c(x)
Decom-
volte si produce un approssimazione con
dettagli.
possono essere decomposti separatamente e poi uniti in modo da ottenere
un vettore caratteristico composto da
2(nc +nd ) elementi.
Per poter confrontare le features
queste devono essere composte dallo stesso numero di elementi, obiettivo che può essere
facilmente ottenuto ricampionando il segnale.
2.5
Utilizzo del metodo Characteristic Loci
Characteristic Loci
è un metodo basato sull'area e sviluppato da Glucksman [18] per il
riconoscimento dei caratteri scritti. Si parte da un immagine binaria
I;
in questa ad ogni
pixel viene assegnato un codice basato su quante linee sono intersecate dai 4 raggi aventi
origine nel punto stesso (g 2.4). Per il confronto delle traiettorie queste devono essere
rappresentate da un immagine binaria che ne descriva le caratteristiche nello spazio.
Per costruire il vettore identicativo della gesture da utilizzare per il confronto vengono
sommate le occorrenze multiple dello stesso codice.
Figura 2.4: La feature di Loci per la forma a stella: (a) ad ogni pixel viene assegnato un
codice basato sulle intersezioni delle linee da esso uscenti nelle quattro direzioni; (b) una
visualizzazione del codice; (c) il conteggio normalizzato di ogni codice produce il vettore
caratteristico. Fonte: [24]
11
2.6
Quantizzazione angolare
L.Olsen , F.Samavati, M. Costa in
Fast stroke Matching by angle quantization [24] propon-
gono un nuovo ed innovativo metodo per il riconoscimento del tratto: la quantizzazione
AQ). Ogni coppia di punti dello stroke {pi , pi+1 } viene trasformata in un vettore
angolare (
vi = pi+1 − pi .
[0, 2π] in k settori equivalenti e
contato il numero di vettori in ognuno di questi. Se il settore i contiene σi vettori, allora
la sequenza di queste somme forma il vettore Q̂ : Q̂ = hσi , . . . , σk i.
Viene poi quantizzato il cerchio unitario
Data la rappresentazione di tipo direzionale, quindi dipendente soltanto dalla posizione
relativa dei punti, le features della
AQ sono invarianti alle traslazioni.
Per fornire un invarianza anche alla frequenza di campionamento e alla scala,
essere normalizzato alla lunghezza unitaria
Q = Q̂/ kQk
Q̂
dovrà
cosi che ogni coeciente di
Q
rappresenti la percentuale di attività dello stroke in un determinato range (vedi Fig 2.5
(e)) Negli esperimenti eettuati il cerchio unitario è suddiviso in 16 settori e la metrica
adottata per confrontare i vettori è la distanza euclidea o distanza norma 2,
| · |2 :
d(Q1 , Q2 ) = |Q1 − Q2 |2
Figura 2.5:
(a) Il tratto originale; (b) rappresentazione direzionale; (c) conta dei vettori in
ogni angolo piano; (d) il vettore caratteristico
Q.
Q̂; (e) il vettore caratteristico normalizzato
Fonte [24]
I vantaggi di questo metodo sono molti: in primis si tratta di un algoritmo di semplice
sviluppo e implementazione che è ecace con un vettore caratteristico dalle dimensioni
piuttosto limitate ( 16 componenti sono sucienti ). Inoltre si ottiene un'invarianza sia
alla scala globale che a scale plurime non uniformi; con dei piccoli accorgimenti si può
ottenere anche l'invarianza alla rotazione dell'intero stroke. A suo sfavore possiamo notare
l'incapacità di considerare la caratteristica locale dello stroke (vedi Fig 2.6) valutandone
12
soltanto l'insieme: non vengono infatti considerate e sono ininuenti altre caratteristiche
quali la velocità di esecuzione e i punti di inizio e di ne.
Figura 2.6:
Perdita delle caratteristiche locali nella Angle Quantization:
(a) e (b)
presentano features molto simili sebbene i tratti siano dierenti. Fonte [14]
2.7
Dinamic Time Warping
La tecnica chiamata
Dinamic Time Warping (DTW)
[19] è uno strumento di confron-
to relativamente semplice che permette la comparazione di sequenze aventi lunghezza
dierente.
La caratteristica principale di questa tecnica è la capacità di applicare una
distorsione temporale locale e non uniforme alle sequenze in analisi al ne di individuare
il miglior allineamento possibile.
Nasce come sistema per il confronto tra sequenze tempo varianti su una singola dimensione
( Es:
segnale audio
), ma viene presto esteso a domini dierenti come il riconoscimento
automatico del linguaggio dei segni [20] e l'analisi delle traiettorie [21].
Il metodo si basa su un operatore distanza (Lp norm) e una particolare procedura di
confronto che permette di allineare al meglio i vettori in analisi grazie ad una distorsione
temporale dinamica.
La distanza tra due serie
un
warping path
X̄ = {xn }N
n=0
K
Ȳ = {ym }M
m=0
può essere calcolata considerando
[20] come in 2.2:
W̄ = w0 , w1 , . . . , wk
dove
e
max {N, M } < K < (N + M + 1)
è la lunghezza del percorso eettuato e
wk = (m, n)
dove
m, n
(2.2)
X
(w0 = (0, 0)
sono indici di
Y . Il percorso distorto deve comprendere tutti i campioni nella traiettoria
wk = (N, M )), inoltre m, e n devono essere continui (bisogna usare ogni indice
e
e
delle serie
coinvolte) e monotonicamente crescenti.
La distanza tra
X
e
Y
è la somma delle distanze tra campioni che minimizza la dierenza
totale soddisfacendo :
(
DT W (X, Y ) = min
" K
#)
1 X
wk
K k=1
(2.3)
13
dove
wk
è la distanza minima tra due campioni indicizzati nel
k th
elemento del percorso
(vedi Fig. 2.7).
Figura 2.7: DTW warping path . Fonte [20]
Si tratta quindi di creare una
matrice distanza M a partire dai vettori X̄ e Ȳ
M (i, j) = distanza norma p(X(i), Y (j))
e di spostarsi al suo interno partendo da
M (0, 0)
tale che
(2.4)
per arrivare a
M (m, n)
seguendo il
percorso caratterizzato dal minor peso totale. Nel caso si utilizzi la dierenza norma 1 la
2.4 diventa
M (i, j) = |X(i) − Y (j)|
(2.5)
Questa tecnica non è immune da lacune. La principale riguarda la sensibilità al rumore
e agli errori di acquisizione, unita alla complessità computazionale elevata nel caso non
si usino degli accorgimenti;
O((N + 1)(M + 1))
con
N +1
e
M +1
lunghezze delle
sequenze. Fortunatamente l'utilizzo di tecniche di programmazione dinamica permette di
ridurre drasticamente l'onere computazionale e ottenere il miglior allineamento; date due
sequenze
X
e
Y
la
DT W (X; Y )
è calcolata come:



DT W (Xi , Yj−1 ) 




+ d(xi , yj )
DT W (Xi , Yj ) = min
DT W (Xi−1 , Yj )



DT W (X , Y )

i−1
dove
d( · , · )
il campione
j−1
è la distanza calcolata in funzione della metrica scelta tra il campione
yj ,
xi
e
mentre il componente che la precede indica di scegliere il percorso a peso
minore tra tutti quelli connessi che portano alla posizione
14
(2.6)
(i, j)
della
matrice dierenze.
2.8
Miglioramenti della tecnica DTW
In letteratura si possono trovare molte tecniche che permettono di adattare la
DTW
a
contesti diversi.
Nel caso specico si rendono necessari miglioramenti della tecnica descritta in 2.7 al ne
di:
1. ottenere un invarianza spaziale:
gesture eettuate in zone dierenti dello spazio
devono poter essere confrontate senza considerare la traslazione relativa;
2. estendere il metodo a vettori multidimensionali in modo da poter confrontare contemporaneamente un numero arbitrario di
Joint
analizzandone il movimento nello
spazio bidimensionale o in quello tridimensionale.
La soluzione adottata verrà descritta in 3.3; di seguito saranno illustrati alcuni metodi
presenti in letteratura.
Il problema (1) può essere risolto adottando molteplici soluzioni, tra cui quella descritta
in
Derivative Dynamic Time Warping
[25].
Q̄ = q0 , q1 , . . . , qk e
V̄ = v0 , v1 , . . . , vj ; al ne di ottenere
Supponiamo di avere in ingresso al sistema il vettore
di doverlo
confrontare con il vettore di riferimento
invarianza
all'oset dei due segnali
1
è suciente calcolarne la derivata discreta per mezzo della
formula 2.7 o di una sua equivalente e utilizzare quest'ultima come nuova sequenza di
ingresso per la
DTW.
Dx [qi ] =
(qi − qi−1 + ((qi+1 − qi−1 )/2)
2
La complessità di questa tecnica è equivalente a quella di una normale
(2.7)
DTW;
i calco-
li addizionali per calcolare la derivata dei vettori in ingresso vanno a sostituire e sono
di complessità paragonabile a quelli per la rimozione dell'oset, operazione altrimenti
necessaria.
Supponiamo ora di dover confrontare due traiettorie nello spazio tridimensionale (punto
2) descritte relativamente dalle serie
spazio tridimensionale) e lunghezza
ˆ
M
e
B
e
N
rispettivamente. Le soluzioni adottabili sono:
applicare il warping per mezzo della
A
e
B.
di dimensione
DTW
nello
separatamente alle varie dimensioni di
I vettori in ingresso saranno dunque
A(1, n) con 0 ≤ n ≤ N
e
B(1, m)
con
0≤m≤M
A(2, n) con 0 ≤ n ≤ N
e
B(2, m)
con
0≤m≤M
A(3, n) con 0 ≤ n ≤ N
e
B(3, m)
con
0≤m≤M
1 traslazione
3 (vettori movimento
A
del vettore rispetto all'origine degli assi
15
Da ogni confronto si ottiene un valore di distanza normalizzata svolgendo l'equazione 2.3. Per ottenere una distanza globale tra le due serie si può semplicemente
scegliere di sommare le tre distanze ottenute nel caso in cui queste abbiano la stessa
importanza o, diversamente, di imporre un peso specico ad ognuna delle tre in
modo da conferire dierente valore ad ogni dimensione. Tale metodologia permette
di applicare una curvatura diversa ad ogni dimensione delle serie in analisi ma ha
lo svantaggio di non fornire una misura di correlazione totale.
ˆ
utilizzare la tecnica
MD-DTW
[22] che permette il confronto diretto tra serie N-
dimensionali con N arbitrario. Innanzitutto bisogna normalizzare ogni dimensione
di
A
e
B
in modo da ottenere media nulla e varianza unitaria: le serie sono così
confrontabili.
Successivamente si passa alla creazione della
matrice distanza
da
fornire all'algoritmo per la scelta del percorso di warping ottimale. Tale matrice,
diversamente da quella descritta in 2.4, verrà creata considerando tutte le dimensioni
dei vettori in ingresso secondo la formula
M (i, j) =
K
X
|(A(k, i) − B(k, j)|
(2.8)
k=0
nel caso di utilizzo della norma 1 come distanza tra campioni.
I vantaggi appor-
tati sono evidenti nella situazione in cui le informazioni di sincronizzazione siano
distribuite su dierenti dimensioni come si può vedere dalla gura 2.8.
Figura 2.8: (a) mostra due serie bidimensionali articiali con la stessa media e varianza.
Se venisse utilizzata la normale DTW risulterebbe impossibile sfruttare le informazioni di
sincronizzazione presenti in entrambe le dimensioni e si otterrebbe un warping come quello
ragurato in (b), sicuramente inadatto ad entrambe. Utilizzando la MD-DTW si ottiene
una sincronizzazione ottimale che tiene conto di ambedue le dimensioni(c). Fonte [24]
16
Al ne di evitare singolarità dal carattere eccessivamente rilevante, si possono applicare
delle restrizioni al percorso che può essere seguito all'interno della
distance matrix
de-
nendo al suo interno un area dalla quale non si può uscire (Windowing) [23]. Questo
sistema non evita gli errori gravi, al massimo ne limita l'entità.
Sostituendo l'equazione 2.6 con
DT W (Xi , Yj ) =
min(Q × DT W (Xi , Yj−1 ), Q × DT W (Xi−1 , Yj ), DT W (Xi−1 , Yj−1 ))
+d(xi , yj )
è possibile forzare l'algoritmo a seguire la diagonale e quindi un warping costante semplicemente aumentando il valore del coeciente moltiplicativo
Q.
17
18
Capitolo 3
Metodo Implementato
L'obiettivo di questo lavoro di tesi è lo sviluppo di un sistema completo per il controllo
gestuale del calcolatore, che risulti il più universale ed adattabile possibile. L'algoritmo
deve essere in grado di riconoscere i movimenti nello spazio tridimensionale di una o più
articolazioni del corpo umano in maniera precisa, eciente e a una velocità tale da poter
operare in real time.
Sono state implementate tre principali funzionalità:
ˆ
un'analisi continua della forma delle mani del soggetto in modo da poter impartire
dei comandi solamente modicando la conformazione della mano, ad esempio aprendola o chiudendola. Questo argomento verrà arontato nel dettaglio nella sezione
3.1.
ˆ
il riconoscimento automatico di semplici gesti (chiamati
fast gesture )
che non ri-
chiedono un identicatore di inizio e ne. Nello specico, il sistema è in grado di
riconoscere i movimenti veloci verso l'alto, il basso a sinistra o a destra di entrambe
le mani. Per approfondimenti si rimanda alla sezione 3.2.
ˆ
l'analisi di movimenti complessi eseguiti da una o due mani (o altre parti del corpo)
nello spazio tridimensionale.
Ognuna di queste funzionalità assume un ruolo ben denito all'interno dell'algoritmo nale
ma può essere anche adottata indipendentemente dalle altre al ne di gestire controlli
specici di un software o dispositivo.
La
hand shape analysis viene eettuata al ne di carpire i momenti di inizio e ne (triggers)
di una gesture più complessa, che verrà poi analizzata dall'algoritmo DTW.
Il funzionamento e lo scopo delle
fast gesture
non sono legati al resto dell'algoritmo: in
ogni momento in cui non si stia eettuando una gesture complessa il sistema è recettivo
a questi particolari movimenti.
Questi possono essere utilizzati al ne di gestire alcu-
ne delle funzionalità di uso più comune e che richiedano un rapido accesso all'interno
dell'applicativo
19
3.1
Hand shape analysis and trigger detection
Come già analizzato in 2.1 e 2.2 esistono molteplici soluzioni per l'analisi della gestualità.
Il dispositivo
MS Kinect
dispone di una depth camera avente una risoluzione nativa
di circa 320 per 240 pixel. Questo signica che nell'analisi di un soggetto alla distanza
approssimativa di 2 metri l'area di interesse contenente la mano non sarà composta da
più di 900 pixel (30x30).
Considerando il fatto che la risoluzione in profondità della depth camera è di circa 1.5
cm e che il dispositivo produce immagini soggette a molto rumore, specialmente se ci si
trova in un ambiente luminoso, si deduce che l'analisi della gesticolazione delle mani non
può essere estremamente precisa. Non è possibile applicare i più avanzati algoritmi basati
sull'utilizzo di modelli tridimensionali della mano e dei suoi movimenti ma nemmeno
approcci più semplici, come quello descritto in 2.2. Ad una distanza di circa 1.5 m
1
le
mani vengono viste come illustrato nella gura 3.1: si può notare come in fotogrammi
successivi alcune dita compaiano e scompaiano a causa dello sfarfallio dell'immagine, non
permettendo cosi di individuare in maniera precisa il numero di dita aperte.
Figura 3.1: Varie ragurazioni di come vengono viste le mani dalla depth camera alla
distanza di circa 1.5m
In una prima fase è stato applicato l'algoritmo Convexity Defect per individuare i picchi
e le valli dell'immagine profondità sogliata:
questa soluzione è stata sostituita perché
non permetteva una precisione tale da poter contare il numero delle dita.
Riuscire a
distinguere con precisione se le dita aperte nella mano fossero più o meno di 3, cosi da
ottenere un output binario, è il miglior risultato ottenuto. L'elevato onere computazionale
e il fatto che l'algoritmo in questione fallisce molto facilmente se la mano viene mostrata
alla videocamera con un angolo che si discosta, anche di poco, dalla perpendicolarità,
hanno fatto optare per la scelta di una tecnica dierente.
Data la necessità di un
trigger
binario per identicare inizio e ne delle gesture, quindi
molto semplice, si è deciso di seguire una via altrettanto facile per l'implementazione. In-
1 distanza
minima per un ecacie funzionamento dell'algoritmo di skeleton recogition e quindi per
poter utilizzare il sistema sviluppato
20
dividuata la posizione della mano
2
viene selezionata una porzione di immagine profondità
che la contenga caratterizzata da dimensioni variabili in modo dinamico. Queste variano in funzione della distanza della mano così che la porzione da essa occupata rimanga
costante, a patto di mantenere invariati l'angolo di visione e la disposizione delle dita.
Questo permette di distinguere con precisione una mano aperta, e quindi con tutte le dita
ben visibili, da una mano chiusa a pugno. Test sperimentali hanno permesso di individuare
la corretta proporzione tra distanza e area occupata: supponendo di selezionare un'area
quadrata, la lunghezza dei lati sarà legata dall'equazione 3.1 alla distanza tra mano e
videocamera.
l = linit /(d0.75 )
In 3.1
l
(3.1)
è la lunghezza del lato, linit è un valore costante che permette di adattare l'area
di analisi ad oggetti di dimensioni dierenti, mentre
d
è la distanza della mano espressa
in metri.
La regione selezionata va quindi sogliata per ottenere un immagine binaria in cui i pixel
con valore
0
rappresentano il
background,
mentre i pixel a
1
identicano l'oggetto di
interesse (la mano). Questo permette di calcolare la percentuale di immagine occupata e
di individuare una soglia signicativa: se l'area occupata supera tale soglia la mano è da
considerarsi aperta, diversamente viene considerata come chiusa.
Per rendere più robusto questo processo e rimuovere eventuali pixel uttuanti e non
appartenenti al corpo principale, vengono eettuate due operazioni morfologiche inverse
sull'immagine binaria: viene applicata l'erosione per mezzo di un elemento strutturale
piuttosto piccolo seguita da una dilatazione, eettuata da un elemento dalle dimensioni
maggiori.
Figura 3.2: Varie ragurazioni di come si presenta l'immagine della mano dopo le operazioni morfologiche. Il numero sotto ogni gura rappresenta la percentuale di area occupata
dalla mano.
Utilizzando questo metodo si ottiene una minor sensibilità all'angolo di visione: non è
necessario riuscir a distinguere ogni singolo dito come nel caso precedente, è suciente
2
la skeleton recognition e dunque anche la hand detection viene eettuata dal framework in utilizzo:
KineckSDK
21
che buona parte del palmo o del dorso della mano sia visibile alla telecamera. Ovviamente
anche questa tecnica può fallire se la mano viene mostrata con un angolo inadatto, se si
indossa un oggetto molto voluminoso al polso (orologio, bracciale, maniche dell'indumento) o se si va ad appoggiare la mano ad un oggetto. I primi due casi non sono risolvibili se
non istruendo l'utente all'utilizzo, mentre il terzo è stato risolto non analizzando la mano
nel caso in cui questa si trovi vicina al corpo, in particolar modo ai anchi (posa assunta
normalmente in fase di riposo dell'arto), alla testa, alle spalle e all'altra mano. Sono state
determinate sperimentalmente delle soglie di distanza minima sotto la quale non operare
e sopra la quale sia garantita una buona funzionalità.
3.2
Fast gesture
Il rilevamento di questi semplici
nale.
gesti
è continuo e non richiede un
trigger
ne iniziale ne
Si tratta di movimenti molto semplici, su un solo piano dello spazio e di breve
durata.
Anche in questo caso sono stati sperimentati percorsi dierenti prima di raggiungere il
risultato nale.
Requisito fondamentale è l'implementazione di calcoli veloci da eettuare, in quanto
eseguiti in maniera continua su ogni singolo fotogramma.
In prima fase è stato implementato il calcolo continuo della distanza tra campioni rilevati
nell'
hand path.
Considerando come costante la frequenza di campionamento e valutando
tale distanza si ottiene la velocità dell'arto in osservazione. E' stata inoltre calcolata in
modo continuo l'accelerazione dell'arto stesso computando la derivata. L'idea era quella
di ottenere una sorta di attivazione della
fast gesture
nel momento in cui il movimento
superava una determinata soglia di accelerazione o velocità. Per tutto il tempo in cui la
velocità e/o accelerazione restava al di sopra di tale soglia i punti del percorso venivano
registrati.
Appena i valori tornavano sottosoglia la registrazione veniva disattivata e il
percorso eettuato veniva confrontato per mezzo della DTW con uno speciale vocabolario
gesti veloci. Questo metodo risulta preciso e permette l'utilizzo di un esteso vocabolario
di fast gesture ma ha alcuni svantaggi: è molto oneroso dal punto di vista computazionale
di
inoltre non è possibile stabilire con precisione una velocità/accelerazione di soglia che
rende possibile distinguere i normali movimenti dell'utente da quelli eettuati allo scopo
di attivare un
gesto veloce.
Una soglia troppo bassa dà origine a molti falsi positivi e
quindi vengono impartiti comandi indesiderati, una soglia troppo alta invece necessita di
movimenti troppo rapidi e quindi scomodi all'utente.
Considerati tali fattori e dopo una fase di testing sul metodo appena descritto si è deciso
di implementare un sistema dierente.
L'attivazione delle
fast gesture
avviene superando un muro virtuale posto di fronte all'u-
tente ad una distanza di circa 30 cm. La posizione dell'arto nello spazio viene registrata
22
ogni volta in cui questo supera tale muro (punto di ingresso) o ritorna verso l'utente stesso
(punto d'uscita).
Per tutto il tempo in cui l'arto oltrepassa questa parete immateriale
vengono registrate velocità attuale e media. I punti di ingresso e uscita vengono poi confrontati: la posizione relativa del secondo rispetto al primo determinerà la direzione della
fast gesture,
mentre la velocità potrà essere usata per dare dierente intensità o valore
all'azione che consegue (es: scrolling di una lista o di un catalogo fotograco).
I test su questo metodo hanno evidenziato come sia molto più intuitivo per l'utente: nell'eettuare un movimento verso l'alto, il basso, sinistra o destra viene naturale allontanare
la mano dal corpo nella prima fase del movimento (oltrepassando cosi la barriera virtuale)
e riavvicinarla nell'ultima fase descrivendo una traiettoria ad arco. Adottando lo stesso
metodo si potrebbe implementare anche il riconoscimento di
si raddoppierebbe il numero di
fast gesture
swipe diagonali:
cosi facendo
riconosciute ma si ridurrebbe la robustezza
del sistema.
Figura 3.3: Le quattro fast gesture riconosciute dal sistema. Nell'ordine: SWIPE DOWN,
SWIPE UP, SWIPE LEFT e SWIPE RIGHT
3.3
3d gesture recognition
Il riconoscimento di movimenti complessi nello spazio tridimensionale è la tematica principale di questo lavoro di tesi e quindi arontata in maniera particolarmente esaustiva e
approfondita.
L'implementazione relativamente semplice, la duttilità di utilizzo e l'elevata ecacia della
tecnica
Dinamic Time Warping
hanno fatto ricadere la scelta su di essa.
I principi base sono descritti in 2.7; di seguito saranno descritte le diverse metodologie
implementative e i miglioramenti apportati rispetto alla tecnica classica.
Il framework di micorsoft (5.2.2) restituisce dalla
skeleton analisi
la posizione dei
joint
nello spazio tridimensionale come valori di discostamento in metri rispetto all'origine degli
assi del kinect device (5.2.1). Questo fa sì che non sia necessaria la normalizzazione dato
che le unità di misura delle tre dimensioni possono essere considerate omogenee.
Una movimento completo composto da
N
campioni come quello in gura 3.4 verrà
identicato in maniera univoca dai tre vettori:
23
X = x0 , x1 , . . . , xN
Y = y0 , y1 , . . . , yN
(3.2)
Z = z0 , z1 , . . . , zN
Questi non possono essere utilizzati direttamente come ingresso per l'algoritmo
DTW:
così facendo la stessa gesture eseguita in posizioni diverse dello spazio darebbe risultati
completamente dierenti se confrontata con una gesture di riferimento.
La prima operazione eettuata sui vettori
X, Y , Z
è il sottocampionamento: i punti ac-
quisiti vengono decimati, mantenendo soltanto quelli distanti almeno
n
cm tra di loro.
Questa operazione riduce drasticamente il carico computazionale oltre a introdurre un'invarianza alla velocità di esecuzione. Tale invarianza è garantita anche dall'utilizzo della
DTW che perde la sua funzionalità a tale scopo ma permette di introdurre un'invarianza
alla scala e alla multi-scala.
Figura 3.4: Esempio di gesture registrata
Un'altra possibile operazione preliminare sui vettori è l'applicazione di un ltro di
thing gaussiano
smoo-
così da rendere più dolce il movimento registrato ed eliminare possibili
valori fuori scala e soggetti ad errore di acquisizione. Utilizzando il ltro gaussiano avente
kernel
[0.006|0.061|0.242|0.383|0.242|0.061|0.006]
si ottiene un eetto di smor-
zamento come illustrato in gura 3.5. Nei casi (1) e (2) di g.3.5 le gesture sono state
eseguite volontariamente in modo impreciso e tremolante simulando l'errore umano, mentre nei casi (3) e (4) sono state eseguite
il ltro apporti dei miglioramenti.
normalmente.
E' evidente come in entrambi i casi
Dopo il ltraggio i percorsi ragurati risultano più
omogenei e gli spazi vuoti, dovuti a ritardi, del sistema di acquisizione sono parzialmente riempiti.
A sfavore dell'utilizzo di questa tecnica abbiamo un onere computazionale
leggermente maggiorato e la perdita di alcuni campioni della gesture in funzione della
24
dimensione del kernel del ltro scelto. Nel caso si usi un kernel composto da
e la gesture sia composta da
n − k + 1:
k
n
elementi
campioni, dopo il ltraggio il numero di elementi sarà
questo è un problema per gesture brevi e se
n ≈ k.
Figura 3.5: In alto le gesture così come sono acquisite, in basso invece il risultato dopo
l'applicazione del ltro gaussiano
I vettori identicativi delle gesture appartenenti al vocabolario vengono salvati nella loro
forma semplice ed originale (vedi eq.3.2), in modo da poterli successivamente adattare ad
ogni tipo di metrica utilizzata rielaborandoli a piacere.
Verranno utilizzate quattro dierenti logiche al ne di individuare quale porti a risultati
più precisi:
ˆ
rappresentazione del percorso tramite le derivate dei vettori in ingresso
ˆ
rappresentazione del percorso tramite vettori nello spazio euclideo
ˆ
rappresentazione del percorso tramite vettori nello spazio delle coordinate sferiche
ˆ
normalizzazione del percorso rispetto all'origine degli assi
3.3.1
Rappresentazione del percorso tramite le derivate dei vettori in ingresso
In questo caso i vettori in gioco vengono trasformati calcolandone la derivata: l'implementazione della derivata discreta è stata eettuata seguendo dierenti metriche. Supponiamo
di avere in ingresso il vettore
V = v0 , v1 , . . . , vN ,
la sua derivata potrà essere calcolata
come:
ˆ V 0 (i) = V (i + 1) − V (i) ∀ 0 ≤ i ≤ N − 1
ˆ V 0 (i) = (V (i + 2) − V (i))/2 ∀ 0 ≤ i ≤ N − 2
25
((V (i)−V (i−1))+(V (i+1)−V (i−1))/2)
2
ˆ V 0 (j) =
∀ 1≤i≤N −1 , 0≤j ≤N −2
La scelta è ricaduta sulla terza possibilità essendo quella che meglio approssima la derivata
continua mantenendo una complessità di calcolo accettabile.
Utilizzando come vettore di feature in ingresso al sistema la derivata spaziale si risolve automaticamente il problema della rimozione dell'oset, i vari vettori sono dunque
immediatamente confrontabili senza necessitare di ulteriori elaborazioni.
A(i, j) e B(i, k) con i ∈ [0, 2], j ∈ [0, N ]
dimensioni dello spazio X, Y, Z mentre N e M
Le matrici in ingresso alla DTW saranno dunque
e
k ∈ [0, M ]
dove
i
rappresenta le tre
sono, nell'ordine, le lunghezze della gesture eettuata e di quella di confronto dopo la
derivazione.
Da queste matrici verrà calcolata la
distance matrix
grazie all'eq.
2.8 così da ottenere
una misura di distanza tra i percorsi per mezzo della DTW.
3.3.2
Rappresentazione del percorso tramite vettori nello spazio
delle coordinate sferiche
L'idea base in questo caso è rappresentare il percorso eettuato dagli arti per mezzo di
vettori nello spazio delle coordinate sferiche. Ogni coppia di punti consecutivi acquisiti dal
sistema, dopo le opportune elaborazioni, verrà univocamente identicata da un vettore in
coordinate sferiche calcolato come descritto in seguito.
Figura 3.6: Ragurazione di due punti acquisiti in coordinate cartesiane
La prima operazione da eettuare è una traslazione dei due punti così che
con l'origine degli assi
00
P
Pˆ00 = (x̂, ŷ, ẑ):
solo punto
26
O(o, o, o)
traslato.
e il vettore
V̄
P0
coincida
possa essere completamente descritto dal
Otterremo quindi un nuovo vettore
V̄ˆ
identicato dal punto
x̂ = (x00 − x0 )
ŷ = (y 00 − y 0 )
(3.3)
ẑ = (z 00 − z 0 )
A questo punto possiamo descrivere il vettore
V̄ˆ
per mezzo delle coordinate sferiche.
Figura 3.7: Coordinate sferiche
In coordinate sferiche un punto nello spazio è univocamente identicato dai due angoli
e
ϑ e dal valore ρ.
tra i due punti
3
ϕ
ρ è all'incirca costante dato che indica la distanza
vettore, sono sucienti i due angoli ϕ ∈ [o, 2π) e
Nel caso considerato
e, per identicare il
ϑ ∈ [o, π].
Il passaggio da coordinate cartesiane a sferiche avviene grazie alla trasformazione:
ρ=
p
x̂2 + ŷ 2 + ẑ 2
ϕ = arctan x̂ŷ
(3.4)
ϑ = arccos ρẑ
Al ne di poter denire
punti
x̂
e
ϕ
nell'arco
[o, 2π)
e necessario tenere conto della posizione dei
ŷ :


arctan x̂ŷ se ŷ ≥ 0, x̂ > 0





arctan x̂ŷ + 2π se ŷ < 0, x̂ > 0



arctan x̂ŷ + π se x̂ < 0
ϕ=


π


se ŷ > 0, x̂ = 0

2



3π

se ŷ < 0, x̂ = 0
2
(3.5)
3 In
precedenza è stata eettuata una decimazione dei punti, mantenendo soltanto quelli con distanza
minima di n cm, quindi circa equidistanti, salvo ritardi nel sistema di acquisizione.
27
Grazie alla trasformazione in coordinate sferiche una gesture completa precedentemente
descritta da 3.2 ora è identicata univocamente dai due vettori
ϕ̄ = ϕ1 , ϕ2 , . . . , ϕN −1
(3.6)
ϑ̄ = ϑ1 , ϑ2 , . . . , ϑN −1
Utilizzando questa rappresentazione si incorre in un grave problema: la distanza
tra il valore della angolo
ϕ
del vettore
V̄ 0
e del vettore
V̄ 00
numerica
appartenenti a piano XY come
quelli rappresentati in g.3.8 è elevata mentre a livello spaziale questi due vettori appaiono
molto molto vicini.
Figura 3.8: Problema nell'utilizzo delle coordinate sferiche
Si otterrà infatti che
ϕ0 − ϕ00 ∼
= 2π
quindi la massima distanza ottenibile sebbene i due
vettori si somiglino molto. Sono state tentate varie strade per risolvere questo problema
concludendo che il metodo migliore è evitare di utilizzare gesture composte da tratti
residenti nei pressi della
da valori di
ϕ
vicini a
0
linea di conne, cioè che non comprendano vettori caratterizzati
o
2π .
Come nel caso precedente i valori in ingresso alla DTW non saranno quindi quelli descritti
A(i, j) e B(i, k) con
(ϕ, ϑ) mentre M e N
in 3.2, ma le due gesture a confronto saranno descritte dalle matrici
i ∈ [0, 1], j ∈ [0, N − 1], k ∈ [0, M − 1]
dove
i
è l'indice dell'angolo
indicano la quantità di punti che compongono le gesture in ingresso.
3.3.3
Rappresentazione del percorso tramite vettori nello spazio
euclideo
Questo approccio fa uso di misure geometriche precise per confrontare vettori dello spazio
tridimensionale utilizzando la DTW. Un percorso nello spazio è descritto utilizzando come
featues i vettori che congiungono i punti della gesture acquisita calcolati come di seguito:
28
X = x0 , x1 , . . . , xN , Y = y0 , y1 , . . . , yN , Z = z0 , z1 , . . . , zN i descrittori del percorso
in analisi, questo può essere identicato dalla matrice M (i, k) con i ∈ [0, N − 1], k ∈ [0, 2]
siano
tale che:
ˆ M (i, 0) = (xi+1 − xi )
ˆ M (i, 1) = (yi+1 − yi )
ˆ M (i, 2) = (zi+1 − zi )
M1 (m, k) e M2 (n, k) rappresentative delle gesture da confrontare, la distance matrix
D nella posizione i, j con i < n e j < m in ingresso alla DTW conterrà i valori di distanza
euclidea tra il punto P1 nello spazio identicato dalle coordinate
X1 = M1 (i, 0), Y1 = M1 (i, 1), Z1 = M1 (i, 2)
e il punto P2 identicato da
X2 = M2 (j, 0), Y2 = M2 (j, 1), Z2 = M2 (j, 2)
Siano
cioè
D(i, j) =
p
(X1 − X2 )2 + (Y1 − Y2 )2 + (Z1 − Z2 )2 .
La matrice così composta rappresenterà l'ingresso dell'algoritmo DTW per il calcolo della
distanza tra i due percorsi.
3.3.4
Normalizzazione del percorso rispetto all'origine degli assi
Questa soluzione è apparentemente una delle più semplici, e forse proprio per questo
motivo è stata l'ultima ad essere implementata.
Come spesso accade la semplicità è
ripagata e come vedremo nel capitolo 4 sarà quella che porterà a risultati migliori.
Il
procedimento operato sui vettori in ingresso è una semplice traslazione così che il primo
punto di ogni gesture in analisi coincida con l'origine degli assi. Partendo da
X 1 = x0 , x1 , . . . , xN
Y 1 = y0 , y1 , . . . , yN
(3.7)
Z 1 = z0 , z1 , . . . , zN
otterremo
X 2 = x0 , x1 , . . . , xN
Y 2 = y0 , y1 , . . . , yN
(3.8)
Z 2 = z0 , z1 , . . . , zN
semplicemente calcolando
X 2 (n) = X2 (n) − X1 (0) ∀ 0 ≤ n ≤ N
Y 2 (n) = Y2 (n) − Y1 (0) ∀ 0 ≤ n ≤ N
Z 2 (n) = Z2 (n) − Z1 (0) ∀ 0 ≤ n ≤ N
29
Le matrici
M1 (m, k)
e
M2 (n, k)
contenti i valori dei percorsi normalizzati all'origine degli
assi saranno quindi elaborate esattamente come nel caso precedente, cioè calcolando la
distanza euclidea punto a punto per ottenere la
3.4
distace matrix.
Gesture a due mani e possibili ampliamenti del
metodo
Oltre ai movimenti di un singolo arto può risultare molto utile riconoscere i movimenti
congiunti di più parti del corpo: nella gesticolazione umana sono molto frequenti e intuitivi
gesti eettuati con entrambe le mani. Estendendo il concetto a un numero arbitrario di
joint
si può addirittura ambire a riconoscere azioni complesse eseguite dall'utente con
l'intero corpo.
Il primo metodo sperimentato ed utilizzato per confrontare queste gesture è quello descritto in 3.3.1: l'impiego della tecnica
MDDDTW)
(
multi dimensional derivative dinamic time warping
si adatta bene e con estrema facilità a questo caso. Come già descritto,
impiegando tale sistema si ottiene un
warping
temporale del segnale in ingresso dipen-
dente da tutte le sue dimensioni, cosa gradita in molti casi ma poco ecacie nel caso di
gesture a due mani: applicando la stessa distorsione al gesto eettuato con arti dierenti
si ottengono risultati discutibili.
Nel caso in cui si stia eseguendo un comando con entrambe le mani non si può essere certi
che quella destra esegua il movimento con la stessa distorsione temporale della sinistra,
rispetto al campione registrato per il confronto. Sebbene test sperimentali su gesture molto
semplici, confrontate con un modesto vocabolario, abbiano dato risultati incoraggianti, si
è deciso di abbandonare questa strada in favore di qualcosa di più preciso.
Figura 3.9: Confronto tra gesture eseguite con due mani
Una via adottabile per applicare warping dierenti al percorso eseguito da ogni singolo
arto è quella di utilizzare l'algoritmo DTW separatamente per ognuno di essi.
30
Per ogni gesture a due mani vengono registrati separatamente i movimenti eettuati da
ognuna di esse; anche il confronto con il database avviene in maniera separata, quindi
come se si trattasse di una sola mano.
Supponiamo ad esempio di voler confrontare i comandi ragurati in g.3.9: in questo
caso la mano sinistra esegue lo stesso movimento in entrambe le gesture, quindi ho un
match positivo, mentre la destra si sposta lungo un percorso dierente in ognuno dei due
casi.
L'algoritmo conclude che la
gesture 1
non corrisponde con la
gesture 2
e, salvo
l'individuazione nel vocabolario registrato di una corrispondenza esatta per entrambe le
mani, non restituisce nessuna corrispondenza con il database.
Utilizzare questo metodo al posto della
MDDDTW
apporta un ulteriore vantaggio: il
dierente warping eettuabile su ogni singolo arto implica che il movimento eseguito con
una mano non debba necessariamente essere della stessa lunghezza di quello eseguito con
l'altra.
31
32
Capitolo 4
Risultati Sperimentali
Al ne di individuare come funzionano le metriche descritte nella sezione 3.3 e quale
ritorni i risultati migliori sono stati eseguiti molti test in condizioni dierenti. Il sistema
di riconoscimento delle gesture infatti è stato testato in modo da poterne individuare
punti di forza e difetti. I parametri variabili in fase di testing sono :
ˆ
soggetto che eettua il test;
ˆ
luogo di utilizzo e condizioni ambientali (illuminazione, spazio a disposizione...);
ˆ
vocabolario di gesture da confrontare;
ˆ
il soggetto che ha registrato le gesture di riferimento;
ˆ
la metrica utilizzata per calcolare la correlazione.
Tutti i test sono stati eseguiti su un notebook con 4 Gb di Ram ddr2 e un processore
core2duo operante alla velocità di 2.5 Ghz.
I primi test sono stati eettuati principalmente al ne di individuare quali metriche portassero a risultati migliori e in che casi funzionassero o fallissero. Per questo i test e le
gesture di riferimento sono stati registrati dallo stesso soggetto e nello stesso ambiente.
33
TEST 1
ˆ
Vocabolario: 20 gesture rappresentanti le lettere dell'alfabeto latino in stampatello
minuscolo.
ˆ
Nessun ltraggio con ltro gaussiano.
ˆ
Distanza minima tra punti acquisiti: 3cm.
ˆ
Numero minimo di punti per eettuare il confronto: 4.
ˆ
Gesture registrate dallo stesso soggetto ad eseguire il test.
ˆ
Gesture registrate nello stesso luogo dove è stato eseguito il test.
In questo primo test i simboli utilizzati per il vocabolario di riferimento sono le lettere
dell'alfabeto latino minuscole, non è quindi stata fatta nessuna ottimizzazione al ne di
distanzare i simboli negli spazi delle relative metriche.
Come ovvia conseguenza i risultati ottenuti non sono dei migliori, solo l'utilizzo del percorso normalizzato ha permesso di ottenere riconoscimento corretto nel
gli altri metodi di misura hanno portato a meno del
50%
70% dei casi, mentre
di risultati positivi.
Analizzando più nel dettaglio i risultati possiamo facilmente idividuare dove l'algoritmo
fallisce, specialmente a causa di gesture del vocabolario che risultano tra loro troppo
1
simili .
12 gesture su 20 ottengono una percentua50%, addirittura in 4 casi (lettere b,n,p,t ) il
Come possiamo notare in questo caso ben
le di riconoscimento corretto inferiore al
riconoscimento corretto non avviene mai.
Escludendo queste gesture, evidentemente inadatte allo scopo, la metrica che utilizza
vettori in coordinate sferiche per il confronto otterrebbe un totale di
1 Es:
34
65
riconoscimenti
risulta estremamente dicile distinguere tra b minuscola ed h in quanto gracamente molto simili
corretti su
77
test totali. La percentuale di errore si abbasserebbe dunque dal
52, 3%
al
15, 58%.
Utilizzando la normalizzazione del percorso rispetto agli assi i risultati sono notevolmente
migliori, ma anche in questo caso si nota che l'alfabeto utilizzato non è adatto: per
gesture su
20
l'errore di riconoscimento è superiore
50%.
Escludendo dal vocabolario tali gesture si otterrebbe un risultato corretto in
su
116,
6
quindi la percentuale di errore calerebbe dal
29, 89%
al
8, 6%
106
casi
considerando un
vocabolario di 14 elementi.
35
TEST 2
ˆ
Vocabolario: 12 gesture selezionate per applicare i ltri e gli eetti alle immagini
nell'applicativo sviluppato.
ˆ
La stessa gesture viene confontata con tutte e 4 le metriche sia applicando che non
un ltraggio gaussiano ai vettori in ingresso.
ˆ
Distanza minima tra punti acquisiti: 3cm.
ˆ
Numero minimo di punti per eettuare il confronto: 4.
ˆ
Gesture registrate dallo stesso soggetto ad eseguire il test.
ˆ
Gesture registrate nello stesso luogo dove è stato eseguito il test.
Non applicando il ltraggio gaussiano sono stati ottenuti i seguenti risultati globali:
Applicando un ltraggio gaussiano2 a tutti i vettori in gioco, sia quelli di riferimento
che quelli rappresentati la gesture appena compiuta, sono stati ottenuti i risultati esposti
sotto:
2 Il
36
kernel del ltro è [0.006|0.061|0.242|0.383|0.242|0.061|0.006]
Si nota immeditatamente come la scelta delle gesture adatte porti a dei risultati migliori.
In questo caso il vocabolario è stato scelto in modo da distanziare il più possibile gli
elementi che lo compongono.
Come accadeva anche nel primo test l'utilizzo del percorso normalizzato e la rappresentazione dello stesso tramite vettori in coordinate sferiche sono le metriche a riportare i
migliori risultati, sia applicando il ltraggio gaussiano che non.
Il ltraggio sembra apportare un notevole miglioramento al sistema, infatti abbatte la
percentuale di errore. La metrica che fa uso del percorso normalizzato rispetto agli assi
fa eccezione: in questo caso l'errore aumenta passando dal
Analizzando i risultati nel dettaglio, nel caso di
0%
al
4, 35%.
ltro non applicato otteniamo i seguenti
risultati:
Nel primo caso le cose vanno perfettamente e si riscontra una percentuale di errore pari
allo
0%.
37
Nel secondo invece si riscontra un problema nel riconoscimento specico di alcune gesture
evidentemente non adatte alla metrica in questione. In particolare
riconosciuto ed è sempre scambiato con
Applicando il ltraggio gaussiano
BandSwirl.
Picture
non viene mai
si ottiene:
Inaspettatamente i risultati peggiorano nel primo caso, mantenendo comunque una percentuale di riconoscimento molto elevata, mentre nel secondo caso il ltraggio porta a un
miglioramento notevole delle prestazioni.
38
Figura 4.1: Rappresentazione del percorso eettuato all'interno della matrice distanza
dall'algoritmo DTW nel caso di match corretto ed errato
La gura 4.1 illustra gracamente come viene scelto il percorso dalla DTW nei due casi: è
evidente come nel caso di match corretto il percorso identichi una distorsione temporale
abbastanza omogenea, mentre nel caso di errore il percorso scelto implichi una distorsione
temporale assolutamente non realistica.
Imponendo dei vincoli sul percorso si potrebbero evitare situazioni come quella illustrata.
TEST 3
ˆ
Vocabolario: 12 gesture selezionate per applicare i ltri e gli eetti alle immagini
nell'applicativo sviluppato.
ˆ
La stessa gesture viene confontata con tutte e 4 le metriche sia applicando che non
un ltraggio gaussiano ai vettori in ingresso.
ˆ
Distanza minima tra punti acquisiti: 3cm.
ˆ
Numero minimo di punti per eettuare il confronto: 4.
39
ˆ
Gesturure di riferimento registrate da un soggetto dierente rispetto all'esecutere
del test.
ˆ
Gesture registrate nello stesso luogo dove è stato eseguito il test.
Dati i risultati positivi ottenuti nel
TEST 2
si è deciso di testare le stesse gesture su un
soggetto privo di esperienza. Inoltre in questo modo è possibile vericare come cambino i
risultati se ad eseguire il test è un soggetto diverso dall'autore delle gesture di riferimento
utilizzate per il confronto.
Non applicando il ltraggio gaussiano sono stati ottenuti i seguenti risultati:
Di seguito vengono esposti i risultati ottenuti
applicando un ltraggio gaussiano3
:
Il numero di gesture eseguite in questo test è esiguo, i risultati ricavati non possono quindi
essere considerati estremamente precisi. Risultano tuttavia utili per capire come cambino
le percentuali di riconoscimento al variare del soggetto, considerando che quest'ultimo è
privo di esperienza nell'utilizzo del sistema.
Come già constatato in precedenza, i risultati migliori si ottengono:
3 Il
40
kernel del ltro è [0.006|0.061|0.242|0.383|0.242|0.061|0.006]
ˆ
utilizzando il percorso normalizzato come matrice in ingresso;
ˆ
applicando il ltraggio per mezzo di un ltro gaussiano.
TEST 4
ˆ
Vocabolario: 10 gesture inventate e registrate dal soggetto esecutore del test.
ˆ
La stessa gesture viene confontata con tutte e 4 le metriche sia applicando che non
un ltraggio gaussiano ai vettori in ingresso.
ˆ
Distanza minima tra punti acquisiti: 3cm.
ˆ
Numero minimo di punti per eettuare il confronto: 4.
ˆ
Gesture registrate nello stesso luogo dove è stato eseguito il test.
In questo caso è stato chiesto al tester di decidere autonomamente 10 gesture che gli
fossero comode. Dopo la registrazione del vocabolario il test è stato eseguito come nei
casi precedenti.
Non applicando il ltraggio gaussiano sono stati ottenuti i seguenti risultati:
Di seguito vengono esposti i risultati ottenuti
4 Il
applicando un ltraggio gaussiano4
:
kernel del ltro è [0.006|0.061|0.242|0.383|0.242|0.061|0.006]
41
Aplicando il ltraggio gaussiano i risultati ottenuti sono soddisfacenti, superano il 90% di
riconoscimenti corretti con 3 metriche su 4.
TEST 5
ˆ
Vocabolario: 10 gesture inventate e registrate dal soggetto esecutore del TEST 4.
ˆ
Test eseguito da un soggetto diferente rispeto all'autore delle gesture di riferimento.
ˆ
Gesture di riferimento registrate con la mano destra, soggetto tester mancino.
ˆ
La stessa gesture viene confontata con tutte e 4 le metriche sia applicando che non
un ltraggio gaussiano ai vettori in ingresso.
ˆ
Distanza minima tra punti acquisiti: 3cm.
ˆ
Numero minimo di punti per eettuare il confronto: 4.
ˆ
Gesture registrate nello stesso luogo dove è stato eseguito il test.
Come nel caso del TEST 3, l'obbiettivo è quello di vericare se gesture registrate da un
soggetto
A ed eseguite da un soggetto B vengono riconosciute con meno frequenza.
Non applicando il ltraggio gaussiano sono stati ottenuti i seguenti risultati:
42
Di seguito vengono esposti i risultati ottenuti
applicando un ltraggio gaussiano5
:
Sia il soggetto del TEST 4 che quello del TEST 5 sono completamente privi di esperienza
con l'utilizzo del sistema. Inoltre il soggetto del TEST 5 non ha visto come quello del
TEST 4 eseguiva le gesture di riferimento, ma le ha apprese per mezzo di semplici disegni
schematici.
Si nota come i risultati degradino notevolmente e la percentuale di riconoscimento si
abbassi mediamente di quasi 20 punti.
Anche in questo caso il ltraggio gaussiano apporta dei miglioramenti, salvo nel caso si
utilizzi il percorso normalizzato come vettore in ingresso al sistema.
TEST 6
ˆ
Vocabolario: 10 gesture inventate e registrate dal soggetto esecutore del TEST 4.
ˆ
Test eseguito da un soggetto diferente rispeto all'autore delle gesture di riferimento.
5 Il
kernel del ltro è [0.006|0.061|0.242|0.383|0.242|0.061|0.006]
43
ˆ
Gesture di riferimento registrate con la mano destra, soggetto tester mancino.
ˆ
La stessa gesture viene confontata con tutte e 4 le metriche sia applicando che non
un ltraggio gaussiano ai vettori in ingresso.
ˆ
Distanza minima tra punti acquisiti: 3cm.
ˆ
Numero minimo di punti per eettuare il confronto: 4.
ˆ
Gesture registrate nello stesso luogo dove è stato eseguito il test.
L'obbiettivo è identico a quello del TEST 5, cioè valutare come si comporta il sistema
nel caso in cui l'autore delle gesture di riferimento e il soggetto che lo sta usando non
coincidano.
Non applicando il ltraggio gaussiano sono stati ottenuti i seguenti risultati:
Di seguito vengono esposti i risultati ottenuti
6 Il
44
applicando un ltraggio gaussiano6
kernel del ltro è [0.006|0.061|0.242|0.383|0.242|0.061|0.006]
:
Questo test è stato eseguito da un soggetto con esperienza nell'utilizzo del programma,
utilizzando un vocabolario di gesture di riferimento registrate non da lui. L'elaborazione
dei risultati permette di evidenziare come non sia strettamente importante chi è l'autore
delle gesture di riferimento; un po di pratica nell'utilizzo porta a risultati ottimali anche
in questo caso. In ben 4 casi su 8 infatti il soggetto tester ha ottenuto risultati migliori
dell'autore delle gesture.
TEST 7
ˆ
Vocabolario: 5 gesture a due mani inventate e registrate dal soggetto esecutore del
TEST.
ˆ
Test eseguito dallo stesso soggetto autore delle gesture di riferimento.
ˆ
Il confronto avviene solo per mezzo del metodo facente uso del percorso normalizzato.
ˆ
Distanza minima tra punti acquisiti: 3cm.
ˆ
Numero minimo di punti per eettuare il confronto: 4.
ˆ
Gesture registrate nello stesso luogo dove è stato eseguito il test.
Test eseguito su poche geture a due mani al ne di vericare l'ecacia nel riconoscimento
di queste ultime.
Di seguito vengono esposti i risultati ottenuti
applicando un ltraggio gaussiano7
:
Il modesto vocabolario di sole 5 gesture permette di ottenere una percentuale di riconoscimento molto elevata, riducendo gli errori al 4%.
TEST 8
ˆ
Vocabolario: 5 gesture a due mani inventate e registrate dal soggetto esecutore del
TEST 7.
7 Il
kernel del ltro è [0.006|0.061|0.242|0.383|0.242|0.061|0.006]
45
ˆ
Test eseguito da un soggetto dierente rispetto all'autore delle gesture di riferimento.
ˆ
Il confronto avviene solo per mezzo del metodo facente uso del percorso normalizzato.
ˆ
Distanza minima tra punti acquisiti: 3cm.
ˆ
Numero minimo di punti per eettuare il confronto: 4.
ˆ
Gesture registrate nello stesso luogo dove è stato eseguito il test.
Test eseguito sulle stesse gesture del test 7 al ne di capire il comportamento del sistema
nel riconoscimento dei movimenti a due mani se:
ˆ
il soggetto ad utilizzarlo non è l'autore delle gesture di riferimento;
ˆ
il soggetto tester è privo di esperienza.
Di seguito vengono esposti i risultati ottenuti
applicando un ltraggio gaussiano8
:
Come nei casi precedenti i risultati sono peggiori rispetto al caso in cui le gesture di
riferimento siano registrate dall'utilizzatore stesso. Considerando la assoluta mancanza
di esperienza nell'utilizzo da parte del soggetto tester, l'83% dei riconoscimenti corretti è
un risultato accettabile.
RISULTATI TOTALI
Di seguito verranno esposti le medie dei risultati precedentemente ottenuti cosi da poter
fare il punto della situazione e da capire come si comporti mediamente l'algoritmo.
Su un totale di circa 620 gesture eseguite, solo per quanto riguarda i test ad una mano
sono stati ottenuti i seguenti risultati:
Senza smoothing gaussiano.
ˆ
Vettori in coordinate sferiche:
60.8%
di riconoscimenti corretti,
medio di elaborazione.
8 Il
46
kernel del ltro è [0.006|0.061|0.242|0.383|0.242|0.061|0.006]
5.3 ms
tempo
ˆ
62.53%
Derivata del percorso:
di riconoscimenti corretti,
5.5 ms
tempo medio di
elaborazione.
ˆ
82.53% di riconoscimenti corretti, 12.16 ms tempo medio
Percorso normalizzato:
di elaborazione.
ˆ
54.3%
Vettori in coordinate euclidee:
di riconoscimenti corretti,
11.29 ms
tempo
3.94 ms
tempo
medio di elaborazione.
Applicando lo smoothing gaussiano.
ˆ
Vettori in coordinate sferiche:
77.29%
di riconoscimenti corretti,
medio di elaborazione.
ˆ
Derivata del percorso:
86.18% di riconoscimenti corretti, 3.94 ms tempo medio di
elaborazione.
ˆ
Percorso normalizzato:
86.06%
di riconoscimenti corretti,
7.79 ms
tempo medio
di elaborazione.
ˆ
Vettori in coordinate euclidee:
85%
di riconoscimenti corretti,
8.42 ms
tempo
medio di elaborazione.
Bisogna considerare che non tutti i test sono stati eseguiti su un vocabolario di gesture
facimente distinguibile per il pc, inoltre i soggetti ad eseguire i tast erano assolutamente
privi di esperienza nel 50% dei casi. Si puo quindi considerare come risultati attendibili, ottenibili su un vocabolario di gesture scelto accuratamente, cosiderando inoltre che
l'utente abbia un minimo di esperienza, quelli ottenuti nel TEST 2.
Su un vocabolario di
to corretto in olre il
12 gesture ci si può tranquillamente aspettare un riconoscimen90% dei casi, specialmente se utilizzando la metrica del percorso
normalizzato.
47
48
Capitolo 5
Applicativo sviluppato
Buona parte del lavoro svolto consiste nello sviluppo dell'applicativo per la gesture recognition e dell'interfaccia utente per il suo utilizzo. E' stata creata anche un'applicazione
dimostrativa al ne di evidenziare le potenzialità del sistema di controllo gestuale.
L'applicazione, sviluppata in c#, consiste in un'interfaccia graca che permette di applicare vari eetti video alla propria immagine ripresa dal Kinect.
Inizialmente gli eetti da applicare all'immagine erano gestiti dalla cpu e implementati
in maniera personalizzata in c#.
nella libreria Emgu
1
Veniva fatto uso di alcuni eetti e ltri già presenti
, un wrapper in c# delle librerie openCv
2
e di ltri implementati
autonomamente.
Purtroppo l'elaborazione di ogni singolo frame unita ai calcoli necessari per la gesture
recognition risultano troppo impegnativi per un elaboratore di potenza media, rallentando
il processo così da non poter più ottenere la gestione in real time e da visualizzare il video
acquisito e elaborato a scatti. Per ovviare a questo problema si è pensato di utilizzare
ltri ed eetti video che venissero gestiti dalla GPU così da diminuire notevolmente il
carico del processore che si dovrà occupare solamente della logica necessaria alla gesture
recognition.
La soluzione è stata individuata in alcune funzioni recentemente implementate nel pacchetto Windows Presentation Foundation: degli eetti che vengono gestiti e calcolati dalla scheda video e sono applicabili a qualunque elemento di una nestra programmata in
WPF. E' necessario avere installato sul sistema .NET framework 3.5 SP1 e Direct X SDK
al momento della compilazione per far funzionare i
pixel shader eects
che sfrutteranno
l'elaborazione parallela delle pipeline della scheda video.
1 Home
2 Home
Page: http://www.emgu.com/wiki/index.php/Main_Page
Page: http://opencv.willowgarage.com/wiki/
49
Figura 5.1: Alcuni screenshot del programma. (1) Multilayer (2) Draw (3) Color Tone
(4) Tone Mapping (5) Zoom Blur (6) Pinch
Sono state create inoltre alcune procedure per
ˆ
giocare
con l'immagine visualizzata:
draw) permette di disegnare
Le fast gesture permettono
la procedura di disegno (
sull'immagine visualizzata
a schermo(vedi g 5.1).
di selezionare il colore da
swipe left, swipe right ) e la dimensione del tratto (swipe up, swipe down ).
utilizzare (
Quando la mano oltrepassa un muro virtuale posto a circa 30 cm di fronte all'utente
3
si inizia a disegnare, per smettere quando la mano viene ritirata. Questo permette
di disegnare tratti non continui e di cambiare colore e intensità del tratto per creare
forme complesse.
ˆ
la procedura chiamata
multiLayers sfrutta l'immagine profondità per suddividere
BG) e foregroung(FG). In questo modo è facile
l'immagine acquisita in background(
scindere il/i soggetto/i e separarlo/i dal resto dell'immagine acquisita. Tale potenzialità è stata sfruttata per creare un divertente eetto in cui l'utente, eseguendo la
gesture veloce
swipe down,
salva uno snapshot della propria immagine che rimane
impressa nella nestra di visualizzazione. Questa procedura può essere ripetuta un
numero arbitrario di volte, creando così un eetto di moltiplicazione del soggetto
nell'immagine visualizzata (vedi g 5.1).
ˆ waterEect è una procedura che utilizza gli eetti video di WPF
già menzionati in
precedenza per creare un eetto acqua con il quale l'utente può interagire muovendo
le mani e creando quindi delle onde. Questa procedura è basata sull'articolo di
Duncan :'Ripplelicious'
(http://channel9.msdn.com/coding4fun/kinect/Thats-Ripplelicious)
3 Procedura
50
molto simile a quella utilizzata per le fast
gesture
Greg
ˆ TakePicture
è una semplice funzione che permette di renderizzare il contenuto
visualizzato sullo schermo e di salvarlo in un immagine JPG, così che l'utente possa
salvare i propri
lavori
e le proprie immagini deformate, disegante o elaborate. Una
volta attivata per mezzo dell'apposita
gesture
complessa viene visualizzato un con-
to alla rovescia che permette di sistemare la propria posizione e l'eetto in modo
desiderato prima di scattare la foto e riprodurre il suono di un otturatore.
E' stata inne sviluppata una procedura di
training
che permette di istruire l'utente
all'utilizzo dell'applicativo spiegando le varie funzioni, come attivarle e gestirle.
Nella sezione in basso della GUI possiamo notare una sezione contenente molte piccole
miniature (g.5.2):
queste possono essere sfogliate grazie all'utilizzo delle fast gesture
(cap. 3.2). Verranno fatte scorrere tante più miniature quanto più il movimento di swipe
viene eseguito velocemente dall'utente. Questa barra è stata creata utilizzando la suite di
controlli
WPF FluidKit (http://fluidkit.codeplex.com/) opportunamente adattati
ad essere controllati gestualmente tramite il sistema sviluppato.
Figura 5.2: CowerFlow
Gli eetti veri e propri vengono applicati e gestiti per mezzo delle gesture complesse:
1. per prima cosa bisogna attivare il sistema di riconoscimento aprendo e chiudendo la
mano che verrà utilizzata per la gesture, entrambe nel caso si voglia eettuare un
movimento a due mani;
2. una volta attivata la registrazione si disegna nell'aria il simbolo desiderato che verrà
mostrato in sovraimpressione (g 5.3);
3. per chiudere la registrazione e impartire il comando disegnato è suciente aprire e
chiudere nuovamente la mano.
Le due circonferenze visibili nella parte superiore servono a indicare in che stato ci si
trova: rosse indicano inattività, verdi indicano lo stato di registrazione gesture.
Supponiamo ad esempio di voler impartire come input al sistema un cerchio antiorario
eettuato con la mano destra: aprendo la mano il cerchio passerà dal colore rosso a giallo.
51
Figura 5.3: Gesture drawing
Appena la mano verrà chiusa diverrà verde e la registrazione della gesture avrà inizio.
Terminato il movimento, non appena la mano verrà aperta il cerchio diverrà nuovamente
giallo, per tornare rosso al chiudersi della mano e quindi al completamento del comando
impartito. Appena il cerchio torna rosso il sistema confronta la gesture eettuata con il
database presente in quel momento e seleziona quella che più le somiglia in funzione della
metrica utilizzata.
Un sistema simile è potenzialmente utilizzabile per gestire molti dierenti tipologie di
applicazioni in quanto sia il vocabolario di gesture che il comando ad esse associato sono
liberamente congurabili.
In fase di sviluppo sono state eettuate varie prove: associando alle gesture l'emulazione
di comandi della tastiera o del mouse è possibile comandare l'intero sistema operativo e
molti dei suoi applicativi.
Le applicazioni che meglio si adattando ad essere utilizzate in questo modo sono quelle
per la gestione e riproduzione dei le multimediali come i media center. Risulta infatti
molto comodo poter gestire la propria libreria di musica e video comodamente seduti sul
divano e senza la necessità di utilizzare nessun dispositivo sico come mouse o tastiera.
52
5.1
Logica e schema a blocchi dell'algoritmo implementato
Il framework di microsoft rende disponibili tre gestori di eventi sincroni: non appena le
informazioni riguardanti una sola sezione sono disponibili la procedura ad essa abbinata
viene processata.
I tre eventi da gestire sono:
ˆ
nuovo frame proveniente dalla camera RGB disponibile
ˆ
nuovo frame proveniente dalla depth camera disponibile
ˆ
nuovo skeleton frame, derivante dall'elaborazione da parte del frameWork del depth
frame
Inoltre è necessaria una procedura che viene eseguita solamente all'apertura dell'applicativo che consente di inizializzare le variabili, il frameWork e di eseguire alcune procedure
necessarie dalla successiva elaborazione.
Figura 5.4: Precdeura eseguita ad ogni avvio del programma
53
Il programma è caratterizzato da uno stato globale utile a denire la logica di interazione
da intraprendere e che identica le operazioni in corso in quel momento. I possibili stati
sono identicati da un'etichetta numerica la cui azione corrispondente è descritta nella
seguente lista:
ˆ
0
⇔
ˆ
1
⇔ fast gesture
con la mano sinistra
ˆ
2
⇔ fast gesture
con la mano destra
ˆ
3
⇔
esecuzione di una gesture complessa con la mano sinistra
ˆ
4
⇔
esecuzione di una gesture complessa con la mano destra
ˆ
5
⇔
esecuzione di una gesture complessa con entrambe le mani
ˆ
6
⇔
confronto della gesture eettuata dalla mano sinistra tramite la DTW con il
sistema in stato libero
vocabolario di movimenti registrato
ˆ
7
⇔
confronto della gesture eettuata dalla mano destra tramite la DTW con il
vocabolario di movimenti registrato
ˆ
8
⇔
confronto della gesture eettuata da entrambe le mani tramite la DTW con il
vocabolario di movimenti registrato
In seguito un processo predenito verrà identicato da
, in certi casi descritto più
accuratamente in seguito.
Figura 5.5: Indice dei colori utilizzati
Di seguito sono invece elencate le variabili utilizzate e una veloce descrizione:
FRAME:
ˆ ColorFrame:
color camera
matrice a tre dimensioni che rappresenta l'immagine acquisita dalla
per mezzo dei tre layer Red, Green e Blue.
ˆ DepthFrame:
acquista dalla
54
matrice bidimensionale contenente i valori dell'immagine profondità
depth camera
ˆ SkeletonFrame:
classe contenente tutte le informazioni riguardanti lo scheletro
individuato dall'algoritmo di
ˆ backGroung:
dura
skeleton recognition
del frameWork.
variabile utilizzata per salvare l'immagine sfondo quando la proce-
multiLayer è attiva.
ˆ MaskImage:
matrice di pixel binaria utilizzata come maschera per rendere bianche
le zone di interesse da
ˆ TempImage:
da applicare a
ˆ Body:
ColorFrame in modo da poterle riempire con il colore scelto
matrice di pixel rgb utilizzata per salvare temporaneamente il disegno
ColorFrame
matrice binaria identicante la posizione nello spazio del corpo riconosciuto
dal sistema. Per ottenere una corrispondenza tra lo spazio dell'immagine profondità
a cui appartiene questa maschera e lo spazio colori è necessaria un operazione di
trasformazione spaziale complessa, tuttavia una semplice traslazione verso l'alto
permette di ottenere un risultato soddisfacente.
BOOLENAE:
ˆ Draw:
vera quando si attiva la procedura di disegno, falsa altrimenti.
ˆ Multilayer:
vera quando si attiva la procedura
MultiLayer
precedentemente de-
scritta, falsa altrimenti.
ˆ New layer:
vera quando viene registrato un nuovo FG per la procedura
MultiLayer,
falsa altrimenti.
ˆ Take picture:
vera quando si avvia la routine per l'acquisizione e il salvataggio
dello snapshot, falsa altrimenti.
ˆ Training:
vera quando si vuole avviare il programma con una sessione di trining
che istruisce l'utente all'utilizzo del programma, falsa altrimenti.
ˆ VideoEect:
vera quando si vogliono applicare gli eetti video, falsa altrimenti.
Utile sopratutto in fase di test.
ˆ StopVideoEect:
vera se si vogliono salvare i parametri attuali dell'eetto in
uso, così da potersi muovere senza variare gli eetti attuati sull'immagine, falsa
altrimenti.
ˆ ViewBody:
vera se si vuole visualizzare la maschera che identica la posizione
nello spazio del corpo riconosciuto dal frameWork.
ˆ ViewSkeleton:
vera se si vuole visualizzare a schermo lo scheletro riconosciuto dal
sistema, falsa altrimenti
55
ˆ WaterEect:
vera se l'eetto acqua è applicato, falsa altrimenti.
ˆ Trigger e PreTrigger:
variabili utilizzate per denire l'inizio e la ne di una
gesture
JOINT:
ˆ Joint Depth(shoulderDepth,
depth camera
rightHandDepth, leftHandDepth...): distanza dalla
espressa in metri dell'articolazione in questione.
ˆ JointName(shoulder,
right hand, left hand...): coordinate di latitudine e longitu-
dine dell'articolazione in questione.
ˆ JointQuality:
indicatore della qualità con cui è identicato il joint in questione.
ALTRE:
ˆ State:
indica lo stato attuale del sistema.
ˆ Timer:
timer per gestire il conto alla rovescia prima di
TakePicture).
ˆ SkeletonQuality:
scattare la foto
(procedura
variabile restituita dal frameWork che stabilisce se una parte
del corpo inquadrato (e quale) è al di fuori del campo visivo.
ˆ Velocità:
velocità dell'arto in analisi
ˆ Ditanza[]:
distanza tra gli arti individuati
ˆ Percentuale e MeanPerc:
utlimi N frame
56
percentuale di area occupata dalla mano e media negli
Figura 5.6: Procedura eseguita ogni volta che ci sia un nuovo frame RGB disponibile
57
Figura 5.7: Schema funzionale del procedimento che permette di disegnare
In g. 5.6 viene illustrata la procedura eseguita ogni qualvolta sia disponibile un nuovo
frame dalla camera rgb.
Il frame in questione verrà elaborato in maniera dierente a
seconda dell'eetto video applicato in quel momento e della modulazione ad esso abbinata.
I parametri dell'eetto applicato vengono gestiti sempre tramite il movimento delle mani.
Lo schema rappresentato in 5.7 descrive le operazioni eettuate sull'immagine a colori al
ne di sovrapporle il disegno realizzato nella procedura di
draw.
E' necessario utilizzare
TempImage e MaskImage in quanto l'immagine a colori, restituita dal SDK,
essere ridiseganta ad ogni nuovo frame; TempImage e MaskImage al contrario
le matrici
deve
permangono in memoria permettendo così di modicare ogni nuovo frame.
58
Figura 5.8: Schema a blocchi della procedura eseguita quando è disponibile una nuova
depth frame
La procedura descritta in gura 5.8 è piuttosto semplice: la
depthFrame
verrà infatti
condivisa come variabile globale in modo che anche gli altri thread possano accedervi, inoltre viene eventualmente individuata la zona occupata dal soggetto di fronte alla
camera.
59
Figura 5.9: Processo eseguito ad ogni nuova SkeletonFrame disponibile
Ogni qual volta il frameWork rende disponibile una nuova skeletonFrame, subito dopo
averla condivisa come variabile globale per permetterne l'accesso da parte degli altri
thread, viene valutata la posizione del soggetto all'interno del campo visivo. Se il campo
60
visivo risulta essere troppo inclinato verso il basso e quindi la parte alta del soggetto non
viene inquadrata si procederà a muovere il dispositivo kinect verso l'alto per mezzo del
motore che ne gestisce il tilt.
Successivamente vengono eseguite delle istruzioni che permettono di disegnare uno scheletro stilizzato in sovraimpressione alla persona inquadrata; funzione che torna utile sopratutto per vericare che la procedura di skeleton recognition stia funzionando correttamente.
Le tre procedure che seguono sono fondamentali per il processo di gesture recognition in
quanto identicano il trigger di inizio/ne gesture (la mano che si apre e chiude) oltre a
capire se si stà eseguendo o meno una fast gesture.
Le informazioni appena elaborate permettono di cambiare stato al sistema. Se questo è
libero si potrà:
ˆ
iniziare una nuova gesture complessa ad una mano, che verrà poi confrontata con il
vocabolario memorizzato
ˆ
iniziare una nuova gesture complessa a due mani, che verrà poi confrontata con il
vocabolario memorizzato
ˆ
eettuare una fast gesture
Inne se l'eetto acqua è attivo verranno utilizzate le informazioni sulla posizione attuale
del corpo per creare l'eetto onda attorno all'arto in movimento.
Figura 5.10: Routine per il calcolo della velocità istantanea delle mani
61
Il calcolo della velocità viene eettuato semplicemente calcolando la distanza tra le coordinate attuali della mano e le ultime rese disponibili dal frameWork. Ipotizzando intervalli
di tempo regolari tra un skeletonFrame e il successivo si otterrà una stima della velocità
abbastanza adabile.
Queste informazioni possono essere utilizzate in molte maniere, ma nello specico serviranno per stabilire l'intensità della fast gesture e quindi decidere di quanto scorrere una
lista o, come nel caso specico, il coverFlow presente nella parte bassa della GUI.
Figura 5.11: Routine eseguita per vericare se viene eseguita una FastGesture
Come già descritto in precedenza le fast gesture vengono attivate oltrepassando con una
mano un muro invisibile di fronte all'utente: tale azione viene riconosciuta calcolando
la distanza sull'asse Z tra le mani e il centro delle spalle. Se questa è superiore ad una
determinata soglia e lo stato del sistema è libero signica che l'utente sta eseguendo una
fast gesture.
62
Figura 5.12: Procedura eseguita per vericare se le mani vengono aperte o chiuse
Una parte fondamentale del lavoro eettuato è la creazione di una procedura che permetta
di impartire degli ordini, interpretabili dal calcolatore, con il solo movimento delle dita.
I frameWork esistenti infatti non comprendono tra le loro funzioni l'interpretazione della
63
gesticolazione delle dita, sia per la complessità dell'argomento ma sopratutto, come già
spiegato in precedenza (vedi 3.1), per i limiti imposti dalla risoluzione della depth camera
utilizzata.
Lo sviluppo di un sistema in grado di riconoscere con precisione la conformazione nello
spazio tridimensionale della mano è molto dicile da realizzare con i mezzi a disposizione,
è stato realizzato quindi un sistema che permette di riconoscere con buona precisione due
dierenti stati della mano: aperta con le dita ben visibili dalla camera o chiusa.
I proli della mano sono ben caratterizzati soltanto quando questa è sucientemente distante dal resto del corpo: trattandosi di un immagine profondità infatti tutti gli elementi
alla stessa distanza dalla camera sono caratterizzati dalla stessa intensità. La prima operazione eettuata quindi è il calcolo della distanza tra la mano in analisi e varie parti
del corpo tra cui i anchi la testa e le spalle. Se la mano è sucientemente distante da
poter essere ben distinta si passa alle operazioni successive: le dimensioni dell'immagine
contenente la mano sono decise dinamicamente in funzione della distanza di quest'ultima.
Peculiarità importante di questa immagine è che la percentuale di area al suo interno
occupata da una mano aperta è costante al variare della distanza della stessa: questo
permette di stabilire delle soglie che identichino la mano aperta e la mano chiusa. Tali
informazioni verranno utilizzate per impartire dei semplici comandi, in questo caso per
attivare e disattivare la registrazione di una gesture complessa.
L'algoritmo inne prevede le procedure atte alla registrazione dei punti del percorso della
gesture e al confronto di essi con il database; il metodo adottato per tale confronto è già
stato descritto in 3.3.
64
5.2
Strumenti
Come già anticipato nelle sezioni precedenti questo lavoro di tesi fa uso di device e framework all'avanguardia: di seguito una breve panoramica sulle caratteristiche hardware
del dispositivo e i framework per la skeleton recognition sperimentati.
5.2.1
HardWare
Microsoft Kinect
è un dispositivo innovativo dotato di una depth camera per il ricono-
scimento delle distanze, una camera tradizionale RGB, un array di 4 microfoni oltre a
elementi accessori quali un motore per gestire i movimenti e un accelerometro.
Figura 5.13: Il dispositivo Microsoft Kinect
Le caratteristiche hardware che lo caratterizzano sono:
ˆ
ˆ
speciche della CMOS depth camera:
risoluzione di 640x480 pixel a 11 bit per 30 fps
Campo visivo orizzontale: 57 gradi
Campo visivo verticale: 43 gradi
Range operativo ottimale: 1.2 m - 3.5 m
Range Tracking: 0.7m - 6m
Depth precision a 2m: 1 cm
speciche della camera RGB:
65
ˆ
risoluzione di 640x480 a 32 bit per 30 fps
Campo visivo orizzontale: 57 gradi
Campo visivo verticale: 43 gradi
sistema audio: array di 4 microfoni capaci di fornire uno stream audio a 16 bit e 16
kHz
ˆ
Capacità di inclinazione: 27 gradi
L'elemento più innovativo e che permette la ricostruzione precisa dell'ambiente in tre
dimensioni è la depth camera. Il suo funzionamento è più complesso di quanto si potrebbe
pensare, infatti non si basa sul principio del
time to ight
come molti altri dispositivi per
l'analisi 3d dell'ambiente presenti in commercio.
Figura 5.14: Schema funzionale del MS Kinect
La camera di profondità, prodotta e ideata da
PrimeSense, fa uso del Light Coding
[26]:
una tecnica simile alla ricostruzione 3D per mezzo di immagini stereo.
PS1080 controlla la sorgente di luce infrarossa al
ne di proiettare la scena con una IR Light Coding Image. Un sensore CMOS standard
riceve il fascio proiettato e comunica nuovamente ciò che vede al PS1080 il quale elabora
Un apposito microprocessore chiamato
le informazioni ricevute per produrre un immagine profondità accurata per ogni frame.
5.2.2
Skeleton recognition frameWork
Nella prima fase del lavoro svolto sono stati spertimentati i principali framework che
permettono di utilizzare il Kinect rendendo trasparente al programmatore la skeleton
recognition.
66
Figura 5.15: Fascio infrarosso proiettato dal Kinect
OpenNi e NITE
OpenNi framework è sviluppato dall'organizzazione OPENNI (http://www.openni.org/)
allo scopo di fornire una API open source a chiunque voglia approcciarsi con il mondo
delle interfacce naturali.
Questa API fornisce il supporto per :
ˆ
Riconoscimento dei comandi vocali
ˆ
Riconoscimento dei gesti delle mani
ˆ
Riconoscimento dei movimenti del corpo
Viene garantita la comunicazione con i dispositivi di basso livello (sensori video e audio)
cosi come con soluzioni middleware di alto livello (skeleton recognition, visual tracking).
L'elaborazione dei dati ad alto livello viene invece gestita dal middlewere NITE sviluppato da PrimeSense (www.primesense.com) , una delle più attive compagnie del gruppo
OpenNi.
I vantaggi di questa soluzione sono:
ˆ
non ci sono restrizioni allo sviluppo di applicazioni anche a scopo commerciali
ˆ
è compatibile con la maggior parte dei device per l'acquisizione tridimensionale della
scena
ˆ
è compatibile con più middleware, utilizzabili anche contemporaneamete, per l'adempimento di funzioni più complesse
ˆ
è multipiattaforma
ˆ
ha già integrate le funzioni di registrazione e riproduzione
67
Figura 5.16: OpenNi framework
Gli svantaggi:
ˆ
l'utente per essere riconosciuto deve posizionarsi di fronte alla camera nella posa a
T.
ˆ
non esiste una versione uciale che permetta di utilizzarlo con il linguaggio c#.
IISU
SoftKinetic (http://www.softkinetic.com) ha sviluppato e distribuito il suo SDK poco
prima del rilascio uciale da parte di Microsoft del KinectSDK. Sono state rilasciate due
dierenti versioni:
una gratuita e una per lo sviluppo di applicazioni commerciali che
dieriscono per possibilità di utilizzo e caratteristiche.
Vantaggi:
68
ˆ
Compatibile con tutte le tecnologie e camere 3D depth-sensing.
ˆ
Multipiattaforma
ˆ
Animazione di un avatar poligonale per un output visivo istantaeo
ˆ
Multilinguaggio
ˆ
integrazione con Unity3D
ˆ
Interaction Designer tool per una prototipazione veloce delle gesture
Svantaggi:
ˆ
Scarsa disponibilità di esempi e applicativi rilasciati
ˆ
Non utilizzabile a scopo commerciale se non acquistando una apposita licenza
Figura 5.17: IISU interaction deigner
5.2.3
Microsoft Kineck SDK
L'unico framework sviluppato appositamente per l'utilizzo del dispositivo Microsoft Kinect è stato rilasciato, dopo una lunga attesa, verso la metà giugno 2011. Si tratta di un
SDK sviluppato per soli sistemi Windows7, con il quale è facilmente interfacciabile (Es:
utilizzo delle librerie per tablet multitouch).
I punti di forza sono:
ˆ
SDK e driver dello stesso produttore
ˆ
installazione estremamente semplicata
ˆ
ottima documentazione e ampio supporto reperibile on-line
ˆ
speech recognition avanzata grazie alle librerie per Windows
ˆ
supporto per sistemi a 64 bit
ˆ
supporto per l'elaborazione multi-core (a partire dalla beta2)
ˆ
non necessita pose speciche per il riconoscimento degli utenti nel campo visivo
ˆ
compatibile con c++, c# e visual basic
69
Gli svantaggi sono:
ˆ
non esiste ancora una versione che permetta lo sviluppo di applicazioni commerciali
ˆ
non è multipiattaforma
Si è deciso di utilizzare l'SDK sviluppato da microsoft per la facilità di utilizzo, la possibilità di scrivere codice in c#, la velocità di esecuzione, l'esistenza di driver originali e
sopratutto perchè al momento della decisione era l'unico framework a non richiedere una
posa specica per il riconoscimento degli utenti.
70
Capitolo 6
Conclusioni, problemi irrisolti e
sviluppi futuri
Le natural user interface sono indubbiamente destinate ad essere sempre più presenti nelle
nostre vite, sicuramente andranno a rimpiazzare parzialmente o integrare le interfacce
grache che siamo soliti utilizzare. Lo sviluppo di dispositivi a basso costo come depth
camera, accelerometri e sensori di ogni fattispecie permetterà all'utente del computer
domestico di approcciarsi con tali tipologie di interfacce rendendo l'utilizzo dei calcolatori
sempre più semplice ed abbordabile da parte di un vasto pubblico. Tali tecnologie sono
e saranno sempre più impiegate per fornire mezzi e possibilità a portatori di handicap,
incapaci di un normale utilizzo del computer per mezzo di dispositivi come mouse e
tastiera.
Durante lo sviluppo di questo lavoro sono stati riscontrate varie dicoltà e problemi;
alcuni gestiti grazie a soluzioni complesse o meno, altri elusi in quanto dicilmente
risolvibili.
La tecnica DTW è stata ampiamente sperimentata, raggiungendo buoni risultati, quindi si
ritiene poco utile un approfondimento ulteriore su questo argomento, mentre si potrebbero
sperimentare tecniche dierenti al ne di ottenere risultati migliori. Il punto più carente
del metodo implementato è la necessità di segnalare al sistema l'istante di inizio e ne
delle gesture, rendendo più complicata l'esperienza di utilizzo.
problema utilizzando l'
Hidden Markov Model :
Si potrebbe ovviare al
un modello statistico in cui alcuni stati
sono invisibili (hidden), mentre l'output dello stato è sempre visibile e caratterizzato da
una precisa distribuzione statistica.
Il riconoscimento diverrebbe così continuo e non
sarebbero necessari gli identicatori delle gesture.
Il riconoscimento delle gesture può
inoltre essere migliorato addestrando il sistema e l'utente: una procedura di training in
cui viene chiesto di eettuare più volte le gesture in utilizzo permetterebbe, oltre ad
abituare l'utente alla metodologia, di creare un vocabolario che consideri l'attitudine
individuale nell'eseguire un determinato movimento. I movimenti di riferimento utilizzati
per il confronto non sarebbero più frutto di una sola occorrenza, bensì tenterebbero di
71
rappresentare nel modo più corretto un set di movenze speciche dell'utente.
La gesticolazione delle mani potrà essere meglio interpretata e riconosciuta utilizzando
hardware più potente unito a modelli tridimensionali della mano. Camere di profondità
con una risoluzione maggiore, l'utilizzo di più camere in modo da non avere angoli di
visione ciechi, sensori di vario tipo ed eventualmente anche guanti appositamente progettati possono portare ad un riconoscimento preciso dei movimenti della mano così da
avvicinare ancor di più l'esperienza nel mondo virtuale a quella quotidiana.
Mantenendo gli stessi strumenti utilizzati si potrebbe migliorare il sistema implementato: ad esempio utilizzando in maniera congiunta le informazioni provenienti dalla camera
RGB e quelle provenienti dalla camera di profondità. Partendo dalla skeleton recognition,
e quindi una volta individuata la posizione della mano, sarebbe possibile analizzare l'area
nello spazio RGB contenente la mano cosi da identicare il colore che la rappresenta in
quelle determinate condizioni.
Si potrebbe così fare una
skin detection
molto accurata
e individuare in maniera precisa la mano all'interno dell'immagine RGB. Il vantaggio
apportato si riscontra nel fatto che esistono videocamere a colori a basso costo con risoluzione molto più elevata delle depth camera. L'analisi di un immagine ad alta denizione
della mano permetterebbe l'estrazione di un maggior numero di informazioni, inoltre si
ovvierebbe al problema dell'ambiguità tra mano e corpo quando questi sono vicini.
Si
potrebbe quindi rilevare il trigger di attivazione anche quando la mano in analisi venga a
trovarsi molto vicina ad altri oggetti o persone.
L'analisi gestuale potrebbe inoltre essere estesa a più di un soggetti cosi da permettere
l'interazione simultanea da parte di più utenti.
L'utilizzo di gesture può essere applicato a una miriade di dierenti campi e applicazioni,
avendo come unico limite la fantasia dell'ideatore del sistema.
Per ognuno di questi
campi lo studio dell'usabilità renderebbe più semplice l'utilizzo degli applicativi da parte
degli utenti, fornendo un interfaccia il più intuitiva e facile. Tale studio potrebbe essere
eettuato anche sull'applicativo sviluppato cosi da scegliere le gesture che più richiamano
l'azione collegata.
72
Bibliograa
[1] Microsoft
Surface
home
page.
http://www.microsoft.com/surface/en/us/
default.aspx
[2] J. Rekimoto N. Matsushita. HoloWall: Designing a nger, hand, body, and objectsensitive wall. In Proceeding of ACM Symposium on User Interface Software (Ban,
Alberta, Canada, Oct. 15-17). ACM Press, New York, 1997, pp. 209-210.
[3] HoloWall home page.
http://www.sonycsl.co.jp/person/rekimoto/holowall/.
[4] D. Leigh P. Dietz. DiamondTouch:
A multiuser touch technology. In Proceeding
of the 14th Annual ACM Symposium on User Interface Software and Technology
(Orlando, FL, Nov. 11-14). ACM Press, New York, 2001, pp.219-226.
[5] DiamondTouch home page.
http://www.merl.com/projects/DiamondTouch/.
[6] M. Sinclair K. Hinckley. Touch-sensing input device. In Proceeding of the ACM conference on Computer-Human Interaction (Pittsburgh, PA, May 15-20). ACM Press,
New York, 1999, pp.223-230.
[7] C. Schewsig J. Rekimoto. PreSenseII: Bi-directional Touch and Pressure Sensing
Interactions with Tactile Feedback. CHI 2006 extended abstracts on Human factors
in computing systems, pp.1253-1258, 2006.
[8] Xia Liu e K. Fujimura: Hand gesture recognition using depth data. In Proceeding of
the sixth IEEE International Conference on Automatic Face and Gesture Recognition
(Seoul, Korea, May. 17-19). Automatic Face and Gesture Recognition, 2004, pp.529534 .
[9] Xiujuan Chai, Yikai Fang e Kongqiao Wang: Roboust hand gesture analysis and application in gallery browsing. In Proceeding of ICME 2009 : IEEE International Conference on Multimedia and Expo ( Cancun, Mexico, June. 28 - May. 3) Multimedia
and Expo, 2009, pp.938 - 941.
[10] J. Segen and S. Kumar: Fast and Accurate 3D Gesture Recognition Interface. In Proceeding of Fourteenth International Conference on Pattern Recognition ( Brisbane,
Australia, August '98) Pattern Recognition, 1998, pp. 86 - 91 vol.1.
73
[11] Igorevich, R.R., Pusik Park, Dugki Min, Yunjung Park, Jongchan Choi, Eunmi Choi:
Hand gesture recognition algorithm based on grayscale histogram of the image In
Proceeding of 4th International Conference on Application of Information and Communication Technologies (AICT) ( Tashkent, UZ, 12-14 Oct. 2010) Application of
Information and Communication Technologies, 2010, pp. 1 - 4.
[12] William T. Freeman, Michal Rot:
Orientation Histograms for Hand Gesture Re-
cognition. In Proceeding of IEEE Intl. Wkshp. on Automatic Face and Gesture
Recognition, Zurich, June, 1995
[13] W. T. Freeman and E. H. Adelson. The design and use of steerable ters. IEEE Pat.
Anal. Mach. Intell., 13(9):891-906, September 1991.
[14] A. Oppenheim and R. Schafer. Digital Signal Processing. Prentice-Hall, 1975.
[15] A. Naftel and S. Khalid. Motion trajectory learning in the dft-coecient feature
space. In IEEE International Conference on Computer Vision Systems 2006 ICVS
'06, 2006.
[16] R. Agrawal, C. Faloutsos, and A. Swami. Ecient similarity search in sequence
databases. In Proc. of the 4th International Conference of Foundations of Data
Organization and Algorithms, 1993.
[17] A. Oppenheim and R. Schafer. Digital Signal Processing. Prentice-Hall, 1975.
[18] H. Glucksman. Classication of mixed-font alphabetics by characteristic loci. In 1967
Digest of 1st Annual IEEE Computer Conference, 1967.
[19] N. Piotto, M.Broilo, G.Boato, N.Conci, F.G.B. De Natale: Object Trajectory Analysis in Video Indexing and Retrieval Applications in D. Schonfeld, C. Shan, D. Tao,
L. Wang (eds), Video Search and Mining, Berlin: Springer-Verlag, 2010, p. 1-30. (Studies in Computational Intelligence)
[20] E. J. Keogh and M. J. Pazzani: Scaling up dynamic time warping for data mining
application. In ACM SIGKDD Int. Conf. on Knowledge discovery and data mining,
pp. 285-289, 2000.
[21] W. Hu, T. Tan, L. Wang, and S. Maybank. A survey on visual surveillance of object
motion and behaviors. IEEE Trans. On Systems, Man, and Cybernetics, 34:334-352,
2004.
[22] G.A. ten Holta, M.J.T. Reindersa,E.A. Hendriksa: Multi-Dimensional Dynamic Time
Warping for Gesture Recognition Publisher:
5249, Pages: 23-32, Time (2007)
74
Springer Berlin Heidelberg, Volume:
[23] Berndt D., Cliord J. (1994): Using dynamic time warping to nd patterns in time
series. AAAI-94 Workshop on Knowledge Discovery in Databases (KDD-94), Seattle,
Washington.
[24] Luke Olsen,Faramarz F. Samavati, Mario Costa Sousa:
Fast stroke matching by
angle quantization ImmersCom '07 Proceedings of the First International Conference
on Immersive Telecommunications ICST (Institute for Computer Sciences, SocialInformatics and Telecommunications Engineering) ICST, Brussels, Belgium, 2007
[25] Keogh
E.,
Pazzani
M.:
Derivative
Dynamic
Time
Warping.
In
First
SIAM
International Conference on Data Mining (SDM'2001), Chicago, USA.
[26] Chadi ALBITAR, Pierre GRAEBLING, Christophe DOIGNON: Robust Structured Light Coding for 3D Reconstruction IEEE 11th International Conference on
Computer Vision, 14-21 Oct. 2007, Rio de Janeiro. ICCV 2007.
75
76