我希望通过使用kinect V2和unity3D来获得用户的身高,这段代码不能正常工作我该怎么办?

时间:2016-07-01 13:34:09

标签: unity3d kinect

尝试使用xbox kinect在Unity中获取用户的高度 下面是我的代码,我无法得到高度 这使用KinectV2接口。

// get User's height by KinectV2 and unity3D `enter code here`   
float  GetUserHeightByLeft(long userid)
{`enter code here`
    float uheight=0.0f;
    int[] joints = new int[9];
    int head = (int)KinectInterop.JointType.Head;
    joints[0] = head;
    joints[1] = (int)KinectInterop.JointType.Neck;
    int shoudlderCenter = (int)KinectInterop.JointType.SpineShoulder;
    joints[2] = shoudlderCenter;
    joints[3] = (int)KinectInterop.JointType.SpineMid;
    joints[4] = (int)KinectInterop.JointType.SpineBase;
    joints[5] = (int)KinectInterop.JointType.HipLeft;
    joints[6] = (int)KinectInterop.JointType.KneeLeft;
    joints[7] = (int)KinectInterop.JointType.AnkleLeft;
    joints[8] = (int)KinectInterop.JointType.FootLeft;
    int trackedcount = 0;
    for (int i = 0; i < joints.Length; ++i)
    {
        if (KinectManager.Instance.IsJointTracked(userid, joints[i]))
        {
            ++trackedcount;
        }
    }
    //if all joints that I need have been tracked ,compute user's height
    if (trackedcount == joints.Length)
    {
        for (int i = 0; i < joints.Length-1;++i)
        {
            if (KinectManager.Instance.IsJointTracked(userid, joints[i]))
            {
                Vector3 start= 100*KinectManager.Instance.GetJointKinectPosition(userid,joints[i]);
                Vector3 end = 100*KinectManager.Instance.GetJointKinectPosition(userid,joints[i+1]);
                uheight += Mathf.Abs(Vector3.Magnitude(end-start));
            }
        }
        //some height kinectV2 can't get  so I add it
        uheight += 8;
    }
        return uheight;
}

1 个答案:

答案 0 :(得分:0)

鉴于您的代码,我确实看到了一些问题

  1. 获得总高度的总和要求在那时跟踪所有关节。
    • 为什么需要跟踪所有关节以跟踪高度?你应该只需要头部和脚部
  2. 您仔细检查是否跟踪了每个关节
  3. 每个脚/膝/髋关节使用左边会给你数学错误。它们在一个方向上偏移(因为我们的脚不在我们身体的中心
    • 我会跟踪右脚和左脚/膝盖/臀部,然后在x轴上找到两者的中心。
  4. 如果你正在使用两个向量的大小而一个膝盖远在你的臀部前面,它会给它一个膨胀的值。
    • 我只会使用你的kinect关节的y位置来计算身高。