2012-02-22 4 views
1

Я создал приложение Kinect, используя Kinect SDK и WPF в C#.Создание определения жестов для простого статического жестов с использованием Kinect

Я хочу создать простой метод распознавания статического признака, который выводит Messagebox, когда пользователь поднимает их «rightHand» (JointID.HandRight) на их «голову» (JointID.Head) во время выполнения.

Я знаю, что мне нужно создать определение для этого жеста и запустить его против скелетов каждый раз при запуске события SkeletonFrameReady. Есть ли кто-нибудь, кто может помочь с этим или указать мне в правильном направлении относительно того, какие данные скелета мне нужно хранить/сравнивать, я был бы очень благодарен, спасибо.

ответ

2

Я думаю, что вы должны сравнить начальное положение правой руки с текущим положением правой руки в каждом раунде нити. Например, если вы хотите узнать, поднята ли ваша правая рука или нет, вы должны сравнить положение x и y. Надеюсь, что я понял ваш вопрос. Извините за мой английский!

2

В MS SDK V1 вы должны использовать JointType вместо JointID. Вот очень простой пример.

//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!"); 
    } 
} 
Смежные вопросы