2011-12-09 3 views
9

첫 번째 사람을 추적하고이 사람의 오른손을 사용하여 내가 만든 응용 프로그램을 탐색하고 싶습니다.Kinect (trackingID)로 사람을 추적하는 방법

커서를 가져올 수 있습니다. 이제 한 사람 만 추적하면됩니다. 그래서 기본적으로 한 사람이 프로그램을 탐색 할 때, 그 사람 뒤에서 걷는 사람이 있거나이 사람을보고있을 때, 움직이면 kinect는 다른 사람을 인식해서는 안됩니다.

어떻게 구현할 수 있습니까? trackingId으로 무엇인가 알고 있지만 무엇이 있을까요? : s

 foreach (SkeletonData s in allSkeletons.Skeletons) 
     { 

       if (s.TrackingState == SkeletonTrackingState.Tracked) 
       { 
        if (s.TrackingID == 0) 
        { 

         foreach (Joint joint in s.Joints) 
         { 
         } 
        } 
       } 
     } 

답변

6

모든 추적 된 사람은 플레이어 지수를가집니다. 다른 색인이있는 플레이어는 무시하십시오.
플레이어 인덱스는 심도 이미지의 데이터 일부입니다. 당신은 그것을 추출해야 :

당신이 제대로 넥트 런타임을 초기화 할이 정보를 얻기 위하여
int playerIdx = depthFrame16[i16] & 0x07; 

:

_kinectNui.Initialize(RuntimeOptions.UseDepthAndPlayerIndex | .... 

더 많은 정보를 정기적으로 여기를 참조하십시오 : http://www.codeproject.com/KB/dotnet/KinectGettingStarted.aspx

내가 완전히 추천을 MS의이 비디오 자습서 : http://research.microsoft.com/apps/video/?id=152249

ShapeGameDem SDK와 함께 제공되는 O를 통해 어떻게 작동하는지 확인할 수 있습니다. (그들은 단지 배열의 skeletion과의 인덱스를 사용) : 당신이 그렇게 할 수

int playerId = 0; 
foreach (SkeletonData data in skeletonFrame.Skeletons) { 
    if (SkeletonTrackingState.Tracked == data.TrackingState) { 
     Player player; 
     if (players.ContainsKey(playerId)) 
     player = players[playerId]; 
     else 
     player = new Player(playerId); 
    } 
    playerId++; 
} 

단순화 일 (코드 사용) :

int myPlayerIndex = 0; //probably 0 since you are the first person entered the kinect scope 
int playerId = 0; 
foreach (SkeletonData s in allSkeletons.Skeletons) { 
    if(playerId != myPlayerIndex) 
     continue;  

    if (s.TrackingState == SkeletonTrackingState.Tracked) { 
     foreach (Joint joint in s.Joints) 
     { 
     } 
    } 
    playerId++; 
} 

여기에 물건을 모아이 비슷한 질문 그것을 설명하는 MS 포럼 : http://social.msdn.microsoft.com/Forums/en-US/kinectsdk/thread/d821df8d-39ca-44e3-81e7-c907d94acfca

+0

그래서 실제로 선수의 클래스를 만들었나요? 이 클래스에서 플레이어 id를 저장하면이 playerID와이 playerID에 해골 배열이 저장됩니까? – Letoir

+0

나는 그것을 조사했다. 이것은 플레이어의 클래스를 만든 후, 뼈의 클래스를 만들어야 만 한 사람의 행동을 추적한다는 것을 의미한다. simpeler 일 수는 없다. :) – Letoir

+0

사실이 코드는 ShapeGame에서 가져온 것입니다. 코드에서 allSkeletons 변수는 모든 플레이어의 목록을 보유합니다. 모든 플레이어의 색인을 식별자로 사용하면 다른 플레이어는 건너 뛸 수 있습니다. –