Paolo Chiantore, WIICOM (I3P)TreataBit, 22 maggio 2012
KINECT cos'èIl Kinect è una periferica nata per la console Microsoft Xbox360.
● proiettore di raggi infrarossi● rgb camera● sensore di raggi infrarossi● array di microfoni
E' nato per permettere l'interazione con i videogiochi senza l'utilizzo di controller (= fare il c**o alla Nintendo WII)
X X X
KINECT cosa faIl Kinect è un occhio e un orecchio elettronico:
● riconosce la silhouette di una persona (player)● riconosce lo scheletro di una persona (20 joints)● riconosce i comandi vocali
In tre parole: Natural User Interface (NUI)
KINECT come funziona● camera RGB: filma la scena di fronte al Kinect● proiettore + sensore a infrarossi: fanno una scansione
3D della scena di fronte al Kinect
depth frame image frame
KINECT il depthframeproiettore + sensore a infrarossi = scansione 3D dell'ambiente
IR dots
IR projector
IR sensor
KINECT come funziona● i dati dell'image frame e del depth frame sono passati all'
Xbox tramite USB● Il driver del Kinect sull'Xbox tramite degli algoritmi è in grado
di elaborare i dati per riconoscere il corpo umano
skeleton tracking player tracking
KINECT diffusione● dal suo lancio nel novembre 2010 a dicembre 2011 sono
stati venduti 18 milioni di Kinect● l'utilizzo del connettore USB per la trasmissione dei dati
dei sensori e il basso costo hanno stimolato la fantasia degli hacker che si sono cimentati nel reverse engineering per utilizzare il Kinect su PC (esempio: progetto “Open Kinect”)
● nel giugno 2011 la Microsoft ha deciso di rilasciare gratuitamente i driver per l'utilizzo del Kinect su PC con Windows7: KINECT for Windows SDK
...e ora?Le applicazioni possibili del Kinect vanno da: “finalmente una spada laser come Luke!” a scanner 3D a basso costo...
augmentedreality
3D scan
multi-touchinterface
...fino a, ovviamente:
KINECT SDK: requisitiprima release: Kinect for Windows SDK Beta (2011)
compatibile con lo stesso HW dell'Xbox360non utilizzabile a fini commerciali
ultima release: Kinect for Windows SDK ver1 (2012)richiede HW dedicato (KINECT for Windows)miglioramenti (range sensore, skeletal tracking, riconoscimento audio, facilità installazione)utilizzabile a fini commerciali
Requisiti software:Windows7Microsoft Visual Studio 2010 Express (i.e. C#,C++) .NET framework 4.0
KINECT SDK: come si usaKinect SDK (beta) si basa su due librerie: // Kinect libraries using Microsoft.Research.Kinect.Nui; // Natural User Interface using Microsoft.Research.Kinect.Audio; // Audio
La NUI dà acesso a tre informazioni fondamentali:1) nui.VideoFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_VideoFrameReady);
2) nui.DepthFrameReady += new EventHandler<ImageFrameReadyEventArgs>(nui_DepthFrameReady);
3) nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);
estratti codice: Visual C#
KINECT SDK: come si usaImage frame:void nui_VideoFrameReady(object sender, ImageFrameReadyEventArgs e){ PlanarImage image = e.ImageFrame.Image; image1.Source = BitmapSource.Create(image.Width, image.Height, … PixelFormats.Bgr32, … , image.Width * image.BytesPerPixel);}
estratti codice: Visual C#
KINECT SDK: come si usaDepth and player frame:void nui_DepthFrameReady(object sender, ImageFrameReadyEventArgs e){ byte[] ColoredBytes = GenerateColoredBytes(e.ImageFrame); PlanarImage image = e.ImageFrame.Image; image2.Source = BitmapSource.Create(image.Width, image.Height, … PixelFormats.Bgr32, … , image.Width * PixelFormats.Bgr32.BitsPerPixel / 8);}
estratti codice: Visual C#
KINECT SDK: come si usaSkeleton frame:void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e){ SkeletonFrame allSkeletons = e.SkeletonFrame;
//get the first tracked skeleton SkeletonData skeleton = (from s in allSkeletons.Skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault();
// scale to screen pixel (code4fun extension) Joint HandRight = skeleton.Joints[JointID.HandRight].ScaleTo(640, 480);
}
estratti codice: Visual C#
KINECT SDK: cosa non faKINECT SDK fornisce dati grezzi (ammesso che si possano definire tali il riconoscimento dello scheletro e dei player).
Quindi:non riconosce dettagli del corpo oltre i 20 joints dello skeleton framenon ricostruisce superfici 3D (il depth frame è una nuvola di punti nello spazio con coordinate x,y,z + indice di identificazione di un player)non riconosce i gesti (movimenti delle mani, etc.)
Tutte queste sono cose delegate al SW applicativo cioè alla bravura e fantasia degli sviluppatori.
Applicativi: multitouchUn possibile utilizzo del KINECT è lo sviluppo di applicativi multitouch, con e senza “touch” !In questo caso bisogna sviluppare un tracker:“Tracker - program which takes images from a camera, puts them through several filters, and finally reports the position, size, and relative movement of blobs over some protocol”
ScreenshotCommunityCoreVision
source image tracked image
Applicativi: Tangible User InterfacesLa “terza dimensione” del Kinect (depth frame) permette di andare oltre al multitouch: sembra lo strumento naturale per lo sviluppo di Tangible User InterfacesLo standard di fatto sia per applicazioni multitouch che TUI è il protocollo TUIO:“TUIO - A protocol used for communicating the position, size, and relative velocity of blobs”
Applicativi: grafica interattivaRaccolti ed elaborati tutti i dati,cosa visualizzo sullo schermo?
Applicativi “standard”:● Visual Studio: WPF
Piattaforme per creative coding:● Open Frameworks● Processing● Cinder
Riferimenti
KINECT for Windows SDK: http://www.microsoft.com/en-us/kinectforwindows/
NUI group: wiki.nuigroup.com/Main_PageTUIO protocol: http://www.tuio.org/Community Core Vision: http://ccv.nuigroup.com/
Cinder: http://libcinder.org/Processing: http://processing.org/Open Frameworks: http://www.openframeworks.cc/