& Presentano: BUILD live – Torino Introduzione a Microsoft Kinect Gianni Rosa Gallina [email protected] http://embeddedlounge.blogspot.com Marina Sabetta [email protected] Agenda Cos’è Microsoft Kinect? Cosa si può fare con Kinect? L’hardware La tecnologia • Video • Body tracking • Audio Microsoft Kinect SDK • Architettura • Come si usa 2 / 21 Cos’è Microsoft Kinect? 3 / 21 • E’ un dispositivo embedded, costituito da: • un insieme di sensori audio/video: Videocamera RGB Sensori di profondità 3D Microfoni • software proprietario per: Computer Vision Tracciatura del corpo Riconoscimento facciale Riconoscimento vocale • Pensato per la console Microsoft Xbox 360, in modo da permettere una modalità di gioco senza controller e coinvolgente • Ha fatto la sua prima apparizione ufficiale nel 2009, prima era noto con il nome in codice Project Natal. Cosa si può fare con Kinect? Fonte: http://kinect.dashhacks.com 4 / 21 L’hardware SENSORI PROFONDITA’ 3D VIDEOCAMERA RGB MICROFONI MOTORINO INCLINAZIONE 5 / 21 L’hardware http://www.ifixit.com/Teardown/Microsoft-Kinect-Teardown/4066 6 / 21 Cavo USB e alimentazione 7 / 21 Il motorino di inclinazione richiede più corrente di quanta le sole porte USB possano fornire Si ha un connettore proprietario che combina USB standard e maggiore potenza di alimentazione La versione di Kinect acquistabile standalone fornisce questo alimentatore esterno, che è NECESSARIO per poterla collegare anche ad un PC di sviluppo. La tecnologia 8 / 21 • Frutto di decenni di ricerche accademiche, dell’industria, di Microsoft Research e del gruppo Xbox nel campo della Computer Vision • Basata sulle soluzioni tecnologiche dell’israeliana PrimeSense I problemi che Kinect risolve: Trova una o più persone in una scena, ignorando lo sfondo Riconosce gli arti e i giunti, associandoli alla persona corretta Trova e traccia i gesti delle persone Mappa i gesti su significati e comandi Inoltre: Riconosce le facce Riconosce la voce (Permette anche di giocare!) La tecnologia 9 / 21 La tecnologia Machine Learning Valuta miliardi di possibili posture del corpo umano sulla base di 32 segmenti connessi (scheletro) • Ogni fotogramma • A 30 fotogrammi al secondo • Consumando meno del 10% di CPU Sembra magia ma… è Computer Vision + Data Analysis + Intelligenza Artificiale 10 / 21 La tecnologia Algoritmo di visione Real-Time Human Pose Recognition in Parts from a Single Depth Image Jamie Shotton, Andrew Fitzgibbon, Mat Cook, Toby Sharp, Mark Finocchio, Richard Moore, Alex Kipman, Andrew Blake http://research.microsoft.com/apps/pubs/default.aspx?id=145347 11 / 21 La tecnologia Non dimentichiamo l’audio! I problemi che Kinect risolve: Isola la voce dal rumore di fondo Riduce/elimina riverberi ed echi dovuti all’ambiente circostante Rileva direzionalmente la sorgente audio Riconosce il parlato Sembra magia ma… è Batteria di microfoni + DSP + Data Analysis + Intelligenza Artificiale 12 / 21 La tecnologia Algoritmi audio • Presentazione al MIX 2011 di Ivan Tashev http://channel9.msdn.com/events/MIX/MIX11/RES01 • E’ l’architect della maggior parte del processing audio di Kinect • Ha introdotto notevoli avanzamenti nel campo del processing audio in real-time e attualmente sta lavorando al problema dell’identificazione del parlatore 13 / 21 14 / 21 Windows Kinect SDK • Microsoft Research ha rilasciato una versione beta del Kinect SDK per Windows il 16 giugno: http://research.microsoft.com/kinectsdk • L’SDK installa: i driver per i sensori Kinect API di programmazione C++ e .NET (C# / VB.NET) documentazione applicativi di esempio + codice sorgente • Attenzione! SOLO Windows 7 (x86 / x64), NON in macchina virtuale • Per poter usare le librerie Kinect su una macchina NON di sviluppo, occorre comunque installare l’SDK e tutte le sue dipendenze • In questo momento l’SDK si può utilizzare solo per scopi personali o di ricerca. NON si possono realizzare prodotti commerciali. 15 / 21 Architettura 16 / 21 I sensori di Kinect inviano al sistema tre flussi di dati: • Flusso video Può essere visualizzato come una normale webcam. Sono disponibili due risoluzioni: 640x480 @ 30fps e 1280x1024 @ 15fps • Flusso di profondità E’ una matrice di interi i cui valori indicano la profondità spaziale (in mm) di ogni pixel di un flusso video a 320x240. Può essere interpretato come video B/N oppure, con qualche elaborazione aggiuntiva, si può rendere colorato • Flusso audio E’ l’audio proveniente dalla batteria di microfoni, combinato in un unico flusso di dati Tracciatura del corpo Quando Kinect sta tracciando una persona, vengono frequentemente forniti allo sviluppatore informazioni sullo scheletro riconosciuto. Lo scheletro consiste nei seguenti 20 punti chiave, i giunti: 17 / 21 Come si usa? 18 / 21 • Per usare le librerie Kinect in un’applicazione .NET, è necessario includere solo una reference alla DLL Microsoft.Research.Kinect.dll • Sono disponibili due namespace: Microsoft.Research.Kinect.Nui per accedere ai flussi video, profondità e body tracking Microsoft.Research.Kinect.Audio per accedere ai dati audio • Prima di poter utilizzare la libreria NUI, bisogna instanziare un oggetto della classe Runtime, specificando i flussi a cui si vuole accedere • Successivamente, bisogna aprire i flussi audio/video prima di poterli utilizzare nel proprio applicativo, specificandone tipologia, risoluzione e altri parametri specifici di ogni flusso Come si usa? 19 / 21 La libreria NUI funziona ad eventi: ogni qualvolta i sensori hanno dei dati disponibili, vengono notificati degli eventi a cui bisogna registrarsi per poter ricevere ed utilizzare le informazioni: DepthFrameReady Rende disponibile la matrice dei dati di profondità acquisiti dai sensori IR SkeletonFrameReady Rende disponibili i dati dei giunti di uno o due corpi completamente tracciati. I dati sui giunti possono essere validi o meno, è necessario verificarne lo stato prima di utilizzarli in elaborazioni successive. VideoFrameReady Rende disponibile il fotogramma acquisito dalla webcam Come si usa? 20 / 21 Per gestire l’audio, invece, è sufficiente instanziare un oggetto di tipo KinectAudioSource: Con questo oggetto si possono avere: • i dati audio veri e propri (16KHz, 16bit PCM) – da un singolo microfono o dalla battaria completa – con opzionale cancellazione del rumore e dell’eco (AEC) • informazioni sulla direzione della sorgente (beamforming) – se attivato, i dati vengono recuperati registrandosi all’evento BeamChanged – l’informazione è espressa in gradi radianti: 0 nella posizione frontale rispetto al sensore Kinect; <0 a sinistra, >0 a destra. – È disponibile, come per i giunti, un parametro per stabilire la qualità dell’informazione • integrazione con le Speech API di Windows per fare riconoscimento vocale Risorse aggiuntive Coding For Fun – http://c4fkinect.codeplex.com/ Kinect David Catuhe) http://blogs.msdn.com/b/eternalcoding/archive/2011/07/04/gestures-and-tools-for-kinect.aspx Alimentatore per Kinect (Microsoft Store) http://www.microsoftstore.com/store/msstore/en_US/buy/pageType.product/externalRefID.9A4CFC08 Kinect http://kinectcontrib.codeplex.com/ http://www.microsoft.com/download/en/details.aspx?displaylang=en&CTT=1&id=3971 Video, esempi, training (Channel9) http://channel9.msdn.com/coding4fun/kinect/ http://channel9.msdn.com/Series/KinectSDKQuickstarts Blog di Gianni Rosa Gallina http://embeddedlounge.blogspot.com 21 / 21 DEMO Domande & Risposte Gianni Rosa Gallina [email protected] http://embeddedlounge.blogspot.com Marina Sabetta [email protected]