使用Kinect创建一个简单静态手势的手势定义-第2部分

本文关键字:定义 2部 静态 简单 创建 Kinect 一个 使用 | 更新日期: 2023-09-27 18:25:52

我已经实现了示例代码,并使用了'Joint.ID'而不是'Joint.Type',我只需要弄清楚是否/如何在循环中连续检查这些代码。任何建议都将不胜感激。谢谢

建议注释:-

  1. void newSensor_AllFramesReady在颜色/深度/骨架同步时激发我不太确定把这个方法放在哪里

  2. checkHand方法需要在线程的每一轮中进行检查。

到目前为止的代码:-

void newSensor_AllFramesReady(object sender, SkeletonFrameReadyEventArgs e)
{
    //Get a skeleton
    SkeletonFrame skeletonSet = e.SkeletonFrame;
    SkeletonData skeleton = (from s in skeletonSet.Skeletons
                             where s.TrackingState == SkeletonTrackingState.Tracked
                             select s).FirstOrDefault();
    if (skeleton == null)
    {
        return;
    }
    else if (skeleton != null)
    {
        checkHand(skeleton.Joints[JointID.Head], skeleton.Joints[JointID.HandRight], skeleton.Joints[JointID.HandLeft]);
    }
}
public void checkHand(Joint head, Joint rhand, Joint lhand)
{
    if (rhand.Position.X > head.Position.Y)
    {
        MessageBox.Show("Right hand up!");
    }
    else if (lhand.Position.Y > head.Position.Y)
    {
        MessageBox.Show("Left hand up!");
    }
}

使用Kinect创建一个简单静态手势的手势定义-第2部分

确保将newSensor_AllFramesReady指定为AllFramesReady事件的事件处理程序。没有必要把它放在循环中。newSensor_AllFramesReady每秒将被调用30次(或kinect的刷新率)。

Kinect.AllFramesReady += new EventHandler<AllFramesReadyEventArgs>(newSensor_AllFramesReady);