Politecnico di Torino Corso di laurea Magistrale in Ingegneria Informatica (Computer Engeneering) Il dispositivo Microsoft Kinect Tesina di Realtà Virtuale Prof. Andrea Giuseppe Bottino A.A. 2011-­‐2012 Tesina a cura di: Maggio Luigi Gruppo di progetto: Maggio Luigi matr. 176043 Ricupero Simone Concetto matr. 176884 Viviani Adriano matr. 177305 Repici Gianpaolo matr. 178100 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect INDICE SEZIONI 1. 2. 3. 4. Cos’è il kinect? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 I componenti hardware del Kinect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Cenni di stereovisione e analisi stereo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 Come funziona il kinect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.1 La depht image. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.2 Il tracking. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.3 Analisi dei risultati. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 5. Kinect SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 6. Il futuro di Kinect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Reference e contatti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Autore: Maggio Luigi – E-­‐mail: [email protected] 1 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect SEZIONE 1: COS’È IL KINECT? Il Kinect, inizialmente conosciuto con il nome di Project Natal, è un dispositivo di input per la console di gioco di casa Microsoft, l’Xbox 360. Tale dispositivo è sensibile al movimento del corpo umano di modo che, a differenza dei suoi concorrenti quali il Wiimote della Nintendo e il PlayStation Move della Sony, esso rende il giocatore controller della console senza l'uso di strumenti. Sebbene in origine pensata per Xbox 360, Microsoft prevede di rendere nel prossimo futuro disponibile l'uso della periferica a tutti i PC dotati di un sistema operativo Windows. Kinect è stato annunciato al pubblico il 1º giugno 2009 durante la conferenza stampa della Microsoft all'E3 2009 con il nome Project Natal, poi rinominato Kinect alla presentazione ufficiale all'E3 2010. Figura 1. Microsoft Kinect. L'uscita di Kinect ha provocato un grande sommovimento nella comunità di sviluppo libero di software per PC e Mac. Una moltitudine di programmatori è infatti attualmente al lavoro sul "reverse engineering" della periferica, allo scopo di trovare nuove modalità di utilizzo di tale dispositivo che si configura come il primo di una serie di sistemi che potrebbe davvero portarci in un futuro alla Minority Report. Tra le tante applicazioni che dall'uscita di Kinect hanno visto l'utilizzo non ludico della periferica Microsoft si può ad esempio citare quella sviluppata da due ricercatori dell'università di Berna (Svizzera). Questi hanno realizzato un sistema di controllo per la visualizzazione e l'analisi di radiografie e tomografie che svincola i medici dall'uso delle mani e rende, grazie anche all'uso delle capacità di riconoscimento vocale di Kinect, davvero immediata la consultazione degli esami medici, anche durante un'operazione in corso. A dicembre 2010 la società PrimeSense, una compagnia israeliana da tempo impegnata in ricerca e sviluppo di sistemi di controllo senza dispositivi fisici e responsabile della tecnologia del sistema di telecamere di Kinect, ha rilasciato i driver open source per questa innovativa periferica, compatibili con Windows e Linux (versione Ubuntu 10.10 in poi). Questi driver consentono di accedere alle funzioni audio, video e ai sensori di profondità di Kinect e sono basati su una API completa, nota come OpenNI (Open Natural Interactions). OpenNI permette di catturare il movimento in tempo reale, il riconoscimento di gesti delle mani e dei comandi vocali e implementa anche un "analizzatore di scena", che rileva figure in primo piano e le separa dallo sfondo. Autore: Maggio Luigi – E-­‐mail: [email protected] 2 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect SEZIONE 2: I COMPONENTI HARDWARE DEL KINECT In questa sezione è fornito un accenno all’hardware presente nel dispositivo, al fine di identificarne uno schema di funzionamento basato sulla conoscenza e connessione delle sue componenti materiali prima che su quelle concettuali e algortmiche fornite nel seguito. L'hardware di Kinect si basa su tecnologie di 3DV, una compagnia che Microsoft ha prima finanziato e poi acquisito nel 2009, nonchè sul lavoro dell’israeliana PrimeSense, che ha poi dato in licenza la tecnologia a Microsoft. Il 13 maggio 2010 è stato pubblicato negli Stati Uniti da PrimeSense un brevetto dal titolo “Depth Mapping using Projected Patterns” che spiega esattamente la tecnologia implementata in Kinect. Il dispositivo dopo un disassemblaggio si presenta nel modo seguente.. Figura 2. Disassemblaggio del Kinect. L’apertura del dispositivo mostra la presenza di: § un array di microfoni orientati verso il basso (3 sul lato destro e uno sul lato sinistro); § tre apparati ottici utilizzati per il riconoscimento visuale del corpo in movimento: due videocamere ed un sensore infrarossi aggiuntivo; § una ventola per la dissipazione del calore; § 64MB di memoria flash DDR2; § un accelerometro Kionix KXSD9 a tre assi; § Prime Sense PS1080-­‐A2, il chip che rappresenta il cuore della tecnologia di Kinect. Più in dettaglio il corredo di apparati ottici di Kinect si compone di una telecamera RGB e un doppio sensore di profondità a raggi infrarossi. Tale sensore è composto da un proiettore a infrarossi e da una telecamera sensibile alla stessa banda, che in pratica serve a leggere quanto rilevato dai raggi infrarossi. La telecamera RGB ha una risoluzione di 640 × 480 pixel, mentre quella a infrarossi usa una matrice di 320 × 240 pixel. L’array di microfoni è usato dal Autore: Maggio Luigi – E-­‐mail: [email protected] 3 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect sistema per la calibrazione dell'ambiente in cui ci si trova, mediante l'analisi della riflessione del suono sulle pareti e sull'arredamento. In tal modo il rumore di fondo e i suoni del gioco vengono eliminati ed è possibile riconoscere correttamente i comandi vocali. La barra del Kinect è motorizzata lungo l'asse verticale e segue i movimenti dei giocatori, orientandosi nella posizione migliore per il riconoscimento dei movimenti. Come già accennato, la periferica permette all'utente di interagire con la console senza l'uso di alcun controller da impugnare, ma solo attraverso i movimenti del corpo, i comandi vocali o attraverso gli oggetti presenti nell'ambiente. Microsoft dichiara che Kinect può seguire i movimenti di fino a quattro giocatori, sia in piedi che seduti. Figura 3. Esempio di interazione con il Kinect mediante un avatar. Visti i componenti hardware, uno schema di funzionamento del dispositivo potrebbe essere il seguente Figura 4. Schema di funzionamento del Kinect. nel quale viene evidenziato come il chip PS1080-­‐A2 di PrimeSense sovraintenda tutta la procedura di analisi della scena controllando adeguatamente gli apparati ottici e audio al fine di raccogliere le informazioni di cui necessita. A puro scopo informativo di seguito un elenco dei vari chip presenti all’interno di Kinect: § Wolfson Microelectronics WM8737G – Stereo ADC con microfono preamp § Fairchild Semiconductor FDS8984 – N-­‐Channel PowerTrench MOSFET Autore: Maggio Luigi – E-­‐mail: [email protected] 4 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect § § § § § § § § § § NEC uPD720114 – USB 2.0 hub controller H1026567 XBOX1001 X851716-­‐005 GEPP Marvell AP102 – SoC con interfaccia Camera controller Hynix H5PS5162FF 512 megabit DDR2 SDRAM Analog Devices AD8694 ; Quad, Low Cost, Low Noise, CMOS Rail-­‐to-­‐Rail Output Operational Amplifier TI ADS7830I – 8-­‐Bit, 8-­‐Channel Sampling A/D Converter with I2C Interface Allegro Microsystems A3906 – Low Voltage Stepper and Single/Dual DC Motor Driver ST Microelectronics M29W800DB – 8 Mbit (1Mb x8 or 512Kb x16) NV Flash Memory PrimeSense PS1080-­‐A2 – SoC image sensor processor TI TAS1020B USB audio controller front and center Figura 5. Chip presenti all’interno di Kinect. Completa la lista dell’hardware del dispositivo un accelerometro Kionix MEMS KXSD9, utilizzato per controllare l’inclinazione e stabilizzare l’immagine. Autore: Maggio Luigi – E-­‐mail: [email protected] 5 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect SEZIONE 3: CENNI DI STEREOVISIONE E ANALISI STEREO La stereo visione è una tecnica di ottica inversa che consiste nell'ottenere informazione di profondità da una coppia d' immagini provenienti da due telecamere che inquadrano la stessa scena da differenti posizioni. Una singola locazione fisica nello spazio tridimensionale della scena osservata viene dunque fatta corrispondere univocamente a una coppia di pixels nelle due immagini. Figura 6. Geometria stereo per due telecamere. Avendo a disposizione le due immagini prodotte dalle telecamere, se è possibile localizzare la coppia di pixels [ p, p′ ] che corrisponde ad un stesso punto P dello spazio 3D, allora è possibile determinate le coordinate (x, y, z) del punto tridimensionale P. I pixels p e p′ sono detti essere una coppia coniugata, in altre parole una coppia di punti in immagini diverse che sono proiezione dello stesso punto della scena. Detto questo, per analisi stereo si intende il processo di misurazione della distanza da un oggetto, basato sul confronto di due o più immagini dell’oggetto stesso ottenute simultaneamente. In altre parole, i sistemi di stereovisione determinano la profondità di una scena attraverso due o più immagini di tale scena ottenute allo stesso tempo, ma da punti di vista lievemente differenti. Questo processo dovrebbe essere ben noto a tutti in quanto l’effetto di profondità, ossia la percezione della terza dimensione che avvertiamo attraverso i nostri occhi, deriva Figura7. Il sistema visivo umano. appunto dal fatto che i due bulbi oculari hanno i loro assi ottici distanti circa 65 mm e forniscono due immagini leggermente diverse degli oggetti che osserviamo. Tali immagini, sommando i loro effetti, procurano il senso della profondità. Autore: Maggio Luigi – E-­‐mail: [email protected] 6 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect Il problema principale in tale processo è quello di trovare la corrispondenza tra gli elementi delle varie immagini disponibili. Una volta che tale corrispondenza è stata scoperta, la distanza dall’oggetto può essere ottenuta tramite semplice ottica geometrica. Le tecniche di correlazione sono parte dell’analisi stereo e cercano proprio di trovare punti corrispondenti fra le diverse immagini massimizzando una qualche misura di similarità. Ad esempio la correlazione area-­‐based è una tecnica di correlazione locale basata sul matching di due aree di pixels. Per prima cosa, viene scelto un pixel p di coordinate (i, j) nella prima immagine. Tale pixel sarà il baricentro di una finestra di ricerca di dimensioni NxN, detta finestra di riferimento. A questo punto trovare il corrispondente pixel significa confrontare la finestra di riferimento con alcune finestre prese dalla seconda immagine, dette frames di ricerca. Una volta trovato il frame di ricerca che più assomiglia alla finestra di riferimento, il baricentro di tale frame sarà il pixel p’ corrispondente a p. L’algoritmo esposto ha però una complessità molto elevata e necessita pertanto di essere rilassato. L’introduzione di un vincolo epipolare è un ottimo modo per rilassare il problema iniziale. Questo vincolo impone che, nelle immagini stereo, i pixels corrispondenti debbano sempre giacere sulle cosiddette linee epipolari. Queste linee corrispondono all’intersezione di un piano epipolare (il piano attraverso un punto della scena ed i punti focali dei due obiettivi) con i piani di immagine sinistro e destro. In tal modo la ricerca delle corrispondenze deve essere effettuata solo su tali linee epipolari e non sull’intera immagine, come illustrato della figura seguente. Figura 8. Correlazione area-­‐based con introduzione del vincolo epipolare. L’utilizzo di un vincolo epipolare riduce il problema, inizialmente bidimensionale, a uno monodimensionale, poiché il pixel obiettivo nella seconda immagine deve necessariamente trovarsi sulla linea orizzontale di ordinata uguale a quella del pixel di partenza (linea epipolare). In queste condizioni, un modo immediato di calcolare il valore della disparità è quello di cercare lungo le linee epipolari il massimo della funzione di correlazione. Per intenderci, la funzione di correlazione è una relazione matematica che mette in comune il valore di disparità dei pixels candidati alla corrispondenza e le connesse misure di similarità trovate per i frames di ricerca di cui tali pixels sono i baricentri. Autore: Maggio Luigi – E-­‐mail: [email protected] 7 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect SEZIONE 4: COME FUNZIONA IL KINECT In questa sezione cercheremo di spiegare come funziona il dispositivo Kinect, ovvero quali sono le tecniche alla base del riconoscimento dei movimenti del giocatore per renderlo controller. I principi della tecnologia utilizzata saranno espressi senza eccedere troppo in dettagli matematici, al fine di facilitarne la comprensione. Riassumendo in parole povere quello che andremo a vedere, Kinect deduce la posizione del corpo mediante un processo che si compone dei seguenti due step: § Step1: viene costruita una mappa di profondità utilizzando l’analisi di luce strutturata creata mediante l’emettitore di infrarossi. § Step2: viene dedotta la posizione utilizzando algoritmi di tracking implementati nel software sviluppato da Microsoft. STEP 2 STEP 1 Figura 9. Step del processo di riconoscimento della posizione del corpo operato da Kinect. Autore: Maggio Luigi – E-­‐mail: [email protected] 8 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect 4.1 LA DEPTH IMAGE Quella proposta nell’immagine sottostante è una delle interfaccie di Test per Kinect messa a disposizione dal driver/SDK per Windows7 “CL NUI Platform” realizzato da Code Laboratories (società impegnata nella ricerca e sviluppo di soluzioni per sistemi interattivi in tempo reale). Figura 10. CL NUI Simple Test. Chi si occupa di computer vision sicuramente avrà riconosciuto sul lato destro dell’immagine una Disparity Map. Per tutti quelli che invece non sanno di cosa stiamo parlando è necessaria una spiegazione ai fini della comprensione : cos’è una Mappa di disparità? Consideriamo due immagini di una stessa scena prodotte mediante un sistema di stereovisione. Una Mappa di disparità può essere vista come una matrice M di interi di dimensione WxH, dove W ed H sono rispettivamente l’ampiezza e l’altezza dell’immagine. Ogni intero d presente nelle celle della matrice rappresenta la distanza (espressa in pixel) tra il pixel di riferimento p, preso dalla prima immagine, ed il corrispondente pixel p′, appartenente alla seconda immagine, nel momento in cui le due immagini vengono sovrapposte. Più è alto il valore della disparità d, più il punto tridimensionale, rappresentato univocamente dalla coppia di pixel p e p′, si trova vicino alle due camere. Di conseguenza la disparità d(A) calcolata per il punto A deve essere maggiore rispetto alla disparità d(B) del punto B, poiché evidentemente A Figura 11. Sistema di telecamere con obiettivi allineati. si trova più vicino alle due camere rispetto a B. Quanto appena affermato però è vero solo a condizione che gli obiettivi delle due camere siano allineati e lievemente distanziati come illustrato in figura. Definiamo ora come a1 e a2 i punti proiezioni di A rispettivamente sulla prima e sulla seconda immagine; analogamente definiamo b1 e b2 per il punto B. Assunto inoltre che tutti i punti a1, a2, b1 e b2 abbiano lo stesso valore di ordinata, allora tali punti giacciono tutti sulla medesima linea orizzontale. Autore: Maggio Luigi – E-­‐mail: [email protected] 9 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect Calcoliamo dunque i valori di disparità per i punti A e B nel seguente modo: disparità per il punto A: d(A) = a1 – a2 disparità per il punto B: d(B) = b1 – b2 come si poteva presumere, troveremo che d(A) > d(B) essendo a1 > b1 e a2 < b2. E’ importante sottolineare che sono da considerare soltanto i valori di ascissa dei quattro punti (in virtù dell’ipotesi di allineamento verticale), come illustrato dalla seguente figura. Figura 12. Calcolo della disparità. In altre parole, se consideriamo le due immagini come matrici di pixels, i punti a1 e a2 possono essere rappresentati in base ai rispettivi valori di riga e di colonna. Il pixel a1 avrà coordinate riga-­‐colonna (i, j) mentre a2 si troverà in posizione (i′, j′). Figura 13. Le due immagini intese come matrici di pixels. La disparità tra a1 e a2 altro non sarà che la distanza tra le locazioni (i, j) e (i′, j′) quantificata mediante un intero che indichi la differenza in pixels tra le due posizioni della coppia coniugata. Chiaramente, la disparità può essere calcolata solo per punti della scena che sono visibili in entrambe le immagini; un punto visibile in un'immagine ma non all’altra viene detto essere occluso. Una volta che la matrice M è stata completamente riempita, ovvero una volta che per ogni pixel nell’immagine di riferimento è stato trovato il corrispettivo nella seconda Autore: Maggio Luigi – E-­‐mail: [email protected] 10 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect immagine ed è stata calcolata la disparità tra i due, abbiamo ottenuto una mappa della disparità della scena che stiamo analizzando. Associando l’informazione contenuta in M sotto forma di numeri interi (che vanno da zero a DMAX, dove DMAX è la massima disparità ammessa) ad una qualche scala di colori, possiamo ottenere una terza immagine che rappresenta gli oggetti della scena con differenti colori in base alla loro distanza dalle camere. Da quanto detto si può dunque dedurre che una mappa di disparità può essere usata come strumento per la valutazione tridimensionale dell’ambiente osservato. Il Kinect ottiene informazioni 3D dalla scena analizzata appunto creando al suo interno una Mappa di Disparità. Come abbiamo appena spiegato, normalmente le Disparity Map si ottengono tramite un sistema di stereo visione, ma il Kinect non è certo un sistema di questo tipo essendo dotato solo di una Camera RGB, una camera Gray (Depth Camera) e un emettitore di raggi infrarossi. La soluzione adottata è la seguente: l’emettitore ad infrarossi proietta nell’ambiente esaminato un’immensità di spot luminosi la cui distribuzione a prima vista sembra casuale (si ottiene questo effetto grazie a una mascherina posta davanti al led). Il pattern emesso è visibile spegnendo le luci, puntando il Kinect verso una superficie piana e inquadrando tale superficie con una camera digitale: Figura 14. Due esempi dell’IR pattern proiettato dal Kinect. Passare da tale pattern all’informazione 3D è un’operazione matematica ben definita: la disposizione dei punti del pattern è nota a priori al software del Kinect, che al suo interno ha memorizzato come il pattern dovrebbe essere visto dal sensore IR se fosse proiettato su una superficie posta ad una distanza ben definita e perfettamente parallela al piano della Depth Camera. Quest’ultimo quindi altro non è che un pattern di riferimento. Per ognuno dei punti proiettati si può calcolare la distanza dal sensore triangolando la sua posizione attuale (espressa in pixel) con quella che avrebbe assunto nel pattern di riferimento, in maniera del tutto similare a quello che viene fatto nella stereo visione per il calcolo di una matrice di disparità. Risultato dell’elaborazione del pattern proiettato è un immagine di profondità grezza (raw depth image), nel senso che i valori di profondità di un punto di quest’ultima non sono valori espressi in una qualche unità di misura; è dunque necessaria una procedura di calibrazione che metta ad esempio in corrispondenza i valori grezzi con valori espressi in scala metrica. Per poter riconoscere quale particolare punto si sta analizzando viene considerata (procedura di correlazione) la disposizione dei 64 punti vicini che per ogni punto del pattern è diversa e Autore: Maggio Luigi – E-­‐mail: [email protected] 11 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect ben definita. I punti più grossi e luminosi visibili all’interno del pattern e le zone più chiare e più scure servono a facilitare tale operazione di riconoscimento. Figura 15. Immagine acquisita dalla camera a infrarossi (a sinistra) e corrispondente immagine di profondità (a destra). Per ogni punto è poi possibile ricavare la posizione 3D reale utilizzando la matrice di calibrazione della telecamera e associare il colore reale dell’oggetto colpito utilizzando l’immagine ottenuta mediante la telecamera RGB. Tale procedura richiede un processo di calibrazione molto preciso per il quale viene utilizzata la Microsoft Calibration Card, disponibile in ogni custodia di gioco per Kinect. Fonti Microsoft parlano della capacità del sistema di misurare oggetti con l’accuratezza di 1cm alla distanza di 2 metri. Ma cosa succede quando gli spot luminosi proiettati impattano sugli oggetti della scena? Viene a crearsi una deformazione della distanza tra uno spot e l'altro in base all'angolazione delle superfici (per intenderci sarebbe come poggiare un lenzuolo a pois su un divano: è possibile farsi Figura 16. Microsoft calibration card. un’idea della forma del divano in base a come si dispongono i pallini), in quanto la fotocamera inquadra la proiezione bidimensionale della distribuzione tridimensionale degli spot. In base alla densità degli spot luminosi ci si può fare un’idea anche riguardo l’angolazione di una superficie inquadrata. La figura17 riassume graficamente quanto detto finora, mostrando come i tre differenti sensori ottici diano ognuno il proprio contributo fornendo al chip PrimeSense PS1080-­‐A2 i dati necessari alla realizzazione di un’immagine contenente informazioni di profondità circa la scena osservata; tale immagine contiene anche un certo numero di informazioni riguardo la distorsione dei punti rispetto alla loro posizione ideale. Ecco quindi spiegato in che modo il Kinect determina la distanza degli oggetti nella stanza e la loro conformazione. Figura 17. Schema della procedura di creazione della depth image. Autore: Maggio Luigi – E-­‐mail: [email protected] 12 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect 4.2 IL TRACKING Ottenuta una depth image della scena osservata, il successivo step di elaborazione consiste in un’operazione di tracking interamente a carico del software: l’identificazione del numero, della posizione e delle giunture scheletriche degli essere umani presenti all’interno della scena. Nel campo della computer vision col termine tracking si indica la capacità di un calcolatore di riconoscere la posizione e l'orientamento di determinati oggetti attraverso l'analisi di una sequenza di immagini. Trattando il Kinect è però più corretto parlare di object tracking, inteso come l’abilità di un calcolatore di riuscire a riconoscere oggetti e tracciare il movimento degli stessi attraverso l’analisi di una sequenza di immagini (addirittura una sola in nel nostro caso). Figura 18. Operazione di tracking. Il tracking di Microsoft è frutto di un’analisi di 500000 campioni di dati registrati riguardanti diversi comportamenti umani (ballo, spostamento, saluto, etc etc). Di questi, una parte (circa 10000) sono stati considerati particolarmente rilevanti e sono stati utilizzati per “insegnare” al software a riconoscere la posizione dei punti chiave dello scheletro umano. I dati risultato del tracking vengono elaborati in tempo reale e forniti alla macchina cui è stato abbinato il dispositivo (console Xbox 360 o pc) per essere utilizzati. La figura seguente riassume lo schema di elaborazione delle informazioni della scena osservata con l’aggiunta del passo appena descritto. Figura 19. Schema delle operazioni di elaborazione effettuate dal Kinect sulla scena inquadrata. Autore: Maggio Luigi – E-­‐mail: [email protected] 13 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect Vediamo ora però di spiegare in che modo il Kinect effettua la cosiddetta pose recognition in parts, ovvero la predizione delle posizioni 3D e il tracciamento del movimento delle giunture scheletriche del corpo umano in real time, a partire da una singola depth image. L’approccio utilizzato si rifà alle moderne tecniche nell’ambito dell’object recognition basate sul principio di suddivisione degli oggetti in parti. Le tecniche di riconoscimento sviluppate in tale ambito assicurano infatti livelli soddisfacenti di efficienza computazionale e robustezza. Come già accennato, l’unico input al software è costituito dalla depth image (in bianco e nero) prodotta dal chip di PrimeSense, dalla quale si provvede ad eliminare qualsiasi elemento di sfondo al fine di isolare la fisionomia del controller umano. Come mostrato in figura20, su tale immagine viene operata un’etichettatura probabilistica, ovvero la depth image del corpo viene probabilisticamente suddivisa in parti tali da ricoprirla densamente. Alcune di queste parti sono risapute contenere dei particolari giunti scheletrici di interesse, mentre altre sono solo utili solo a riempire gli spazi tra le varie parti del tipo precedente o potrebbero essere utilizzate per prevedere delle articolazioni aggiuntive. Figura 20. Fasi della pose recognition a partire da una singola depth image (a sinistra) e schema delle giunture scheletriche ricercate dal Kinect (a destra). Questo tipo di rappresentazione trasforma il complesso problema del tracking in uno facilmente risolvibile con opportuni algoritmi di classificazione. Ne deriva che le parti identificate dovrebbero essere abbastanza piccole da consentire di individuare con accuratezza i giunti scheletrici, ma non troppo piccole perché un gran numero di porzioni da analizzare andrebbe inevitabilmente a intaccare le prestazioni del classificatore. Durante la fase di classificazione i pixel dell’immagine vengono considerati e classificati singolarmente di modo che le singole operazioni di analisi siano parallelizzabili all’interno della GPU. Ma in base a cosa un pixel viene classificato come appartenente ad una parte piuttosto che ad un’altra? E soprattutto, com’è fatto il classificatore? Ovviamente le risposte alle due domande sono strettamente correlate, poiché il classificatore prenderà decisioni discriminando i pixel sulla base di determinate features, che nel caso in esame coinvolgono semplici confronti di profondità tra offset associati singolarmente ai pixel. In particolare per ogni pixel il calcolo delle features avviene nel modo seguente.. dove dI(x) è la profondità del pixel x nell’immagine I e θ(u,v) descrive gli offset u e v. Autore: Maggio Luigi – E-­‐mail: [email protected] 14 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect La normalizzazione degli offset (1/dI(x)) garantisce invarianza rispetto alla profondità. Ciò significa che per un dato punto sul corpo un offset fissato nello spazio determinerà se il pixel è vicino o lontano dalla camera. Se un pixel x’ di offset si trova sullo sfondo o al di fuori dei limiti dell'immagine, il calcolo della profondità dI(x’) restituirà un valore grande positivo. Ad esempio, nell’immagine seguente le croci in giallo rappresentano i pixel sui quali viene operata la classificazione mentre i circoletti in rosso denotano invece i pixels di offset. Sulla base di quanto detto, in (a) il calcolo della (1) per le due features θ1 e θ2 restituirà valori grandi in virtù della grande differenza di profondità stimata per i due offset associati al pixel. In (b) invece per le stesse due features si otterrà un valore molto minore. Questo perchè nel caso di θ1 non ci sono pixel di offset che si trovano al di fuori dei limiti dell’immagine, mentre nel caso di θ2 perché tutti i pixel di entrambi gli offset si trovano al di fuori dei limiti. Se ne deduce che la feature θ1 potrebbe essere utilizzata per identificare a che altezza del corpo è localizzato un pixel, mentre la feature θ2 è utile per trovare sottili strutture verticali quali ad esempio le braccia. Figura 21. Depth image features. La scelta delle features utilizzate è stata fortemente influenzata della necessità di garantire elevata efficienza computazionale: ognuna di esse richiede solo la lettura di massimo tre pixel dell’immagine e lo svolgimento di al più cinque operazioni matematiche. Individualmente queste features forniscono un’indicazione non troppo significativa circa la parte del corpo cui un pixel appartiene, ma se combinate in una foresta decisionale risultano sufficienti ad eliminare tutte le ambiguità. Foreste e alberi decisionali randomizzati sono strutture di comprovata velocità ed efficacia per la risoluzione di problemi di classificazione e sono implementabili efficientemente su GPU. Figura 22. Foresta decisionale randomizzata. Una foresta altro non è se non un insieme di T alberi decisionali (“addestrati” singolarmente), ognuno dei quali rappresenta un classificatore che predice la probabilità di un pixel di appartenere a ciascuna delle parti. Ad ogni nodo in un albero corrisponde una coppia formata Autore: Maggio Luigi – E-­‐mail: [email protected] 15 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect da una feature fθ e da un valore di soglia τ. Per classificare un pixel x di un’immagine I si valuta ripetutamente l’equazione (1) iniziando dal nodo radice di ogni albero e seguendo le diramazioni sottostanti a destra o sinistra sulla base dei confronti con i valori di τ indicati all’interno dei nodi. Così facendo si giunge a uno dei nodi foglia, in ognuno dei quali è memorizzata una data distribuzione di probabilità Pt(c|I,x) circa l’appartenenza del pixel in esame alle varie parti del corpo etichettate. In particolare per derivare la classificazione finale del pixel viene calcolata una media d’insieme tra tutte le T distribuzioni Pt(c|I;x) ricavate navigando i T alberi decisionali Figura 23. Rappresentazione concettuale di un albero decisionale. Ogni albero viene addestrato utilizzando un diverso insieme di immagini scelte a caso. Un sottoinsieme casuale di 2000 pixels viene scelto in ogni immagine dell’insieme per assicurare una distribuzione quanto più uniforme possibile su tutte le parti del corpo. L’algoritmo utilizzato per il training degli alberi decisionali è il seguente: 1. Per ogni nodo di un albero viene proposto un insieme casuale di features candidate ϕ =(θ, τ), dove con θ si indica l’insieme di parametri della feature e con τ i valori di soglia associati. 2. Ad ogni nodo si partiziona l’insieme dei pixel di esempio scelti Q = {(I; x)} nei due sottoinsiemi destro e sinistro. Per ogni pixel il sottoinsieme di appartenenza viene deciso valutando la (1) e confrontando il risultato con il valore di soglia τ relativo alla feature associata al nodo. Quando detto può essere espresso matematicamente nel modo seguente: Autore: Maggio Luigi – E-­‐mail: [email protected] 16 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect 3. Si sceglie ϕ tra tutte quelle valutate tale che fornisca il maggior guadagno possibile a livello informativo 4. Se il guadagno informativo G(ϕ*) è sufficiente e la profondità dell’albero è minore di un certo massimo, l’algoritmo viene ripetuto ricorsivamente sui sottoinsiemi destro e sinistro. In altre parole, gli alberi sono costruiti utilizzando un classico approccio di tipo top-­‐down. Per ogni nodo viene scelto un insieme di features e tali feature vengono testate singolarmente per capire quale di esse risulta essere la più discriminante. Quest’ultima viene selezionata ed assegnata al nodo. Il processo di selezione viene ripetuto ricorsivamente su ogni nodo che non sia un nodo foglia, utilizzando solo i pixel di esempio presenti in tale nodo (sottoinsieme dell’iniziale insieme di pixel di esempio ricavato prelevando 2000 pixel da ogni immagine dell’insieme di training selezionato per l’albero). La ricorsione si ferma nel momento in cui un nodo contiene un numero troppo basso di pixel esempio oppure si è raggiunta una prefissata profondità massima. Figura 24. Esempi di dati generati per il training degli alberi decisionali, immagini di profondità delle quali è già nota la posizione dei giunti scheletrici. Per il training del software sono state generate ad hoc un gran numero di depth images realistiche rappresentanti esseri umani di varia stazza e dimensione posti in varie pose. Tali immagini sono quindi state raccolte all’interno di un motion capture database per poter essere utilizzate in delle comparazioni di profondità con quella ottenuta di volta in volta dall’analisi della scena osservata. Più in dettaglio la base di dati contiene i modelli 3D di una ventina di body models (alcuni dei quali raffigurati in figura25, che differiscono per peso, altezza, etc etc) e circa 500'000 frame che li vedono impegnati in alcune centinaia di sequenze di guida, ballo, corsa, navigazione dei menu, etc. Viene lasciato alla componente software di classificazione il compito di riconoscere altre eventuali possibili pose generalizzando quelle già conosciute. Autore: Maggio Luigi – E-­‐mail: [email protected] 17 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect Figura25. Esempi di body models precaricati nel motion capture database di Kinect. “To keep the training times down we employ a distributed implementation. Training 3 trees to depth 20 from 1 million images takes about a day on a 1000 core cluster.” Shotton et al, CVPR(2011) Risultato della fase di classificazione dei pixel è una texture map sulla quale sono ben evidenziate le parti e che può essere utilizzata per lo skin dei personaggi ad ogni rendering. Riproiettando poi le parti su più piani (corrispondenti a differenti punti di vista) si cerca di calcolarne le modalità di distribuzione spaziale al fine di produrre una proposta della posizione tridimensionale delle giunture scheletriche di interesse. In particolare l’algoritmo di tracking del Kinect ricerca per ogni individuo una ventina di giunti scheletrici ben definiti. La distribuzione di tali giunti è rappresentata in figura20. Figura 26. Sequenza delle fasi di elaborazione dalla scena reale alla proposta di localizzazione spaziale dei giunti scheletrici. Ma in che modo viene formulata la suddetta proposta? Abbiamo già detto in precedenza che il Kinect effettua il riconoscimento delle parti del corpo deducendo informazioni dall’analisi dei singoli pixel di una depth image. Tali informazioni vengono poi aggregate per essere considerate nel loro insieme al fine di valutare la posizione delle giunture. In particolare viene impiegato un approccio locale di ricerca della moda di distribuzioni di probabilità basato sul mean shift con un kernel Gaussiano ponderato. § Def. Mean shift : algoritmo per la ricerca di massimi locali. L'idea di fondo sulla quale si basa consiste nel trovare all'interno di una finestra di ricerca, centrata in un determinato punto x, un nuovo punto ¯ˉx che sia più vicino, rispetto ad x, al massimo locale ed iterare questa procedura finchè non si raggiunge il massimo locale. Autore: Maggio Luigi – E-­‐mail: [email protected] 18 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect Il calcolo della densità di una parte viene eseguito nel seguente modo dove: § ^x è una coordinata nello spazio 3D. § N è il numero di pixel dell’immagine. § wic è una ponderazione operata sul pixel. § ^xi è la proiezione del pixel dell’immagine nello spazio data la profondità dI(xi). § bc è una larghezza di banda dedotta per la parte. La quantità wic tiene conto sia la probabilità che il pixel appartenga ad una certa parte sia la superficie del pixel Questo assicura che le stime di densità siano invarianti rispetto alla profondità, il che produce un piccolo ma significativo miglioramento dell’accuratezza nella predizione congiunta della posizione delle giunture. Figura 27. Esempi di proposte di scheletratura visti di fronte, da destra e dall’alto. Stando a quanto affermato da Microsoft, un'implementazione ottimizzata di questo algoritmo per il tracking permette l’analisi di un frame in 5 ms utilizzando la GPU in dotazione su Xbox360. Tale tempo di elaborazione è almeno un ordine di grandezza più veloce rispetto a quello di tutti gli altri algoritmi di tracking attualmente utilizzati. Tirando le somme di quanto detto finora, la forza della soluzione adottata da Microsoft per il body tracking deriva dall’aver trattato il problema della pose estimation come uno di object recognition utilizzando una rappresentazione delle parti del corpo studiata per la localizzazione spaziale dei giunti scheletrici con un basso costo computazionale ed un alto grado di accuratezza. Autore: Maggio Luigi – E-­‐mail: [email protected] 19 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect 4.3 ANALISI DEI RISULTATI In questa sezione verrà offerta una valutazione del metodo descritto finora per la body part recognition di Kinect in termini della sua accuratezza in fase di classificazione e in fase di predizione delle giunture scheletriche. Figura 27. Test di accuratezza in fase di classificazione. Per quanto riguarda l’accuratezza in fase di classificazione sono indagati gli effetti derivanti dell’utilizzo di diverse combinazioni di parametri di training. Per i test sono stati utilizzati insiemi di immagini reali o immagini sintetiche (realizzate ad hoc) riscontrando una grande similarità nei risultati ottenuti. In particolare però il training basato su immagini reali si è dimostrato molto più semplicistico, probabilmente in virtù del minor numero di pose descritte rispetto al caso dei dati creati ad hoc. Questo perché un utente umano solitamente utilizza solo un numero limitato di posizioni, quelle che gli permettono di interagire col dispositivo (console Xbox o pc) che sta utilizzando. Di seguito quindi l’analisi dei test, per i quali si intendono fissi i seguenti parametri: 3 alberi profondi al massimo 20, 300'000 immagini di training per ogni albero, 2000 feature candidate per ogni nodo e 50 valori di soglia candidati per ogni feature. àNumero di immagini utilizzate per il training: il grafico (a) mostra come la precisione del test aumenta con andamento quasi logaritmico all’aumentare del numero di immagini generate in maniera random per il training. Tale aumento inizia a diminuire gradualmente a quota circa 100'000 immagini. Tale valore di saturazione è probabilmente dovuto ai parametri di test (solo tre alberi con profondità massima venti). à Profondità degli alberi: il grafico (b) mostra come la profondità degli alberi decisionali incide sulla precisione del test in due casi in cui sono utilizzati set di training contenenti rispettivamente 15'000 e 900'000 immagini. Di tutti i parametri di training la profondità degli alberi sembra essere quello che ha l’effetto più significativo ed impatta direttamente sulla capacità del classificatore. Utilizzando 15'000 immagini si nota l’insorgere di overfitting (adattamento del modello statistico ai dati di training usando un numero eccessivo di parametri) in corrispondenza di Autore: Maggio Luigi – E-­‐mail: [email protected] 20 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect una profondità degli alberi pari a diciassette, mentre utilizzando il secondo set di training tale problema non si presenta. Da notare infine è che se la profondità degli alberi fosse fissata circa a dieci, la cardinalità del set di training sarebbe poco rilevante, il che suggerisce un’efficiente strategia di training. Figura 29. Test di accuratezza in fase di predizione della posizione delle giunture scheletriche. Per quanto riguarda invece l’accuratezza in fase di predizione delle giunture scheletriche, in figura29 è illustrato un grafico nel quale è indicata la precisione dell’algoritmo andando nello specifico delle singole differenti parti del corpo. In particolare viene offerto un raffronto tra la precisione ottenuta partendo da un input generato ad hoc, in cui quindi le parti sono state mappate a mano dai responsabili del test, e quella ottenuta partendo invece da un input in cui la suddivisione è stata operata in automatico mediante l’algoritmo di riconoscimento delle parti descritto precedentemente. Autore: Maggio Luigi – E-­‐mail: [email protected] 21 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect SEZIONE 5: KINECT SDK Come si è lasciato intendere precedentemente, Microsoft Kinect è un dispositivo utilizzabile in abbinamento ad un pc, non solo con Xbox360. Di fatto però l’SDK ufficiale fornite da Microsoft permette di utilizzarlo e sviluppare applicazioni basate su Kinect esclusivamente in pc con sistema operativo Windows (Xp, Vista, Seven). Le SDK ufficiali sono state rilasciate da Microsoft solo nel luglio del 2011, mentre driver non ufficiali, usciti molti mesi prima, hanno permesso agli sviluppatori di tutto il mondo di testare il funzionamento di Kinect e di creare una moltitudine di applicazioni basate su di esso. Il Software Development Kit ufficiale fornisce una libreria in grado di recuperare e gestire i flussi di dati provenienti dai sensori del dispositivo e può essere utilizzata sia in C++ che in uno dei linguaggi Managed del Framework .NET. Figura 30. Schema concettuale dell'SDK di Microsoft. I componenti costituenti l’SDK sono mostrati nella seguente figura Figura 31. Componenti dell'SDK di Microsoft. ovvero: 1. Hardware L’hardware comprende i sensori visti in precedenza è l’hub USB che permette il loro collegamento al pc. 2. Microsoft Kinect drivers I driver di Windows 7 hanno le seguenti funzionalità: · Permettono l’accesso all’array di microfoni con le API Audio standard di Windows. · Forniscono gli stream della video camera e dei sensori di profondità. · Forniscono la possibilità di utilizzare più device contemporaneamente. Autore: Maggio Luigi – E-­‐mail: [email protected] 22 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect 3. NUI API Un insieme di API che permettono di recuperare i dati dai sensori di immagine e di controllare il device stesso (ad esempio brandeggiare il dispositivo). 4. KinectAudio DMO Estende le funzionalità dell’array di microfoni supportato in Windows 7 per fornire le funzionalità di Beamforming (mappatura sonora dell’area) e localizzazione della sorgente sonora. 5. Windows 7 standard APIs Le API audio, speech e media presenti in Windows 7 e Microsoft Speech. Le applicazioni fornite da Microsoft invece sfruttano le librerie grafiche DirectX, utilizzabili esclusivamente in sistemi operativi Windows, il che limita alquanto la portabilità delle applicazioni prodotte. I driver non ufficiali sono basati sul framework OpenNI (Open Natural Interaction) sviluppato da Primesense in collaborazione con altre società e distribuito sotto la GNU Lesser General Public License (LGPL), ovvero tutto il codice sorgente è distribuito gratuitamente e disponibile al pubblico. OpenNI è un framework, multi-­‐linguaggio e cross-­‐platform, che definisce le API per la scrittura di applicazioni che utilizzano la Natural Interaction (NI), intesa come l’interazione tra uomo e macchina basata sui sensi umani, soprattutto udito e visione. Le API messe a disposizione sono costituite da un insieme di interfacce per la scrittura di applicazioni di NI. Lo scopo principale di OpenNI è infatti quello di formare una API standard che consente la comunicazione con: § Sensori acustici e visivi. § Middleware atto alla percezione audio e video (i componenti software che analizzano i dati audio e video registrati dalla scena e li elaborano). Rompendo la dipendenza tra i sensori e il middleware, le API di OpenNI consentono alle applicazioni di essere altamente portabili (funzionanti su diversi moduli middleware, da cui il moto “write once, deploy everywhere”), agli sviluppatori di middleware di scrivere algoritmi su formati di dati grezzi indipendenti dalle caratteristiche del particolare sensore utilizzato, nonché ai produttori dei sensori di costruire dispositivi potenzialmente compatibili con ogni applicazione basata su OpenNI. L'API standard di OpenNI consente a sviluppatori di applicazioni di interazione naturale di tenere traccia delle scene di vita reale (3D) utilizzando i tipi di dati sono calcolati dall'ingresso di un sensore (ad esempio, la rappresentazione di un corpo pieno, rappresentazione di una posizione di mano, una matrice di pixel in una mappa di profondità e così via). Le applicazioni possono essere scritte indipendentemente dal provider di sensore o middleware. OpenNI è dunque un livello di astrazione che consente di nascondere ai livelli superiori (nonché ai moduli interni) la complessità tecnologica dei singoli sensori, di modo che non è strettamente legato a Kinect, bensì si pone come una soluzione software adatta ad essere utilizzata con qualunque tipo di tecnologia con un grado qualunque di complessità. Inerentemente agli argomenti trattati in questa tesina, OpenNI non si limita a permettere di muovere il Kinect e catturare le immagini, bensì è corredato anche di un middleware di motion tracking chiamato NITE (sviluppato anch’esso da PrimeSense), per il riconoscimento delle mani e del corpo della persona. La combinazione OpenNI-­‐NITE si basa sull’utilizzo delle librerie OpenGL per visualizzare lo scheletro dell’utente. Il tracciamento dello scheletro avviene tramite una posizione “chiave”, ovvero l’utente deve rimanere in posizione eretta, allargare le braccia e posizionare gli avambracci con un angolo di novanta gradi circa rispetto alle braccia. Autore: Maggio Luigi – E-­‐mail: [email protected] 23 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect In figura32 è visualizzato uno schema del contesto in cui si colloca OpenNI suddiviso nei vari layer che lo compongono: § Layer superiore: rappresenta il software che implementa le applicazioni di interazione naturale basate su OpenNI. § Layer medio: rappresenta le interfacce di comunicazione fornite da OpenNI per l’interazione con i sensori e i componenti di middleware che analizzano i dati catturati dal sensore. § Layer inferiore: mostra i dispositivi hardware che catturano i dati audio e video della scena. Figura 32. Contesto applicativo del framework OpenNI. Come mostrato in figura, l'API consente di registrare più componenti middleware in maniera simultanea. Questi componenti sono indicati come moduli e vengono utilizzati per produrre ed elaborare i dati sensoriali. I moduli attualmente supportati sono i seguenti: Moduli sensore § Sensore 3D § Fotocamera RGB § Telecamera IR § Dispositivo audio (un microfono o una matrice di microfoni) Componenti middleware § Full body analysis middleware: componente software che elabora i dati sensoriali e genera le informazioni relative al corpo. Tipicamente viene prodotta una struttura dati che descrive articolazioni, orientamento, centro di massa etc. § Hand point analysis middleware: componente software che elabora i dati sensoriali e genera la posizione di un punto di mano. § Gesture detection middleware: componente software il cui scopo è identificare i gesti predefiniti (ad esempio il movimento di una mano) e avvisare l'applicazione. Autore: Maggio Luigi – E-­‐mail: [email protected] 24 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect § Scene Analyzer middleware: componente software che analizza l'immagine della scena al fine di produrre informazioni quali la separazione tra il primo piano della scena e lo sfondo, le coordinate del piano e l'identificazione individuale delle figure presenti all’interno della scena. Figura 33. Esempio di possibile configurazione. Dati 3D "Significativi" sono definiti come dati mediante i quali è possibile comprendere e tradurre la scena, motivo per cui la loro creazione è un compito complesso. In genere questo avviene utilizzando un sensore che, osservando la scena, produce in output una forma di dati grezzi. Spesso questi dati sono una mappa di profondità, dove in ogni pixel è rappresentata dalla sua distanza dal sensore. Middleware dedicato viene quindi utilizzato per elaborare questo output grezzo e produrre un output di livello superiore, che può essere compreso e utilizzato dall'applicazione. OpenNI definisce nodi di produzione, un insieme di componenti che hanno un ruolo produttivo nel processo di creazione dei dati richiesti per le applicazioni di NI. Ogni nodo di produzione incapsula la funzionalità che si riferisce alla generazione di un tipo di dati specifico. Quindi i nodi di produzione sono gli elementi fondamentali dell'interfaccia OpenNI fornita per le applicazioni. Tuttavia è importante sottolineare che la logica per la generazione dei dati non è implementata all’interno dell’API bensì deve essere implementata dai moduli che si collegano ad OpenNI. In linea di principio quindi, ogni nodo di produzione è un'unità autonoma che genera un tipo specifico di dati da fornire ad un qualsiasi oggetto, che si tratti di un altro nodo di produzione o dell'applicazione stessa. Per capire bene il concetto di nodi di produzione e delle dipendenze che possono instaurarsi tra di essi possiamo considerare il seguente esempio: l'applicazione vuole tracciare il movimento di una figura umana in una scena 3D. Ciò richiede un nodo di produzione che fornisce dati del corpo per l'applicazione o, in altre parole, un generatore di utente. Il generatore di utente ottiene i dati da un generatore di profondità. Un generatore di profondità è un nodo di produzione che viene implementato da un sensore, che prende i dati sensoriali grezzi da un sensore di profondità (ad esempio, un flusso di x fotogrammi al secondo) e restituisce una mappa di profondità. Ogni nodo di produzione in OpenNI ha un tipo e in particolare appartiene a una delle seguenti categorie: Sensor-­‐Related Production Nodes e Middleware-­‐Related Production Nodes. Di seguito una lista dei principali nodi di produzione: Autore: Maggio Luigi – E-­‐mail: [email protected] 25 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect Sensor-­‐Related Production Nodes § Device: nodo che rappresenta un dispositivo fisico (ad esempio, un sensore di profondità o una camera RGB). § Depth generator: nodo che genera una mappa di profondità. § Image generator: Un nodo che genera mappe di immagini colorate. § IR generator: Un nodo che genera IR-­‐mappe immagine. § Audio generator: Un nodo che genera un flusso audio. Middleware-­‐Related Production Nodes § Gestures Alert Generator: genera chiamate all'applicazione quando vengono identificati gesti specifici da parte dell’utente. § Scene analyzer: Analizza una scena in termini separazione del primo piano dallo sfondo, identificazione di eventuali figure presenti e rilevazione del piano piano. § Uscita principale dell'analizzatore di scena è una mappa di profondità con etichetta, in cui ogni pixel contiene un'etichetta indicante se rappresenta una figura, o è parte dello sfondo. § Hand Point Generator: nodo che genera callback che forniscono avvisi quando un punto di mano viene rilevato, e quando un punto di mano attualmente rilevato cambia la sua posizione. § User generator: Genera una rappresentazione di un corpo (completa o parziale) nella scena 3D. questi nodi di produzione possono essere combinati in lunghe sequenze con dipendenze di input-­‐output dette catene di produzione. Per una spiegazione più dettagliata sull’architettura del framework OpenNI , nonché per la lista completa delle classi e dei metodi implementati, è possibile consultare la Programmer guide disponibile sul sito ufficiale del progetto, www.openni.org. Autore: Maggio Luigi – E-­‐mail: [email protected] 26 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect SEZIONE 6: IL FUTURO DI KINECT Il successo di Kinect non è di certo solo dovuto alla nuova giocabilità introdotta dall'hardware e dai titoli usciti per Xbox, ma anche dai continui hack che migliaia di programmatori nel mondo stanno mettendo a punto, offrendo così applicazioni a volte più utili, a volte più simpatiche dell'accessorio targato Microsoft. Asus ha confermato di aver stretto un accordo con PrimeSense, l'azienda che ha collaborato con Microsoft per la progettazione e la realizzazione di Kinect, affinchè venga creato un dispositivo simile anche per i computer. Le poche notizie che si hanno a proposito affermano che la nuova periferica si chiamerà WAVI Xtion e potrà essere connessa al pc attraverso un trasmettitore wireless, per permettere all'utente di controllare con i gesti la musica, i film in riproduzione, i giochi e tante altre applicazioni, compresa forse anche la navigazione in Internet. Asus pensa di sviluppare delle applicazioni proprietarie che funzionino solamente con il dispositivo, creando così un market apposito: se così fosse, si potrebbe passare direttamente dal mouse alla "mano in aria", per cliccare ad esempio sui link ipertestuali o per scorrere le pagine di un documento, saltando direttamente la generazione dei touch screen sui pc casalinghi. Mentre le aziende e gli sviluppatori “casalinghi” di tutto il mondo cercano di utilizzare nelle maniere più disparate la tecnologia di Kinect, Microsoft già guarda avanti lavorando ad un’evoluzione dell’interfaccia uomo-­‐computer, basata sull’attuale EMG o meglio nota come elettromiografia, la registrazione dell’attività elettrica dei muscoli. Figura 34. Schizzi dei sensori utilizzati per il progetto EMG. Il progetto Wearable Electromyography-­‐Based (EMG) Controller (controller indossabile basato sull’elettromiografia), è già sotto brevetto, come si può notare dalla pagina WIPO, ed ha come obiettio la produzione di un dispositivo con il quale in futuro l’uomo possa interagire con i sistemi informatici, attraverso i segnali elettrici generati dai movimenti dei differenti muscoli del corpo. Una nuova interfaccia, quindi, che potrebbe nel giro di qualche decennio superare le tastiere, i mouse, i touchscreen ed i controlli vocali, rendendoli vetusti e poco comodi da usare. Ma come funziona esattamente questa nuova interfaccia? Autore: Maggio Luigi – E-­‐mail: [email protected] 27 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect L’elettromiografia, in ambito medico, serve per registrare i segnali elettrici emessi dai muscoli durante il movimento e può essere eseguita o in modo invasivo, utilizzando degli aghi inseriti nelle fibre muscolari, oppure in modo non invasivo, servendosi di appositi elettrodi posizionati sulla superficie di particolari punti del corpo. Il primo metodo è sfortunatamente il più efficace, in quanto gli elettrodi esterni misurano variazioni di segnali elettrici non direttamente correlabili all’attività del muscolo, poiché quello stesso segnale deve passare attraverso il grasso corporeo e attraverso la pelle prima di giungere al sensore. Si potrebbe dunque pensare che in Microsoft siano diventati sadici ed abbiano deciso di infilare degli aghi nei muscoli delle persone, per permettere loro di comunicare con il pc. In realtà, BigM ricorre agli elettrodi di superficie, utilizzando però un piccolo trucco, che permette di superare i limiti di cui sopra: infatti, i ricercatori di Redmond ricorrono ad un numero di sensori molto più elevato di quelli normalmente necessari per misurare l’attività elettrica dei muscoli. In questo modo ottengono diversi segnali per uno stesso muscolo e successivamente, attraverso un processo automatico di localizzazione, si individua un sottogruppo di elettrodi dalla quale raccogliere i segnali più attendibili, per correlarli a particolari gesti o movimenti dell’utente. Così, si ottimizza l’affidabilità dell’apparecchiatura, migliorando la risposta dell’interfaccia agli input elettrici muscolari. Questi elettrodi possono essere poi anche integrati negli abiti oppure negli accessori di moda, come orologi od occhiali, che indossati permetterebbero di controllare ogni dispositivo elettronico compatibile. Figura 35. Controllo di dispositivi wireless mediante sensori EMG. Inoltre, l’interazione sarebbe a doppio senso: infatti, se tramite i segnali elettrici, gli utenti possono controllare i propri gadget, allo stesso modo attraverso una stimolazione elettrica proveniente da questi stessi gadget sarebbe possibile, ad esempio, insegnare all’utente a suonare uno strumento oppure a compiere particolari gesti per uno sport. Che altro dire?!? Benvenuti nel futuro!!! Autore: Maggio Luigi – E-­‐mail: [email protected] 28 Tesina di Realtà Virtuale – Il dispositivo Microsoft Kinect REFERENCE • • • Jamie Shotton, Andrew Fitzgibbon, Mat Cook, Toby Sharp, Mark Finocchio, Richard Moore, Alex Kipman, and Andrew Blake, Real-­‐Time Human Pose Recognition in Parts from a Single Depth Image, in CVPR, IEEE, June 2011 Jamie Shotton, Andrew Fitzgibbon, Mat Cook, Toby Sharp, Mark Finocchio, Richard Moore, Alex Kipman, Andrew Blake, Real-­‐Time Human Pose Recognition in Parts from Single Depth Images: Supplementary Material, Microsoft Research Cambridge & Xbox Incubation Vincent Lepetit, Pascal Lagger, Pascal Fua, Randomized Trees for Real-­‐Time Keypoint Recognition, Computer Vision Laboratory, Polytechnique Federale de Lausanne (EPFL) Microsoft Corp. Redmond WA. Kinect for Xbox 360. • Web resources: • http://it.wikipedia.org/wiki/Microsoft_Kinect • http://www.ifixit.com/Teardown/Microsoft-­‐Kinect-­‐Teardown/4066/3 • http://www.openni.org • http://www.primesense.com • http://openni.org/Documentation/ProgrammerGuide.html CONTATTI Per informazioni o segnalazione di eventuali errori nei contenuti (in modo che provveda a correggerli) potete contattarmi all’indirizzo e-­‐mail [email protected] . Autore: Maggio Luigi – E-­‐mail: [email protected] 29