Tutti voi conoscete Kinect. Commercializzato poco più di un anno fa (ha compiuto l’anno il 4 Novembre), il dispositivo della Microsoft è stato quasi subito utilizzato per compiti che non erano nella mente della casa madre (ne siamo sicuri? lo vediamo tra poco) con driver che spuntavano come funghi e i primi esperimenti da parte degli hacker, prontamente condannati dalla stessa Microsoft.
Nell’estate però è finalmente arrivata l’apertura della Microsoft che, dopo un cambio di prospettiva, ha rilasciato la prima beta del Software Development Kit (SDK per gli amici) [url=http://kinectforwindows.org]Kinect for Windows[/url], nominata tra le 10 idee più innovative dell’anno dalla [url=http://www.popularmechanics.com/technology/gadgets/reviews/the-10-most-innovative-tech-products-of-2011#fbIndex2]Popular Mechanics[/url]. Il giorno del compleanno è uscita la seconda beta ed è programmato il rilascio ufficiale all’inizio del 2012 con l’avvento dell’SDK 1.0 definitivo e del supporto commerciale. Ad ora il team di sviluppo sta lavorando direttamente con le case software per migliorare il supporto e all’uscita ufficiale verranno rese disponibili 200 (DUECENTO) applicazioni che sfrutteranno il device. E’ altresì attesa l’uscita del Kinect in una versione migliorata appositamente per i PC.
[title]Kinect for Windows @ DISI[/title]
Tutte queste informazioni derivano da un seminario svoltosi al [url=http://www.disi.unige.it/]Dipartimento di Informatica e Scienze dell’Informazione[/url] (per gli amici DISI) dell’Università di Genova, tenuto dal Dottor Mauro Giusti, Senior Program Manager del team di sviluppo dell’SDK a Redmond ed ex studente del dipartimento -quando pensate che l’università italiana non serve, beh, qualche esempio lo troviamo sempre per smentire-.
Il seminario si è svolto in tre parti: una presentazione di Kinect e dei suoi utilizzi come [url=http://en.wikipedia.org/wiki/Natural_user_interface]Natural User Interface[/url], una sessione di coding di una semplice applicazione dimostrativa della camera, del sensore di profondità e dello speech recognition, e infine un Q&A.
In questo articolo mi concentro di più sul contenuto informativo, la parte più tecnica centrale la affronto in un altro articolo appena ho le diapositive e il codice a disposizione. Ho il contatto dello speaker che si è anche offerto di rispondere alle domande che seguiranno agli articoli.
Il Kinect è nato come un sistema di gioco che elimini la barriera tra giocatore e videogioco, anche se -e qui inserisco la risposta alla domanda che ho posto alla fine- all’interno dell’azienda si era prospettato fin dall’inizio il possibile utilizzo come NUI: una volta che si sono accorti che la loro visione trovava seguito anche tra gli utilizzatori (e qui bisogna anche dar merito a chi ha sperimentato ‘illegamente’ ed ha attratto l’attenzione) hanno accelerato i piani di sviluppo per rilasciare finalmente la visione completa.
Detentore del Guinness World Record come [url=http://community.guinnessworldrecords.com/_Kinect-Confirmed-As-Fastest-Selling-Consumer-Electronics-Device/blog/3376939/7691.html]fastest selling consumer electronics device[/url] (vendendo 8 milioni di unità in 60 giorni, più dell’iPhone, iPad e compagnia cantante), l’unità è stata vista come device a basso costo che potesse sostituire strumenti simili ma molto più costosi in campi come la robotica. L’SDK è stato realizzato anche con queste visioni in mente, permettendo di utilizzare in ambiente Windows C++, C# e Visual Basic.
Una possibile applicazione già sperimentata al [url=http://sunnybrook.ca/]Sunnybrook Hospital[/url] è l’utilizzo del Kinect come aiuto in sala operatoria: i chirurghi quando devono consultare una lastra o utilizzare ad esempio un computer devono togliersi i guanti e poi ripetere la procedura di sterilizzazione, mentre col Kinect possono evitare tutto questo, navigando tra i documenti semplicemente con le mani.
In campo medico, un’altra applicazione è [url=http://www.youtube.com/watch?v=wTselBnHPhA]Kinecthesia[/url], una cintura che permette ad un cieco di muoversi autonomamente poichè identifica ostacoli sul cammino del soggetto inviando vibrazioni localizzate in tre zone che vengono interpretate come indicazioni sugli ostacoli e la loro distanza.
Gli altri video mostrati riguardavano degli [url=http://www.youtube.com/watch?v=UAlcTnvbBS0]studi di utilizzo[/url] di sensore e l’HoloDesk, un progetto della divisione Research che permette di manipolare oggetti grafici tridimensionali usando le mani, rendendo più semplice la manipolazione e l’interpretazione dei dati.
[title]Un po’ di tecnica[/title]
Dopo i video siamo passati a vedere un po’ di informazioni tecniche su Kinect e l’SDK.
L’aggeggio ha tre camere (una RGB che viene usata per il tracking e due ad infrarossi, una emettitrice e una ricevitrice, che vengono usate per la profondità), un array di 4 microfoni (che danno una direzione al suono) e un motore che muove il Kinect sull’asse verticale. Ne risulta in output video una immagine 640×480 con una informazione aggiuntiva sulla profondità.
Quindi l’SDK va ad offrire diversi servizi (e qui ci vorrebbe lo schema che c’era nella presentazione, vabbè):
-le api per i tre linguaggi;
-il flusso delle due camere (rgb e infrarossa) e dell’audio a 4 canali
-la rappresentazione scheletrica (skeletal) della persona
-gestione avanzata dell’audio: rimozione del rumore e speech recognition
-supporto a multipli kinect: adesso al massimo due, in futuro di più (c’è da risolvere la questione delle interferenze, ad esempio mettendone due incidenti a 60° iniziano a disturbarsi tra loro i sensori infrarossi)
In totale vengono tracciati due player interamente più quattro oggetti proposti (che possono venir tracciati interamente intervenendo sul codice).
La prima demo (skeletal viewer) mostra a 30fps la rappresentazione scheletrica del player (ottenuta a livello software, non hardware), l’output VGA e di profondità. Qui si scopre che (al momento) i risultati sono affidabili solo in un range fra 1,5 e 4 metri (anche se alcune librerie esterne permettono di migliorare la situazione sugli oggetti più vicini con correzioni).
La seconda demo (sound source localization) riguarda le sorgenti sonore, è un semplice programma con una grammatica di base che riconosce solo ‘red’, ‘green’, ‘blue’ e cambia il colore di una porzione del form in base alla parola che sente.
Esempio sulla combinazione della localizzazione sonora e della rappresentazione scheletrica: il marito sta giocando col Kinect, la moglie sta passando lì vicino l’aspirapolvere, con la rappresentazione skeletal il device va a vedere che chi fa rumore è l’aspirapolvere e quindi si concentra sui rumori provenienti dal giocatore.
La terza demo (kinect shape game) [che ha fatto impallare il pc] è un semplice gioco in cui ci sono delle forme che cadono dall’alto e il giocatore le colpisce con le mani, con la voce si possono cambiare le forme (esempio: blue circles fa cadere cerchi blu).
Moar particolari tecnici: la camera RGB fornisce output a 640×480@30fps, con 32 bit in modalità rgb e 16 bit in yuv; la depth camera sempre 640×480@30fps e in più ha il player index (ognuno viene colorato diversamente); il tracking scheletrico gestisce 20 punti a 30 fps e fino a 2 scheletri; l’audio è PCM 16 bit a 16kHz.
Sullo speech recognition (che non è ancora una scienza esatta), lo speaker dice che Apple spaccia Siri come una novità, quando Microsoft aveva già inserito questa funzione sia nel Windows Phone sia nel Kinect (solo in inglese). Sull’Xbox c’è una interfaccia a comandi che permette di riconoscere i comandi anche mentre c’è un film che viene riprodotto dall’Xbox stessa: in pratica, conoscendo l’audio riprodotto, questo viene cancellato da quello che sente tranite acoustic cancellation, permettendo di riconoscere i comandi anche da distanza. La funzione di acoustic cancellaton sarà disponibile anche su computer, ma solo su un canale mono, mentre su Xbox viene gestito per 5.1 canali.
[title]Le domande rimanenti[/title]
– Una domanda (mia) riguarda la possibilità di utilizzare l’SDK Kinect con [url=http://it.wikipedia.org/wiki/Microsoft_XNA]XNA[/url]: la risposta rimanda ai forum (come [url=http://forums.create.msdn.com/forums/t/85214.aspx]qua[/url]) perchè è consigliato non usarlo direttamente nel thread principale del gioco.
– Augmented reality, è nei piani? Non è supportato direttamente, ma lo sviluppatore può crearne una tramite le informazioni in 3 dimensioni già disponibili.
-Riconoscimento di gesture: non è ancora implementato, esiste una libreria open source che lo fa (forse [url=http://rymixxx.wordpress.com/2011/07/30/kinectdtw-kinect-gesture-recognition-open-source-project-ready-for-download/]questa[/url], ma è una cosa sulla quale progettano di lavorare a breve, perchè in sostanza l’SDK di Windows dovrebbe replicare quello che fa l’SDK di Xbox.
-Openkinect: il framework open source dà alcune funzionalità in più che non sono disponibili in quello ufficiale, ma quest’ultimo ha vantaggi anch’esso come la stabilità (riesce a mantenere 30 fps fissi) e il riconoscimento immediato del giocatore (in quello non ufficiale bisogna assumere una posizione stabilita all’inizio).
-Kinect e gli ambienti: il device dà informazioni instabili quando è utilizzato all’aperto in piena luce, in casa anche se c’è una finestra aperta non subisce grossi problemi, che possono invece derivare ad esempio da specchi (riconoscerebbe un altro giocatore nel riflesso probabilmente). Una applicazione deve essere contestualizzata nei parametri secondo il suo utilizzo (agendo ad esempio sull’incertezza nello speech recognition quando si ha a che fare coi bambini).
-Lo skeleton e le posizioni: lo scheletro è costruito attribuendo delle probabilità o gradi di confidenza alle posizioni dei vari joint (i centri di massa) e viene ricostruito tramiti dei metodi di decisione (ad esempio considerando l’improbabilità che un piede sia vicino ad una spalla quando sei in piedi). Viene utilizzato il riconoscimento sia sul frame attuale sia sulla storia dei frame precedenti.
-Che tecniche di sviluppo usano alla Microsoft? I gruppi più moderni usano la tecnica [url=http://it.wikipedia.org/wiki/Scrum]Scrum[/url], si dividono in piccoli gruppi con compiti limitati e ogni 4-6 settimane integrano; i team più vecchi (tipo Office) usano il [url=http://it.wikipedia.org/wiki/Modello_a_cascata]modello a cascata[/url].
-Come viene risolta la situazione in cui due giocatori sono vicini? Le rappresentazioni dei due giocatori non si contrastano, perchè posseggono informazioni aggiuntive che permettono di mandare a video indicazioni su come posizionarsi per il giocatore (esempio: Distanziatevi)
Se arriva il materiale e ne viene fuori qualcosa di decente, alla prossima puntata.
Nota finale: quelli di [url=http://punto-informatico.it/3344826/PI/News/kinect-evolve-pc.aspx]Punto Informatico[/url] ci hanno provato, ma il mio è un articolo meglio.