kinect sdk preview
DESCRIPTION
A presentation of Kinect device and SDK.This presentation was made for Codecamp event from 18/02/2012 from Cluj-Napoca, by Radu Vunvulea.http://codecamp.ro/http://vunvulearadu.blogspot.com/TRANSCRIPT
Ce este de fapt Kinect-ul și cum îl putem folosi
Radu Vunvulea
Agenda• Scurt istoric• Ce este de fapt Kinect-ul?• Din ce este compus• Ce contine• Date tehnice despre senzori• Cum se calculeaza distanta• De ce avem nevoie ca sa programam• Ce putem sa facem cu SDK-ul• Demo• SDK preview• Licentiere• Bibliografie• Intrebari
Scurt istoric
• 24/09/2009 - apare primul anunt oficial din partea MicrosoftNume de proiect: Natal
• 12/03/2010 - este lansat oficial pe piata• 11/10/2010 – apare primul API open-source scris de catre un
hacker• 1/02/2011 – se lanseaza primul SDK oficial pentru PC
Data Unitati vandute
15/11/2010 1.000.000
29/11/2010 2.500.000
05/01/2011 8.000.000
Ce este de fapt Kinect-ul?
Ce este de fapt Kinect-ul?
• Un dispozitiv periferic care permite utilizatorului sa controleze un calculator sau o consola prin intermediul gesturilor si a vocii
• Permite interactiunea cu o unitate doar prin intermediul miscarii corpului
• Orice miscare a unei persoane poate fi identificata prin urmarirea unor puncte
Din ce este compus
Ce contine
• Un motoras pentru miscare pe verticala( +/- 27 °)• O camera video VGA• Un proiector inflarosu( inflared laser)• Un sensor CMOS monocrom• Patru microfoane• O mufa USB type A
Date tehnice despre sensori
• Distanta• Distanta optima este intre 1.2m si 3.5m• Senzorii pot sa masoare distanta intre 0.7m si 6m• Unghiul de vizibilitate este de 57° pe orizontala si 43°
pe verticala
• Video stream de 640x480px (8 bits VGA la 30Hz)• Detectarea automata a unei persoane• Tracking la un set de puncte care formeaza corpul uman
• Audio stream – 16kHz• Detectarea locatiei in spatiu de unde este emis sunetul• Identificarea unei persoane pe baza vocii
Cum se calculeaza distanta
• Mecanismul folosit pentru a calcula distanta se numeste:Stereo triangulation
Cum se calculeaza distanta
• Mecanismul folosit pentru a calcula distanta se numeste:Stereo triangulation
De ce avem nevoie ca sa programam
• Un Kinect pentru XBOX 360 + un adaptorsau
• Un Kinect pentru PC care vine in pachet cu adaptor
• Windows 7 sau Windows 8 • Visual Studio 2010• Kinect SDK -
http://www.microsoft.com/en-us/kinectforwindows/• O referinta la Microsoft.Kinect
• Daca vreti sa faceti aplicatii complexe trebuie sa aveti cunostinte de geometrie, trigonometrie si vectori
Ce putem sa facem cu SDK-ul
• Capturi video si audio• Tracking la jucatori (maxim 7 – pentru moment)• Distanta fiecarui punct fata de Kinect• Identificarea sursei audio• Recunoasterea unui utilizator pe baza vocii• Coordonatele in spatiu a unor puncte pentru fiecare
jucator (maxim 4 jucatori) – aceste puncte formeaza Skeleton-ul
DemoLet’s see Kinect in action
Cum sa pornim Kinect-ul
KinectSensor kinect = KinectSensor.KinectSensors[0];kinect.Start();kinect.SkeletonStream.Enable();kinect.ColorStream.Enable();…
• Cand nu mai avem nevoie de Kinect trebuie apelatkinect.Stop()
Cum sa ne inregistram la un stream
kinect.ColorStream.Enable(ColorImageFormat.RgbResolution1280x960Fps12);kinect.ColorFrameReady += new EventHandler(Kinect_ColorFrameReady);…void Kinect_ColorFrameReady(object sender,
ColorImageFrameReadyEventArgs e){
ColorImageFrame frame = e.OpenColorImageFrame();}
• De fiecare data cand un nou stream este disponibil acest eveniment o sa fie aruncat
Ce date primim de la Depth sensor
• primii 13 bits din fiecare pixel reprezinta distanta obiectului fata de device in milimetrii
• folosind alti 3 bits putem sa identificam index-ul jucatorului
DepthImageFrame frame = e.OpenDepthImageFrame();short[] pixels = new short[frame.PixelDataLength];frame.CopyPixelDataTo(pixelInfos);
int distanceInMillimeters =pixels[pixelIndex] >> DepthImageFrame.PlayerIndexBitmaskWidth;
int playeNumber = pixels[pixelIndex] & DepthImageFrame.PlayerIndexBitmask;
Skeleton
• Pentru fiecare punct (Joint) primim pozitia acestuia in spatiu (x,y,z)
• Nu este nevoie ca toate punctele sa fie urmarite de catre Kinect• Unele puncte se pot suprapune, din aceastacauza starea unui punctpoate sa fie Inferred
Skeleton
SkeletonFrame frame = e.OpenSkeletonFrame();Skeleton[] skeletons = new Skeleton[frame.SkeletonArrayLength];frame.CopySkeletonDataTo(skeletons);foreach (Skeleton skeleton in skeletons){
foreach (Joint joint in skeleton.Joints){
If (joint.TrackingState != JointTrackingState.Tracked)continue;
Console.Write(joint.JointType);Console.Write(string.Format(“({0},{1},{2})”,
joint.Position.X, joint.Position.Y, joint.Position.Z);}
}
Licentiere
Kinect pentru XBOX- se poate folosi doar pentru aplicatii non-comerciale
Kinect pentru PC - se poate folosi atat in aplicatii non-comerciale cat si in aplicatii
comerciale- pretul device-ului este cu 100$ mai mare
Bibliografie
• http://www.microsoft.com/en-us/kinectforwindows/• http://openkinect.org/wiki/Main_Page • http://channel9.msdn.com/coding4fun/kinect/Open-
source-Kinect-gesture-recognition-project-Kinect-DTW • http://en.wikipedia.org/wiki/Kinect
?Questions