2012-02-22 2 views
1

Kinect SDK 및 WPF for C#을 사용하여 Kinect 응용 프로그램을 만들었습니다.Kinect를 사용하여 간단한 정적 제스처를위한 제스처 정의 만들기

사용자가 런타임시 '헤드'(JointID.Head) 조인트를 통해 'rightHand'(JointID.HandRight) 조인트를 올리면 MessageBox를 출력하는 간단한 정적 제스처 인식 방법을 만들고 싶습니다.

나는이 제스처에 대한 정의를 작성하고 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!"); 
    } 
}