2012-02-22 7 views
1

私はKinect SDKとWPF for C#を使用してKinectアプリケーションを作成しました。Kinectを使用した単純な静的ジェスチャーのジェスチャー定義の作成

実行時にユーザーが 'Head'(JointID.Head)ジョイントを介して 'rightHand'(JointID.HandRight)ジョイントを上げると、メッセージボックスを出力する単純な静的ジェスチャ認識メソッドを作成したいと考えています。

私は、このジェスチャーの定義を作成し、SkeletonFrameReadyイベントが発生するたびにスケルトンに対してこれを実行する必要があることを知ります。これを手助けできる人がいますか、私は正しいスケルトンのデータを保存/比較する必要があるかについて私に指摘します。私は非常に感謝します。

答えて

2

私はあなたの右手の最初の位置をスレッドの毎回の右手の現在の位置と比較しなければならないと思います。たとえば、右手が上がっているかどうかを確認するには、xとyの位置を比較する必要があります。私はあなたの質問を理解したことを願っています。私の英語のために申し訳ありません!

2

MS SDK V1ではJointIDの代わりにJointTypeを使用する必要があります。ここには非常に簡単なサンプルがあります。

//this event fires when Color/Depth/Skeleton are synchronized 
void newSensor_AllFramesReady(object sender, AllFramesReadyEventArgs e) 
{ 
    //Get a skeleton 
    Skeleton skeleton = GetFirstSkeleton(e); 

    if (skeleton == null) 
    { 
     return; 
    } 
    else if (skeleton != null) 
    { 
     checkHand(skeleton.Joints[JointType.Head], skeleton.Joints[JointType.HandRight], skeleton.Joints[JointType.HandLeft]); 
    } 
} 

Skeleton GetFirstSkeleton(AllFramesReadyEventArgs e) 
{ 
    using (SkeletonFrame skeletonFrameData = e.OpenSkeletonFrame()) 
    { 
     if (skeletonFrameData == null) 
     { 
      return null; 
     } 

     skeletonFrameData.CopySkeletonDataTo(allSkeletons); 

     //get the first tracked skeleton 
     Skeleton first = (from s in allSkeletons 
          where s.TrackingState == SkeletonTrackingState.Tracked 
          select s).FirstOrDefault(); 

     return first; 
    } 
} 

public void checkHand(Joint head, Joint rhand, Joint lhand) 
{ 
    if (rhand.Position.Y > head.Position.Y) 
    { 
     MessageBox.Show("Right hand up!"); 
    } 
    else if (lhand.Position.Y > head.Position.Y) 
    { 
     MessageBox.Show("Left hand up!"); 
    } 
} 
関連する問題