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/
1. Ce este de fapt Kinect-ul și cum îl
putem folosi
Radu Vunvulea
2. 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
3. Scurt istoric
• 24/09/2009 - apare primul anunt oficial din partea Microsoft
Nume 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
5. 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
7. 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
8. 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
9. Cum se calculeaza distanta
• Mecanismul folosit pentru a calcula distanta se numeste:
Stereo triangulation
10. Cum se calculeaza distanta
• Mecanismul folosit pentru a calcula distanta se numeste:
Stereo triangulation
11. De ce avem nevoie ca sa programam
• Un Kinect pentru XBOX 360 + un adaptor
sau
• 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
12. 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
14. 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 apelat
kinect.Stop()
15. 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
16. 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;
17. 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 aceasta
cauza starea unui punct
poate sa fie Inferred
18. 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);
}
}
19. 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