SlideShare una empresa de Scribd logo
1 de 22
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 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
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 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
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
Demo
Let’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 apelat
kinect.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 aceasta
cauza starea unui punct
poate 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
Multumesc

                  Radu Vunvulea
           vunvulear@gmail.com
       vunvulearadu.blogspot.com

Más contenido relacionado

Destacado (12)

NA Sales Leadership
NA Sales LeadershipNA Sales Leadership
NA Sales Leadership
 
Heart Attack
Heart AttackHeart Attack
Heart Attack
 
Enterprise2
Enterprise2Enterprise2
Enterprise2
 
Exotic Thai Fish
Exotic Thai FishExotic Thai Fish
Exotic Thai Fish
 
Gooi de trossen los
Gooi de trossen losGooi de trossen los
Gooi de trossen los
 
що таке персональний комп'ютер модуль 1
що таке персональний комп'ютер модуль 1що таке персональний комп'ютер модуль 1
що таке персональний комп'ютер модуль 1
 
Robotica
RoboticaRobotica
Robotica
 
2011年中国太阳能多晶硅产业深度研究报告
2011年中国太阳能多晶硅产业深度研究报告2011年中国太阳能多晶硅产业深度研究报告
2011年中国太阳能多晶硅产业深度研究报告
 
спільно з громадою вакшеба
спільно з громадою вакшебаспільно з громадою вакшеба
спільно з громадою вакшеба
 
Tablet3
Tablet3Tablet3
Tablet3
 
MICE в Екатеринбурге
MICE в ЕкатеринбургеMICE в Екатеринбурге
MICE в Екатеринбурге
 
Communicare Wo W! Services (Personal)
Communicare Wo W! Services (Personal)Communicare Wo W! Services (Personal)
Communicare Wo W! Services (Personal)
 

Kinect SDK preview

  • 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
  • 4. Ce este de fapt Kinect-ul?
  • 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
  • 6. Din ce este compus
  • 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
  • 20. 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
  • 22. Multumesc Radu Vunvulea vunvulear@gmail.com vunvulearadu.blogspot.com