Kinect : just for fun ?<br />Roma, 13 Settembre 2011<br />Massimo Bonanni<br />Senior Developer @ THAOS s.r.l.<br />massim...
Agenda<br />Natural User Interface<br />Introduzione al Kinect <br />Cosa c’è dentro<br />Architettura<br />Kinect SDK<br ...
Natural User Interface NUI<br />Si definisce NUI l’interfaccia di un sistema in cui gli utenti riescono ad interagire util...
NUI : Evoluzione delle interfacce<br />4<br />
NUI : Interfacce CLI<br />5<br />
NUI : Interfacce GUI<br />6<br />
NUI : Natural<br />7<br />Touch<br />Gestures<br />Voice<br />Object Recognition<br />Touchless<br />Augmented Reality<br />
NUI: Vantaggi<br />Rapido apprendimento delle funzionalità;<br />L’utente è in grado di diventare «esperto» sull’interfacc...
Kinect: Cosa c’è dentro<br />9<br />Sensori di Profondità (3D)<br />Video Camera RGB <br />BatteriaMicrofoni<br />Inclinaz...
Kinect: Cosa c’è dentro<br />10<br />
Kinect: Architettura hardware<br />11<br />
Kinect: Come funziona<br />12<br />4<br />1<br />2<br />3<br />La nostra applicazione utilizza le info dell’SDK<br />Il pr...
Kinect: Cosa serve<br />Gli ingredienti per un buon fun:<br />Kinect;<br />Cavo usb per collegamento a pc;<br />Kinect SDK...
Kinect: Requisiti minimi<br />Sistema Operativo <br />Windows 7 (x86 and x64)<br />Hardware<br />Processore dual-core 2.66...
Kinect: Architettura<br />L’SDK mette a disposizione una serie di strumenti e una libreria di classi in grado di interagir...
Kinect: Architettura<br />Il device restituisce 3 stream:<br />Video<br />Depth<br />Audio<br />16<br />
Kinect: Architettura<br />I componenti dell’SDK sono i seguenti:<br />17<br />
Kinect: Architettura<br />HardwareL’hardwarecomprende i sensorivisti in precedenza è l’hub USB chepermetteillorocollegamen...
Kinect: La classe Runtime<br />La classe Runtime permette l’accesso alle funzionalità del Kinect:<br />19<br />
Kinect: La classe Runtime<br />La classe Runtime va istanziata e inizializzata:<br />20<br />Nui = New Runtime<br />Nui.In...
Kinect: Camera Data<br />La classe Runtime mette a disposizione l’evento VideoFrameReady per la gestione dei frame video<b...
Kinect: ImageFrameReadyEventArgs<br />22<br />
Kinect: Camera Data<br />Per utilizzare l’evento VideoFrameReady è necessario:<br />Istanziare la classe Runtime;<br />Ini...
Kinect: Camera Data<br />Risoluzioni ammesse<br />640x480<br />1280x1024<br />Numero di bytes per pixel 4 o 2<br />Formato...
25<br />Demo<br />Video Camera<br />
Kinect: Depth Data<br />26<br />La classe Runtime mette a disposizione l’evento DepthFrameReady per la gestione dei frame ...
Kinect: Depth Data<br />Per utilizzare l’evento DepthFrameReady è necessario:<br />Istanziare la classe Runtime;<br />Iniz...
Kinect: Depth Data<br />Risoluzioni ammesse<br />320x240<br />80x60<br />Numero di bytes per pixel 2<br />Contenuto immagi...
Kinect: Depth Data<br />RuntimeOptions.UseDepth<br />29<br />Dim distance(0, 0) = Bits(0) + CLng(Bits(1) << 8)<br />Runtim...
Kinect: Depth Data<br />Esempio di UseDepthAndPlayerIndex<br />30<br />
31<br />Demo<br />Depth Data<br />
Kinect: Skeletal tracking<br />L’SDK permette di avere informazioni riguardo la posizione di alcuni punti del corpo dei pl...
Kinect: Skeletal tracking<br />33<br />
Kinect: Skeletal Tracking<br />Per utilizzare l’evento SkeletonFrameReady è necessario:<br />Istanziare la classe Runtime;...
Kinect: SkeletonData<br />La classe SkeletonData contiene le informazioni sugli «scheletri» dei player rilevati:<br />Al m...
Kinect: Joints<br />Ogni scheletro ha 20 oggetti Joint che tracciano la posizione del corpo del player;<br />La posizione ...
Kinect: Skeletal Tracking<br />Il rilevamento dei sensori è affetto da errore (problemi costruttivi, luminosità eccessiva ...
Kinect: Skeletal Tracking<br />Smoothing : specifica lo smoothing da applicare. I valori sono compresi tra 0 e 1. Più il v...
39<br />Demo<br />Skeletal Tracking<br />
Kinect: Audio<br />Il device dispone di unabatteria di 4 microfoni con dellefunzionalità di audio processing hardware:<br ...
Sound position tracking
Noise suppression e Noise reduction</li></li></ul><li>Kinect: Audio<br />La classe KinectAudioData permette di :<br />Conf...
Kinect: Speech Recognition<br />L’SDK del Kinect si integra perfettamente con lo  Speech Platform SDK per implementare voi...
43<br />Demo<br />Beamforming<br />
Q&A (non sparate sul Kinect )<br />44<br />
Upcoming SlideShare
Loading in …5
×

Kinect : Just for fun?

2,972 views

Published on

Slide della sessione "Kinect: Just for fun?" tenutasi all'evento DomusDotNet Live il 13/09/2011.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,972
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
34
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Kinect : Just for fun?

  1. 1. Kinect : just for fun ?<br />Roma, 13 Settembre 2011<br />Massimo Bonanni<br />Senior Developer @ THAOS s.r.l.<br />massimo.bonanni@domusdotnet.org http://codetailor.blogspot.com<br />http://twitter.com/massimobonanni<br />
  2. 2. Agenda<br />Natural User Interface<br />Introduzione al Kinect <br />Cosa c’è dentro<br />Architettura<br />Kinect SDK<br />Camera Data<br />Depth data<br />Skeletal tracking<br />Audio<br />Q&A (se ce la facciamo )<br />2<br />
  3. 3. Natural User Interface NUI<br />Si definisce NUI l’interfaccia di un sistema in cui gli utenti riescono ad interagire utilizando un approccio «naturale» cioè riescono ad utilizzare le funzionalità del sistema senza l’uso di dispositivi artificiali (come mouse, trackball o tastiera)<br />3<br />
  4. 4. NUI : Evoluzione delle interfacce<br />4<br />
  5. 5. NUI : Interfacce CLI<br />5<br />
  6. 6. NUI : Interfacce GUI<br />6<br />
  7. 7. NUI : Natural<br />7<br />Touch<br />Gestures<br />Voice<br />Object Recognition<br />Touchless<br />Augmented Reality<br />
  8. 8. NUI: Vantaggi<br />Rapido apprendimento delle funzionalità;<br />L’utente è in grado di diventare «esperto» sull’interfaccia in minor tempo;<br />Può aiutare portatori di handicap nell’utilizzo del sistema<br />8<br />
  9. 9. Kinect: Cosa c’è dentro<br />9<br />Sensori di Profondità (3D)<br />Video Camera RGB <br />BatteriaMicrofoni<br />InclinazioneMotorizzata<br />Video Camera RGB (640x480 CMOS)<br />Sensori di profondità: proiettore IR + Camera IR (640x480 CMOS)<br />Inclinazione motorizzata (±23 gradi)<br />4 Microfoni<br />
  10. 10. Kinect: Cosa c’è dentro<br />10<br />
  11. 11. Kinect: Architettura hardware<br />11<br />
  12. 12. Kinect: Come funziona<br />12<br />4<br />1<br />2<br />3<br />La nostra applicazione utilizza le info dell’SDK<br />Il proiettore ad infrarossi illumina il soggetto con dei pattern<br />La camera infrarossi misura la distanza con un approccio «a luce strutturata»<br />L’SDK è in grado di convertire lo stream della depth cam in dati utilizzabili<br />
  13. 13. Kinect: Cosa serve<br />Gli ingredienti per un buon fun:<br />Kinect;<br />Cavo usb per collegamento a pc;<br />Kinect SDK;<br />DirectX9;<br />.........tanta fantasia!!!<br />13<br />
  14. 14. Kinect: Requisiti minimi<br />Sistema Operativo <br />Windows 7 (x86 and x64)<br />Hardware<br />Processore dual-core 2.66GHz o superiore<br />2Gb ram<br />Scheda grafica DiretcX9 o superiore<br />Kinect con cavo usb per collegamento al pc<br />Software<br />Visual Studio 2010 Express o superiori<br />.NET Framework 4.0<br />Runtime DirectX 9<br />Speech Platform Runtime SDK (solo per l’audio)<br />14<br />
  15. 15. Kinect: Architettura<br />L’SDK mette a disposizione una serie di strumenti e una libreria di classi in grado di interagire con i sensori del dispositivo fornendo allo sviluppatore oggetti ed eventi.<br />15<br />
  16. 16. Kinect: Architettura<br />Il device restituisce 3 stream:<br />Video<br />Depth<br />Audio<br />16<br />
  17. 17. Kinect: Architettura<br />I componenti dell’SDK sono i seguenti:<br />17<br />
  18. 18. Kinect: Architettura<br />HardwareL’hardwarecomprende i sensorivisti in precedenza è l’hub USB chepermetteillorocollegamento al pc.<br />Microsoft Kinectdrivers :<br />Permettonol’accessoall’array di microfoni con le API Audio standard di Windows.<br />Fornisconogli stream della video camera e deisensori di profondità.<br />Forniscono la possibilità di utilizzarepiù device contemporaneamente.<br />NUI APIUn insieme di API chepermettono di recuperare i datidaisensori di immagine e di controllareil device stesso (ad esempiobrandeggiareildispositivo).<br />KinectAudioDMOEstende le funzionalitàdell’array di microfonisupportato in Windows 7 per fornire le funzionalità di Beamforming (mappaturasonoradell’area) e localizzazionedellasorgentesonora.<br />Windows 7 standard APIsLe API audio, speech e media presenti in Windows 7 e Microsoft Speech.<br />18<br />
  19. 19. Kinect: La classe Runtime<br />La classe Runtime permette l’accesso alle funzionalità del Kinect:<br />19<br />
  20. 20. Kinect: La classe Runtime<br />La classe Runtime va istanziata e inizializzata:<br />20<br />Nui = New Runtime<br />Nui.Initialize(RuntimeOptions.UseColor) <br />Funzionalità richieste alla Runtime<br />
  21. 21. Kinect: Camera Data<br />La classe Runtime mette a disposizione l’evento VideoFrameReady per la gestione dei frame video<br />21<br />Public Event VideoFrameReady(sender As Object,<br /> e As ImageFrameReadyEventArgs) <br />
  22. 22. Kinect: ImageFrameReadyEventArgs<br />22<br />
  23. 23. Kinect: Camera Data<br />Per utilizzare l’evento VideoFrameReady è necessario:<br />Istanziare la classe Runtime;<br />Inizializzare la classe Runtime con l’opzione RuntimeOptions.UseColor;<br />Sottoscriversi all’evento VideoFrameReady;<br />Aprire lo stream video.<br />23<br />Nui = New Runtime<br />Nui.Initialize(RuntimeOptions.UseColor) <br />AddHandler Nui.VideoFrameReady, AddressOf VideoFrameReadyHandler <br />Nui.VideoStream.Open(ImageStreamType.Video, 2, <br />ImageResolution.Resolution640x480, ImageType.Color)<br />E’ anche possibile eseguire un polling direttamente sullo stream video.<br />
  24. 24. Kinect: Camera Data<br />Risoluzioni ammesse<br />640x480<br />1280x1024<br />Numero di bytes per pixel 4 o 2<br />Formato immagine:<br />RGB (pixel da 4 bytes: blu, verde, rosso e alfa)<br />YUV (pixel da 4 bytes: ciano, magenta, giallo e nero)<br />YUV-RAW (pixel da 2 bytes: ciano, magenta, giallo e nero, solo 640x480 15 fps)<br />24<br />
  25. 25. 25<br />Demo<br />Video Camera<br />
  26. 26. Kinect: Depth Data<br />26<br />La classe Runtime mette a disposizione l’evento DepthFrameReady per la gestione dei frame di profondità:<br />Public Event DepthFrameReady(sender As Object,<br /> e As ImageFrameReadyEventArgs) <br />
  27. 27. Kinect: Depth Data<br />Per utilizzare l’evento DepthFrameReady è necessario:<br />Istanziare la classe Runtime;<br />Inizializzare la classe Runtime con l’opzione RuntimeOptions.UseDepth o RuntimeOptions.UseDepthAndPlayerIndex;<br />Sottoscriversi all’evento DepthFrameReady;<br />Aprire lo stream video.<br />27<br />Nui = New Runtime<br />Nui.Initialize(RuntimeOptions.UseDepth) <br />AddHandler Nui.DepthFrameReady, AddressOf DepthFrameReadyHandler <br />Nui.VideoStream.Open(ImageStreamType.Depth, 2, <br />ImageResolution.Resolution640x480, ImageType.Depth)<br />E’ anche possibile eseguire polling direttamente sullo stream di profondità<br />
  28. 28. Kinect: Depth Data<br />Risoluzioni ammesse<br />320x240<br />80x60<br />Numero di bytes per pixel 2<br />Contenuto immagine:<br />Solo distanza (in millimetri, tra 800mm e 4000mm)<br />Distanza e player index (player index 1, 2 o 0 se non c’è un player)<br />28<br />
  29. 29. Kinect: Depth Data<br />RuntimeOptions.UseDepth<br />29<br />Dim distance(0, 0) = Bits(0) + CLng(Bits(1) << 8)<br />RuntimeOptions.UseDepthAndPlayerIndex<br />Dim distance(0, 0) = CLng(Bits(0) >> 3) + CLng(Bits(1) << 8)<br />
  30. 30. Kinect: Depth Data<br />Esempio di UseDepthAndPlayerIndex<br />30<br />
  31. 31. 31<br />Demo<br />Depth Data<br />
  32. 32. Kinect: Skeletal tracking<br />L’SDK permette di avere informazioni riguardo la posizione di alcuni punti del corpo dei player rilevati.<br />L’algoritmo di skeletal tracking è basato sul «Machine Learning»<br />La classe Runtime mette a disposizione l’evento SkeletonFrameReady per la gestione dei frame di di skeletal tracking:<br />32<br />Public Event SkeletonFrameReady(sender As Object, <br /> e As SkeletonFrameReadyEventArgs) <br />E’ anche possibile eseguire polling sullo Skeleton Engine esposto dalla Runtime.<br />
  33. 33. Kinect: Skeletal tracking<br />33<br />
  34. 34. Kinect: Skeletal Tracking<br />Per utilizzare l’evento SkeletonFrameReady è necessario:<br />Istanziare la classe Runtime;<br />Inizializzare la classe Runtime con l’opzione RuntimeOptions.UseSkeletalTracking;<br />Sottoscriversi all’evento SkeletonFrameReady.<br />34<br />Nui = New Runtime<br />Nui.Initialize(RuntimeOptions.UseSkeletalTracking) AddHandler Nui.SkeletonFrameReady, AddressOf SkeletonFrameReadyHandler <br />
  35. 35. Kinect: SkeletonData<br />La classe SkeletonData contiene le informazioni sugli «scheletri» dei player rilevati:<br />Al massimo due player contemporanei (più altri 4 con informazioni ridotte);<br />Ogni «scheletro» può essere Tracked o NotTracked;<br />Ogni scheletro prevede un array di 20 Joint ognuno con la propria posizione (x,y,z);<br />Ogni Joint può essere Tracked, NotTracked o Inferred (NotTracked è raro).<br />35<br />
  36. 36. Kinect: Joints<br />Ogni scheletro ha 20 oggetti Joint che tracciano la posizione del corpo del player;<br />La posizione del joint nello spazio è contenuta nella proprietà Position (di tipo Vector):<br />X: posizione x (compreso tra -1 e 1);<br />Y: posizione y (compreso tra -1 e 1);<br />Z: distanza dal device (in metri).<br />36<br />
  37. 37. Kinect: Skeletal Tracking<br />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.<br />Lo Skeleton Engine esposto dalla Runtime fornisce la possibilità di impostare dei filtri per eliminare il rumore:<br />37<br />Nui.SkeletonEngine.TransformSmooth = TrueDim parameters = New TransformSmoothParameters() With {.Smoothing = 1.0F,                         .Correction = 0.1F, .Prediction = 0.1F,<br /> .JitterRadius = 0.05F,.MaxDeviationRadius = 0.05F} _Nui.SkeletonEngine.SmoothParameters = parameters <br />
  38. 38. Kinect: Skeletal Tracking<br />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;<br />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;<br />Prediction : specifica il numero di frame previsti;<br />Jitter Radius : specifica il raggio di riduzione del jitter (in metri). Ogni jitter esterno al raggio è riportato nel raggio impostato;<br />MaximumDeviation Radius : specifica il raggio massimo (in metri) che i punti filtrati possono deviare rispetto ai dati grezzi<br />Non esistono dei valori «buoni» da utilizzare, è necessario eseguire delle prove per capire quali sono i più adatti per la specifica applicazione<br />38<br />
  39. 39. 39<br />Demo<br />Skeletal Tracking<br />
  40. 40. Kinect: Audio<br />Il device dispone di unabatteria di 4 microfoni con dellefunzionalità di audio processing hardware:<br />40<br /><ul><li>Multichannel echo cancellation (MEC)
  41. 41. Sound position tracking
  42. 42. Noise suppression e Noise reduction</li></li></ul><li>Kinect: Audio<br />La classe KinectAudioData permette di :<br />Configurare le funzionalità del dispositivo:<br />FeatureMode: ;<br />MicArrayMode: ;<br />....<br />Gestire i parametri di filtro:<br />AcousticEchoSuppression;<br />NoiseSuppression;<br />....<br />Gestire lo stream audio proveniente dai microfoni:<br />Start();<br />Stop();<br />....<br />Capire la provenienza del suono:<br />SoundSourcePosition;<br />SoundSourcePositionConfidence;<br />....<br />41<br />
  43. 43. Kinect: Speech Recognition<br />L’SDK del Kinect si integra perfettamente con lo Speech Platform SDK per implementare voice recognition. <br />42<br />
  44. 44. 43<br />Demo<br />Beamforming<br />
  45. 45. Q&A (non sparate sul Kinect )<br />44<br />
  46. 46. Riferimenti<br />Kinect SDK Web Site<br />http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/default.aspx<br />Coding4Fun Kinect Toolkit <br />http://c4fkinect.codeplex.com/<br />Kinect Toolbox <br />http://kinecttoolbox.codeplex.com/<br />Channel 9 Kinect for Windows SDK Quickstarts<br />http://dev9.channel9.msdn.com/Series/KinectSDKQuickstarts<br />Coding4Fun @ Channel 9<br />http://dev9.channel9.msdn.com/coding4fun/kinect<br />45<br />

×