c# - 体感 SDK 2.0 : how to track one body

标签 c# xaml kinect

我正在使用 Kinect SDK 2.0,我只想跟踪一个骨架。

我如何实现这一目标?

我已经在 HD Face Basics 示例中尝试了 FindClosestSkeleton 方法,但这阻止了我的程序更新每一帧,而且我并不完全理解它。

有人可以解释并告诉我如何做到这一点吗?

最佳答案

以下代码基于BodyBasics-WPF 示例。

public class KinectManager
{
    // Active Kinect sensor
    private KinectSensor kinectSensor = null;

    // Reader for body frames
    private BodyFrameReader bodyFrameReader = null;

    // Array for the bodies
    private Body[] bodies = null;

    // index for the currently tracked body
    private int bodyIndex;

    // flag to asses if a body is currently tracked
    private bool bodyTracked = false;

    public KinectManager()
    {
        this.kinectSensor = KinectSensor.GetDefault();

        // open the reader for the body frames
        this.bodyFrameReader = this.kinectSensor.BodyFrameSource.OpenReader();

        // open the sensor
        this.kinectSensor.Open();

        this.bodyFrameReader.FrameArrived += this.Reader_FrameArrived;
    }

    // Handles the body frame data arriving from the sensor
    private void Reader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
    {
        bool dataReceived = false;

        using (BodyFrame bodyFrame = e.FrameReference.AcquireFrame())
        {
            if (bodyFrame != null)
            {
                if (this.bodies == null)
                {
                    this.bodies = new Body[bodyFrame.BodyCount];
                }
                bodyFrame.GetAndRefreshBodyData(this.bodies);
                dataReceived = true;
            }
        }

        if (dataReceived)
        {
            Body body = null;
            if(this.bodyTracked) {
                if(this.bodies[this.bodyIndex].IsTracked) {
                    body = this.bodies[this.bodyIndex];
                } else {
                    bodyTracked = false;
                }
            }
            if(!bodyTracked) {
                for (int i=0; i<this.bodies.Length; ++i)
                {
                    if(this.bodies[i].IsTracked) {
                        this.bodyIndex = i;
                        this.bodyTracked = true;
                        break;
                    }
                }
            }

            if (body != null && this.bodyTracked && body.IsTracked)
            {
                // body represents your single tracked skeleton
            }
        }
    }
}

关于c# - 体感 SDK 2.0 : how to track one body,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835910/

相关文章:

c# 为一组对象获取属性并确保所有对象的值相同

c++ - Microsoft Kinect,从 3D 深度图到 2D

c# - MapFromSkeletonPoint 在 Kinect 中已过时

c# - WPF ListViewItem 事件未在触摸屏上正确触发

java - 简单的 OpenNI getUserPixels

c# - 卡在管道上的 WaitForConnectionAsync()

c# - 类中没有泛型引用的泛型类型方法

c# - services.AddSwaggerGen() 给出错误

c# - 以编程方式将焦点设置为 Windows Phone 中的文本框

c# - 后面生成的代码抛出 System.ArgumentNullException