Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 4
  • 116

Witajcie, czy ktoś z bywalców forum zajmował się oprogramowaniem Kinecta za pomocą SDK od Microsoftu? Załóżmy że mam sensor w wersji 1.0 (ten od XBOX-a 360).

Czy Kinect poprzez API informuje mnie że postać podniosła prawą rękę do góry, czy może raczej że punkt o współrzędnych (x1,y1,z1) - nadgarstek - przemieścił się do (x2,y2,z2)? Innymi słowy czy do oprogramowania Kinecta potrzebne są skomplikowane przekształcenia geometryczne i transformacje w 3D?

Maciej_Krauze
  • Zapytał
  • @ Maciej_Krauze | 25.08.2015
    • lider
    • laureat
    • 45
    • 16
    • 58
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedzi (3)

  • 11

Nie miałem okazji pracy z Kinectem, ale zainteresowało mnie twoje pytanie i chciałbym ci jakoś pomóc.

Z tego co udało mi się ustalić, to Kinect SDK nie ma wprost zaimplementowanych standardowych gestów (np. podniesiona prawa ręka do góry).
SDK udostępnia podstawowe klasy oraz informacje o położeniu poszczególnych punktów szkieletu. Jeśli chcemy wykryć jakiś gest to musimy zaimplementować klasę, która to rozpozna.

 

Zacytuję najlepiej fragment z pracy inżynierskiej Marcina Rembała:

Postawą całego mechanizmu jest klasa abstrakcyjna Gesture, która utożsamiana jest z gestem wykonanym przez użytkownika. Opis gestu został podzielony na kilka etapów, nazywanych dalej segmentami (interfejs IRelativeGestureSegment), gdzie każdy z nich opisuje jakis charakterystyczny układ punktów ciała użytkownika. Jeżeli w danym momencie układ punktów szkieletu użytkownika dostarczony przez NUI API Kinecta pasuje do segmentu gestu, sukcesywnie dopasowywane są kolejne etapy. Jeżeli w ramach danego gestu zostały osiągnięte wszystkie segmenty składające się na gest, nastąpiło pomyślne wykrycie danego gestu.

 

na podst. https://goo.gl/FBBsCr

 

Polecam wprowadzenie:

http://blogs.msdn.com/b/mcsuksoldev/archive/2011/08/08/writing-a-gesture-service-with-the-kinect-for-windows-sdk.aspx

 

Ale z tego widać, że zabawa z Kinectem od strony programowania nie jest taka prosta jak mogłaby się wydawać i jeśli będziesz chciał zaimplementować skomplikowane gesty to bez matematyki ani rusz :)

 

 

 

 

 

 

 

 

  • Odpowiedział
  • @ | 31.08.2015
  • TRENER ALTKOM AKADEMII
  • 13

Śledzenie zmiany pozycji ręki lub jej części w postaci nadgarstka możliwe jest dzięki funkcji Skeletal Tracking, umożliwiającej śledzenie informacji o predefiniowanych punktach ciała (10 lub 20) znajdującego się w zakresie przekazywanego przez sensor strumienia. Definiowanie stanu śledzenia oraz przechwytywanie informacji o punktach możliwe jest dzięki właściwości Joints klasy Skeleton. Każdy z elementów kolekcji Joints zawiera informacje o typie punktu, stanie śledzenia i pozycji. Dla ułatwienia predefinowane punkty dostępne są jako typ wyliczeniowy JointType wśród których znajdziemy HandLeft oraz WristLeft.
Przykład zastosowania: https://msdn.microsoft.com/en-us/library/jj131025.aspx

 

  • Odpowiedział
  • @ | 31.08.2015
  • TRENER ALTKOM AKADEMII
  • 7

Dziękuję za odpowiedzi, nakierowały mnie na to czego szukałem. Powyżej Marcin zamieścił bardzo dobre wprowadzenie w temat gestów, a p. Jacek zwrócił uwagę na klasy Skeleton i Joint - czyli sedno odwzorowania modelu człowieka.

Jako że mój sensor od XBOX 360 posiada przejściówkę z zasilaczem sieciowym która pozwala podłączyć go do PC, tak właśnie zrobiłem.

 

Ściągnąłem i zainstalowałem 2 paczki oprogramowania:

(są też odrębne paczki do sensora w wersji 2, dostarczanego z XBOX One)

1. Kinect for Windows SDK v1.8 (pakiet sterowników i bibliotek):

http://www.microsoft.com/en-us/download/details.aspx?id=40278

2. Kinect for Windows Developer Toolkit v1.8 (przykłady i próbki kodu):

http://www.microsoft.com/en-us/download/details.aspx?id=40276

 

W tym drugim pakiecie znajduje się paczka Skeleton Basics, zawierająca cały projekt do Visual Studio w C#/XAML/WPF (jest też wariant w C++). Jeszcze nie zanalizowałem źródeł, ale kod umożliwia wyrysowanie odpowiednika szkieletu ludzkiego (uproszczonego), kostka po kostce. Wynikiem jest wyrysowana sylwetka przypominająca "ludzika z zapałek", na podstawie strumienia danych z sensora.

Mając odwzorowany szkielet, pozostaje odczytać i rozpoznawać gesty, np. wspomniane podniesienie ręki do góry.

 

Jako ciekawostkę podam że w pakiecie jest przykład śledzący mimikę twarzy - potrafi rozpoznać otwarcie ust, uniesienie brwi, rozszerzenie oczu i kilka innych min. Jest to również interesująca rzecz do analizy.

Maciej_Krauze
  • Odpowiedział
  • @ Maciej_Krauze | 31.08.2015
    • lider
    • laureat
    • 45
    • 16
    • 58