Igor Antonacci http://blog.technothink.net/ Twitter: @bitbreaker [email protected] La DotDotNet è un'associazione culturale con il compito di promuovere la più ampia diffusione dell'informatica, della telematica, della multimedialità e dei collaborative tools, con particolare attenzione allo sviluppo di software su piattaforma Microsoft .NET. (dall’art. 1 dello statuto DotDotNet) Associazione no-profit ◦ Opera in tutta la regione Gruppo di professionisti, studenti e appassionati. Modulo di adesione Feedback NUI – Natural User Interfaces Kinect Overview Kinect SDK Demo HCI – Human Computer Interaction è un argomento “HOT” in questo momento; sono nati nuovi tipi di interazioni Uomo-Macchina che interessano il grande pubblico E gli sviluppatori Sono state vendute più chitarre virtuali che reali nel 2009 TouchTouch Object Recognition Gestures Voice Augmented Reality Touchless Com’è fatta / Sensori e Componenti Architettura HW Come funziona Camera VGA 640x480 (CMOS). Infrared Camera 640x840 (CMOS). Proiettore Infrarossi Tilt Motorizzato. 3D DEPTH SENSORS Batteria di 4 Microfoni RGB CAMERA MULTI-ARRAY MIC MOTORIZED TILT Download: http://www.microsoft.com/en-us/kinectforwindows/ L’SDK Include ◦ Driver per l’utilizzo su PC (Windows 8, Windows 7, ) ◦ API per l’accesso ai sensori, documentazione Toolkit ◦ Esempi con codice sorgente (in C# , C++ … ) ◦ Face Tracking SDK ◦ Miscellanea Kinect SDK – Layer tra HW e Software Flusso di dati “grezzo” e “raffinato” Massimo due “player” riconosciuti contemporaneamente “Joints” <x, y, z> per ogni giocatore / utente Ogni “Joint” ha degli stati ◦ Tracked – Il riconoscimento è “accurato” ◦ Not Tracked – Non si è giunti al riconoscimento di quel joint ◦ Inferred – L’accuratezza è minima, l’elemento è coperto e non facilmente riconoscibile interpolato Nuovo Progetto WPF o WinForms Referenziare la DLL: Microsoft.Kinect Scrivere codice ◦ nui = Runtime.Kinects[0]; ◦ nui.Initialize(RuntimeOptions.UseSkeletalTracking); ◦ nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_Skeleto nFrameReady); Rappresenta il singolo frame con riconoscimento scheletrico Stream Video dal sensore video a colori del Kinect E’ necessario “aprirlo” (inizializzarlo) prima di ricevere I frame ◦ nui = Runtime.Kinects[0]; ◦ nui.Initialize(RuntimeOptions.UseColor); ◦ nui.VideoFrameReady += nui_VideoFrameReady; ◦ nui.VideoStream.Open(ImageStreamType.Video, 2, ImageResolution.Resolution640x480, ImageType.Color); Ogni frame della scena è rappresentato da un oggetto di tipo PlanarImage I pixel della scena sono rappresentati, ognuno, con 4 byte NON utilizzabile come Source di una Image (nè in WPF, nè in WinForms) Coding4Fun.Kinect.Wpf – ToBitmapSource() extension method ◦ image1.Source = e.ImageFrame.ToBitmapSource(); “Fotogramma” di profondità Ogni coppia di byte rappresenta la distanza per il pixel corrispondente (per ogni giocatore nella scena) ◦ nui = Runtime.Kinects[0]; ◦ nui.Initialize(RuntimeOptions.UseDepth); ◦ nui.DepthFrameReady += nui_DepthFrameReady ◦ nui.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution640x480, ImageType.Depth); Ogni pixel della scena è rappresentato da DUE byte I due byte possono contenere due informazioni principali ◦ ID del Player (in caso di più utenti sulla scena) ◦ La distanza dell’oggetto (in mm) L’ID dell’utente/giocatore è presente se: ◦ nui.Initialize(RuntimeOptions.UseDepthAndPlayerIndex); … assente nel caso in cui ◦ nui.Initialize(RuntimeOptions.UseDepth); Nuova versione dell’SDK rilasciata ad Aprile 2013 Introduzione di un (più) layer allo stack precedente ◦ Kinect Interaction ◦ Kinect Fusion ◦ Matlab / OpenCV Integration Nuovo Kinect Toolkit ◦ Controlli WPF / Nativi per l’interazione attraverso Kinect Interaction Hand grip gesture Push to Press control Layer “on-top” della NUI Gestione di gesture “comuni” in Applicazioni / Giochi Native WPF Managed Native Kinect Toolkit – Open Source (Codeplex) Controlli “aggiuntivi” – “on top” Kinect Interaction Libraries Astraggono dalla gestione delle “gesture” ◦ Eventi “Click” come in un controllo WPF / WinForm ◦ Nessuna gestione dei movimenti e dei “sensori” What’s NEW (principali Controlli) ◦ ◦ ◦ ◦ KinectRegion – contenitore per controlli “Interaction” KinectTileButton – Bottone “Kinect” – Push to press KinectScrollViewer – Scrollview con gestione “Hand Grip” KinectUserViewer – Piccolo “monitor” per debug del sensore di profondità ◦ KinectSensorChooserUI – Gestione (multi) sensore (riduce codice di inizializzazione) Scansione TRIDIMENSIONALE della scena Identificazione degli oggetti nella scena…3D . Utilizzo “real-time” (Realtà aumentata) SOLO con GPU Desktop-level GPU Mobile Static scene render DEMO Utilizzo / Integrazione con OpenCV – Computer Vision Gestione del flusso “depth” con Matlab Gestione “managed” dell’Audio Start – Capture – Stop dell’audio con riconoscimento della direzione Kinect Audio Demo tra gli esempi dell’SDK Riconoscimento vocale se utilizzato insieme alle Speech API Visualizzazioni scientifiche Healthcare Games Kinect SDK http://www.microsoft.com/en-us/kinectforwindows/ Coding4Fun – Kinect http://channel9.msdn.com/coding4fun/kinect Coding4Fun – Kinect for Windows SDK Quickstart http://channel9.msdn.com/Series/KinectSDKQuickstarts How does it works – Kinect http://gilotopia.blogspot.com/2010/11/how-doeskinect-really-work.html