Kinect + .NET = NUI : Interfaccenaturali facili con Kinect!!!Massimo Bonannimassimo.bonanni@domusdotnet.orghttp://codetail...
Agenda• Natural User Interface• Introduzione al Kinect  – Cosa c’è dentro  – Architettura• Kinect SDK  –   Camera Data  – ...
Natural User InterfaceSi definisce NUI l’interfaccia di un sistema in cui gli utenti riescono adinteragire utilizando un a...
NUI : Evoluzione delle interfacce                                    4
NUI: Vantaggi• Rapido apprendimento delle funzionalità;• L’utente è in grado di diventare «esperto»  sull’interfaccia in m...
Kinect: Cosa c’è dentro                                                              Video Camera                         ...
Kinect: Cosa c’è dentro                          7
Kinect: Architettura hardware                                8
Kinect: Come funziona                                                             La nostraIl proiettore ad               ...
Kinect: Cosa serve• Kinect;• Cavo usb per  collegamento a pc;• Kinect SDK;• DirectX9;• .........tanta fantasia!!!         ...
Kinect: Requisiti minimi•   Sistema Operativo    – Windows 7 (x86 and x64)•   Hardware    –   Processore dual-core 2.66GHz...
Kinect: ArchitetturaL’SDK mette a disposizione una serie di strumenti e unalibreria di classi in grado di interagire con i...
Kinect: ArchitetturaI componenti dell’SDK sono i seguenti:                                                 Applications   ...
Kinect: Architettura•   Hardware    L’hardware comprende i sensori visti in precedenza è l’hub USB che permette    il loro...
Kinect: Architettura•   NUI API    Un insieme di API che permettono di recuperare i dati dai sensori di immagine    e di c...
Kinect: ArchitetturaIl device restituisce 3 stream:     – Video     – Depth     – Audio                                   ...
Kinect: XBox o Windows• Attualmente esistono due versioni di Kinect:   – Kinect for XBox   – Kinect for Windows• E’ possib...
Kinect : SDK•   L’SDK è scaricabile dall’indirizzo http://kinectforwindows.org•   Vengono installati contestualmente l’SDK...
Kinect: Default Mode vs Near ModeIl Kinect può gestire oggetti a differenti distanze in basealla modalità selezionata:   –...
Kinect: La classe KinectSensorLa classeKinectSensorpermette l’accessoalle funzionalità delKinect:                         ...
Kinect: La classe KinectSensorRecuperiamo l’istanza del KinectSensor a partire dallacollezione KinectSensors:             ...
Kinect: Camera DataLa classe KinectSensor mette a disposizione l’eventoColorFrameReady per la gestione dei frame video.   ...
Kinect: ColorImageFrameReadyEventArgs                                    23
Kinect: Camera DataPer utilizzare l’evento VideoFrameReady è necessario:    1.   Recuperare il device dalla collezione Kin...
Kinect: Camera Data•   Risoluzioni ammesse     – 640x480     – 1280x960•   Numero di bytes per pixel 2 o 4•   FPS     – 12...
26
Kinect: Depth DataLa classe KinectSensor mette a disposizione l’eventoDepthFrameReady per la gestione dei frame di profond...
Kinect: DepthImageFrameReadyEventArgs                                    28
Kinect: Depth DataPer utilizzare l’evento DepthFrameReady è necessario:    1.   Recuperare il device dalla collezione Kine...
Kinect: Depth Data• Risoluzioni ammesse   – 640x480 (30 fps)   – 320x240 (30 fps)   – 80x60 (30 fps)• Numero di bytes per ...
Kinect: Depth DataPer ogni punto (x,y), il valore di tipo Short (2 bytes) ottenuto dal Kinect ha laseguente struttura: ed ...
Kinect: Depth DataEsempio:                                32
Kinect: Depth DataPossiamo sapere se un punto si trova troppo vicino, troppo lontano o nellazona sconosciuta utilizzando t...
34
Kinect: Skeletal tracking• L’SDK permette di avere informazioni riguardo la posizione di alcuni  punti del corpo dei playe...
Kinect: Skeletal tracking                            36
Kinect: Skeletal TrackingPer utilizzare l’evento KeletonFrameReady è necessario:   1.   Recuperare il device dalla collezi...
Kinect: La classe SkeletonLa classe Skeleton contiene le informazionisugli «scheletri» dei player rilevati: – Al massimo d...
Kinect: Joints•   Ogni scheletro ha 20 oggetti Joint che tracciano la posizione del corpo del player;•   La posizione del ...
Kinect: Skeletal Tracking•   Il rilevamento dei sensori è affetto da errore (problemi costruttivi, luminosità    eccessiva...
Kinect: TransformSmoothParameters•   Smoothing : specifica lo smoothing da applicare. I valori sono compresi tra 0 e 1.   ...
Kinect: «Default Mode» vs «Near Mode»Il comportamento dello Skeletal Tracking varia in baseal fatto che ci si trovi in «De...
43
Kinect: AllFrameEventLa classe KinectSensor mette a disposizione un evento perottenere contemporaneamente tutti e tre i fr...
Kinect: AudioIl device dispone di unabatteria di 4 microfoni condelle funzionalità di “audioprocessing” hardware:•   Multi...
Kinect: KinectAudioSourceLa classe KinectSensor esponela proprietà AudioSource di tipoKinectAudioSource attraverso laquale...
Kinect : Sound PositionIl Kinect, permette di :•Conoscere l’angolo e la «confidence» della sorgente sonora (SoundSource An...
Kinect : Sound Source AnglePer gestire la variazione di angolo della sorgente sonora, èsufficiente gestire l’evento SoundS...
Kinect : Audio Streaming• La classe KinectAudioSource, grazie al metodo  Start(), consente di recuperare lo stream  dell’a...
Kinect: Speech RecognitionL’SDK del Kinect si integra perfettamente con loSpeech Platform SDK per implementare voicerecogn...
51
ConclusioniL’SDK è in continua evoluzione con continui rilasci.Ad ogni rilascio viene migliorata la stabilità dei driver,S...
Q&A (non sparate sul Kinect )                                 53
Best Kinect hackPremio : un Kinect XBox (Microsoft)                                      54
Riferimenti•   Kinect SDK Web Site        http://www.microsoft.com/en-us/kinectforwindows/•   Coding4Fun Kinect Toolkit   ...
Upcoming SlideShare
Loading in …5
×

Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!

1,744 views

Published on

Slide della sessione "Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!" tenuta al Codemotion 2012

Published in: Technology
  • Be the first to comment

Kinect + .NET = NUI : Interfacce naturali facili con Kinect!!!

  1. 1. Kinect + .NET = NUI : Interfaccenaturali facili con Kinect!!!Massimo Bonannimassimo.bonanni@domusdotnet.orghttp://codetailor.blogspot.com@massimobonanni
  2. 2. Agenda• Natural User Interface• Introduzione al Kinect – Cosa c’è dentro – Architettura• Kinect SDK – Camera Data – Depth data – Skeletal tracking – Audio• Q&A 2
  3. 3. Natural User InterfaceSi definisce NUI l’interfaccia di un sistema in cui gli utenti riescono adinteragire utilizando un approccio «naturale» cioè riescono ad utilizzarele funzionalità del sistema senza l’uso di dispositivi artificiali (comemouse, trackball o tastiera) Una NUI è rivolta ad utenti in grado di effettuare movimenti relativamente naturali, azioni e gesti che devono controllare l’applicazione del computer o manipolare contenuti sullo schermo. 3
  4. 4. NUI : Evoluzione delle interfacce 4
  5. 5. NUI: Vantaggi• Rapido apprendimento delle funzionalità;• L’utente è in grado di diventare «esperto» sull’interfaccia in minor tempo;• Può aiutare portatori di handicap nell’utilizzo del sistema. 5
  6. 6. Kinect: Cosa c’è dentro Video Camera RGB Sensori di profondità Batteria di 4 microfoni• Video Camera RGB (CMOS) Inclinazione Motorizzata• Sensori di profondità: proiettore IR + Camera IR (CMOS)• Inclinazione motorizzata (±27 gradi)• 4 Microfoni 6
  7. 7. Kinect: Cosa c’è dentro 7
  8. 8. Kinect: Architettura hardware 8
  9. 9. Kinect: Come funziona La nostraIl proiettore ad applicazioneinfrarossi illumina il utilizza le infosoggetto con dei dell’SDKpattern L’SDK è in grado di convertire lo stream della depth cam in dati utilizzabili La camera infrarossi misura la distanza con un approccio «a luce strutturata» 9
  10. 10. Kinect: Cosa serve• Kinect;• Cavo usb per collegamento a pc;• Kinect SDK;• DirectX9;• .........tanta fantasia!!! 10
  11. 11. Kinect: Requisiti minimi• Sistema Operativo – Windows 7 (x86 and x64)• Hardware – Processore dual-core 2.66GHz o superiore – 2Gb ram – Scheda grafica DiretcX9 o superiore – USB 2.0 dedicata – Kinect con cavo usb per collegamento al pc• Software – Visual Studio 2010 Express o superiori – .NET Framework 4.0 – Runtime DirectX 9 – Microsoft Speech Platform SDK v11 (solo per lo speech recognition) 11
  12. 12. Kinect: ArchitetturaL’SDK mette a disposizione una serie di strumenti e unalibreria di classi in grado di interagire con i sensori deldispositivo fornendo allo sviluppatore oggetti ed eventi. 12
  13. 13. Kinect: ArchitetturaI componenti dell’SDK sono i seguenti: Applications Video Components Audio Components Windows Core Audio 5 A/V capture and transcoding 3 NUI API and Speech APIs Media Foundation | DirectShow 4 DMO codec for mic array 2 Device Device Video stream control Audio stream control User Mode setup access WinUSB device stack WinUSB camera stack USBAudio audio stack Kernel Mode Kernel-mode drivers for Kinect for Windows USB Hub Hardware 1 Motor Cameras Audio mic array Kinect sensor Kinect for Windows User-created Windows SDK components components 13
  14. 14. Kinect: Architettura• Hardware L’hardware comprende i sensori visti in precedenza è l’hub USB che permette il loro collegamento al pc.• Microsoft Kinect drivers : a) Permettono l’accesso all’array di microfoni con le API Audio standard di Windows. b) Forniscono gli stream della video camera e dei sensori di profondità. c) Forniscono la possibilità di utilizzare più device contemporaneamente. 14
  15. 15. Kinect: Architettura• 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).• 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.• Windows 7 standard APIs Le API audio, speech e media presenti in Windows 7 e Microsoft Speech. 15
  16. 16. Kinect: ArchitetturaIl device restituisce 3 stream: – Video – Depth – Audio 16
  17. 17. Kinect: XBox o Windows• Attualmente esistono due versioni di Kinect: – Kinect for XBox – Kinect for Windows• E’ possibile utilizzare il Kinect for XBox per fare esperimenti con l’SDK per Windows• Si ottiene un errore se si utilizza il Kinect per XBox in produzione 17
  18. 18. Kinect : SDK• L’SDK è scaricabile dall’indirizzo http://kinectforwindows.org• Vengono installati contestualmente l’SDK (con il Kinect Sample Browser), i drivers, il Runtime (quello da distribuire con le applicazioni ) e lo Speech Recognition Language Pack. 18
  19. 19. Kinect: Default Mode vs Near ModeIl Kinect può gestire oggetti a differenti distanze in basealla modalità selezionata: – Default Mode: oggetti tra 80 cm e 4 metri; – Near Mode: oggetti tra 40 cm e 3 metri 19
  20. 20. Kinect: La classe KinectSensorLa classeKinectSensorpermette l’accessoalle funzionalità delKinect: 20
  21. 21. Kinect: La classe KinectSensorRecuperiamo l’istanza del KinectSensor a partire dallacollezione KinectSensors: Recupero il primo dei sensori disponibili Abilito lo stream video Avvio la ricezione 640x480 30 fps dei frame video 21
  22. 22. Kinect: Camera DataLa classe KinectSensor mette a disposizione l’eventoColorFrameReady per la gestione dei frame video. 22
  23. 23. Kinect: ColorImageFrameReadyEventArgs 23
  24. 24. Kinect: Camera DataPer utilizzare l’evento VideoFrameReady è necessario: 1. Recuperare il device dalla collezione KinectSensors della classe KinectSensor; 2. Abilitare lo stream video con la risoluzione/fps desiderato; 3. Sottoscriversi all’evento ColorFrameReady; 4. Avviare gli stream dell’istanza di KinectSensor.E’ anche possibile eseguire un polling direttamente sullo stream video. 24
  25. 25. Kinect: Camera Data• Risoluzioni ammesse – 640x480 – 1280x960• Numero di bytes per pixel 2 o 4• FPS – 12 – 15 – 30• Formato immagine: – RGB (pixel da 4 bytes: blu, verde, rosso e alfa) – YUV (pixel da 4 bytes: ciano, magenta, giallo e nero) – YUV-RAW (pixel da 2 bytes: ciano, magenta, giallo e nero, solo 640x480 15 fps) 25
  26. 26. 26
  27. 27. Kinect: Depth DataLa classe KinectSensor mette a disposizione l’eventoDepthFrameReady per la gestione dei frame di profondità: 27
  28. 28. Kinect: DepthImageFrameReadyEventArgs 28
  29. 29. Kinect: Depth DataPer utilizzare l’evento DepthFrameReady è necessario: 1. Recuperare il device dalla collezione KinectSensors della classe KinectSensor; 2. Abilitare lo stream depth con la risoluzione/fps desiderato; 3. Sottoscriversi all’evento DepthFrameReady; 4. Avviare gli stream dell’istanza di KinectSensor.E’ anche possibile eseguire polling direttamente sullo stream di profondità 29
  30. 30. Kinect: Depth Data• Risoluzioni ammesse – 640x480 (30 fps) – 320x240 (30 fps) – 80x60 (30 fps)• Numero di bytes per pixel 2• Contenuto immagine: – Distanza (in millimetri, tra 400mm e 4000mm in base alla modalità) – Player index (player index 1, 2 o 0 se non c’è un player) 30
  31. 31. Kinect: Depth DataPer ogni punto (x,y), il valore di tipo Short (2 bytes) ottenuto dal Kinect ha laseguente struttura: ed i valori di profondità e player index sono dati dalle formule 31
  32. 32. Kinect: Depth DataEsempio: 32
  33. 33. Kinect: Depth DataPossiamo sapere se un punto si trova troppo vicino, troppo lontano o nellazona sconosciuta utilizzando tre proprietà dello stream di profondità: KinectSensor.DepthStream.TooNearDepth KinectSensor.DepthStream.UnknownDepth KinectSensor.DepthStream.TooFarDepth 33
  34. 34. 34
  35. 35. Kinect: Skeletal tracking• L’SDK permette di avere informazioni riguardo la posizione di alcuni punti del corpo dei player rilevati.• L’algoritmo di skeletal tracking è basato sul «Machine Learning»• La classe KinectSensor mette a disposizione l’evento SkeletonFrameReady per la gestione dei frame di di skeletal tracking:E’ anche possibile eseguire polling sullo Skeleton Stream esposto dallaKinectSensor. 35
  36. 36. Kinect: Skeletal tracking 36
  37. 37. Kinect: Skeletal TrackingPer utilizzare l’evento KeletonFrameReady è necessario: 1. Recuperare il device dalla collezione KinectSensors della classe KinectSensor; 2. Abilitare lo stream Skeletal Tracking; 3. Sottoscriversi all’evento SkeletonFrameReady; 4. Avviare gli stream dell’istanza di KinectSensor. 37
  38. 38. Kinect: La classe SkeletonLa classe Skeleton contiene le informazionisugli «scheletri» dei player rilevati: – Al massimo due player contemporanei (più altri 4 con informazioni ridotte); – Ogni «scheletro» può essere Tracked o NotTracked; – Ogni scheletro prevede un array di 20 Joint ognuno con la propria posizione (x,y,z); – Ogni Joint può essere Tracked, NotTracked o Inferred (NotTracked è raro). 38
  39. 39. Kinect: Joints• Ogni scheletro ha 20 oggetti Joint che tracciano la posizione del corpo del player;• La posizione del joint nello spazio è contenuta nella proprietà Position (di tipo SkeletonPoint): – X: posizione x (compreso tra -1 e 1); – Y: posizione y (compreso tra -1 e 1); – Z: distanza dal device (in metri). 39
  40. 40. Kinect: Skeletal Tracking• Il rilevamento dei sensori è affetto da errore (problemi costruttivi, luminosità eccessiva dell’ambiente, rumore visivo e via discorrendo) e i dati restituiti hanno delle fluttuazioni che non sempre sono gradite nelle applicazioni.• Lo Skeleton Stream esposto dalla KinectSensor fornisce la possibilità di impostare dei filtri per eliminare il rumore: 40
  41. 41. Kinect: TransformSmoothParameters• Smoothing : specifica lo smoothing da applicare. I valori sono compresi tra 0 e 1. Più il valore si avvicia a 1 e più viene applicato il fattore di smoothing;• Correction : specifica la correzione da apportare ai dati. I valori sono compresi tra 0 e 1. Più piccolo il valore inserito e meno è la correzione sui dati grezzi;• Prediction : specifica il numero di frame previsti;• Jitter Radius : specifica il raggio di riduzione del jitter (in metri). Ogni jitter esterno al raggio è riportato nel raggio impostato;• MaximumDeviation Radius : specifica il raggio massimo (in metri) che i punti filtrati possono deviare rispetto ai dati grezziNon esistono dei valori «buoni» da utilizzare, è necessario eseguire delle prove per capire quali sono i più adatti per la specifica applicazione 41
  42. 42. Kinect: «Default Mode» vs «Near Mode»Il comportamento dello Skeletal Tracking varia in baseal fatto che ci si trovi in «Default Mode» o «Near Mode» Si tratta della proprietà Skeleton.Position valorizzata quando lo scheletro è completamente tracciato 42
  43. 43. 43
  44. 44. Kinect: AllFrameEventLa classe KinectSensor mette a disposizione un evento perottenere contemporaneamente tutti e tre i frame visti inprecedenza:L’FPS, in questo caso, è pari al più basso tra i differenti stream. 44
  45. 45. Kinect: AudioIl device dispone di unabatteria di 4 microfoni condelle funzionalità di “audioprocessing” hardware:• Multichannel echo cancellation (MEC)• Sound position tracking• Directional Microfone• Noise suppression e Noise reduction 45
  46. 46. Kinect: KinectAudioSourceLa classe KinectSensor esponela proprietà AudioSource di tipoKinectAudioSource attraverso laquale è possibile gestire tutte lefunzionalità audio. 46
  47. 47. Kinect : Sound PositionIl Kinect, permette di :•Conoscere l’angolo e la «confidence» della sorgente sonora (SoundSource Angle);•Impostare la direzionalità dei microfoni del sensore in modo da rilevarel’audio solo da una certa direzione (Beam Angle)In entrambi i casi l’intervallo di copertura è: -50 0 +50 47
  48. 48. Kinect : Sound Source AnglePer gestire la variazione di angolo della sorgente sonora, èsufficiente gestire l’evento SoundSourceAngleChanged dellaclasse KinectAudioSource: 48
  49. 49. Kinect : Audio Streaming• La classe KinectAudioSource, grazie al metodo Start(), consente di recuperare lo stream dell’audio proveniente dal sensore.• Lo stream può essere, ad esempio, registrato in tempo reale. 49
  50. 50. Kinect: Speech RecognitionL’SDK del Kinect si integra perfettamente con loSpeech Platform SDK per implementare voicerecognition.Il sensore altro non fa che supportare unoSpeechRecognizer utilizzabile dalloSpeechRecognitionEngine dello Speech Platform. 50
  51. 51. 51
  52. 52. ConclusioniL’SDK è in continua evoluzione con continui rilasci.Ad ogni rilascio viene migliorata la stabilità dei driver,Skeletal Tracking e precisione dei dati recuperati dalsensore di profondità.Attualmente abbiamo un SDK maturo per cominciare asviluppare nuove tipologie di applicazioni 52
  53. 53. Q&A (non sparate sul Kinect ) 53
  54. 54. Best Kinect hackPremio : un Kinect XBox (Microsoft) 54
  55. 55. Riferimenti• Kinect SDK Web Site http://www.microsoft.com/en-us/kinectforwindows/• Coding4Fun Kinect Toolkit http://c4fkinect.codeplex.com/• Kinect Toolbox http://kinecttoolbox.codeplex.com/• Channel 9 Kinect for Windows SDK Quickstarts http://channel9.msdn.com/Series/KinectQuickstart• Coding4Fun @ Channel 9 http://dev9.channel9.msdn.com/coding4fun/kinect 55

×