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