2011-12-09 19 views
9

私は最初の人物を追跡し、この人物の右手を使って私が作成したアプリケーションをナビゲートしたいと考えています。Kinect(trackingID)を使用して1人を追跡する方法

私はカーソルを引き継ぐことができるようになりました。今はただ1人だけが追跡されるようにしたいのです。だから、基本的に1人の人がプログラム内をナビゲートしているときに、その人の後ろを歩いている人や、この人を見ている人がいると、彼らが動くとキネクトは他人を認識してはなりません。

これを実装するにはどうすればいいですか、それはtrackingIdで何かわかりますが、何ですか? :s

 foreach (SkeletonData s in allSkeletons.Skeletons) 
     { 

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

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

答えて

6

すべての追跡対象者にはプレーヤーインデックスがあります。他の指標を持つプレイヤーは無視してください。
プレーヤーインデックスは、深度ストリーム画像内のデータの一部です。私は全くお勧めします http://www.codeproject.com/KB/dotnet/KinectGettingStarted.aspx

を:

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

もっとに関する情報についてはこちらを参照してください:あなたが正しくあなたのKinectランタイムを初期化する必要があり、この情報を取得するために

int playerIdx = depthFrame16[i16] & 0x07; 

:あなたはそれを抽出する必要がありますMSからのこのビデオチュートリアル: http://research.microsoft.com/apps/video/?id=152249

ShapeGameDem SDKに付属しているものは、どのように動作するのかを見ることができます。 (彼らはただ、アレイ内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

実際には、私はプレーヤーのクラスを作ったのですか? このクラスでは、playerIDを格納します。このplayerIDとこのplayerIDにはスケルトンの配列が格納されていますか? – Letoir

+0

私はそれをチェックしました、これは、私はプレーヤーのクラスを作成しなければならないことを意味し、その骨のクラスは、ただ一つの人の行動を追跡する。それはsimpelerすることができませんでしたそれが見える:) – Letoir

+0

実際には、このコードは、ShapeGameからです。あなたのコードでは、allSkeletons変数はすべてのプレーヤーのリストを保持します。すべてのプレーヤーのインデックスを識別子として使用する場合は、他のプレーヤーをスキップすることができます。 –

関連する問題