Kinect and brave new applications – Kinect SDK v.1.7 UPDATE Igor Antonacci http://blog.technothink.net/ Twitter: @bitbreaker Igor.antonacci@dotdotnet.org
User Group .NET Emilia-Romagna 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
Agenda NUI – Natural User Interfaces Kinect Overview Kinect SDK Demo
NUI – Natural User Interfaces 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
Interfacce Uomo-Macchine: Storia – CLI
Interfacce Uomo-Macchine: Storia – GUI
TouchTouch
Object Recognition
Gestures
Voice
Augmented Reality
Touchless
Kinect – Overview Com’è fatta / Sensori e Componenti Architettura HW Come funziona
Kinect – dall’esterno Camera VGA 640x480 (CMOS). Infrared Camera 640x840 (CMOS). Proiettore Infrarossi Tilt Motorizzato. Batteria di 4 Microfoni RGB CAMERA MULTI-ARRAY MIC MOTORIZED TILT 3D DEPTH SENSORS
Kinect – Come funziona – 1
Kinect – Come funziona – 2
Kinect: SDK & Toolkit 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: Architettura SW Kinect SDK – Layer tra HW e Software Flusso di dati “grezzo” e “raffinato”
Kinect: Skeletal Tracking
Kinect: Skeletal Tracking 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
Kinect SDK: Primi passi 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);
Kinect SDK: Skeletal Frame Rappresenta il singolo frame con riconoscimento scheletrico
Kinect SDK: Video Frame 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);
Kinect SDK: Video Frame – 2 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();
Kinect SDK: Depth Frame – 1 “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);
Kinect SDK: Depth Frame – 2 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);
What’s new – Kinect SDK 1.7 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
Kinect Interaction – Architettura Layer “on-top” della NUI Gestione di gesture “comuni” in Applicazioni / Giochi WPF Native Managed Native
Kinect Interaction – Toolkit 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)
Kinect: DEMO – Let’s play…with code!
DEMO Kinect SDK 1.7 – Fusion 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
Kinect SDK 1.7 – Matlab / OpenCV Utilizzo / Integrazione con OpenCV – Computer Vision Gestione del flusso “depth” con Matlab
Kinect: Audio API 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
Possibili sviluppi commerciali (€€€) Visualizzazioni scientifiche Healthcare Games
Risorse Online 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-does- kinect-really-work.html
Q&A
CONCORSO … senza premi SORPRESA!!! CONCORSO … senza premi