我想通过kinect V2和unity3D获取用户的身高,这段代码不能正常工作我该怎么办?
I want to get user's height by using kinect V2 and unity3D,this code can't work well what should I do?
正在尝试使用 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;
}
根据你的代码,我确实发现了一些问题
- 得到总高度的总和需要当时跟踪所有关节。
- 为什么要跟踪高度需要跟踪所有关节?你应该只需要头和脚
- 你仔细检查每个关节是否被跟踪
- 对每个 foot/knee/hip 关节使用左侧会给你带来数学错误。它们在一个方向上偏移(因为我们的脚不在 body 的中心)
- 我会同时跟踪左右 foot/knee/hip,然后在 x 轴上找到两者的中心。
- 如果您使用两个向量的大小,并且一个膝盖在您的臀部前方很远,它会给它一个夸大的值。
- 我只会使用你的kinect关节的y位置来计算高度。
正在尝试使用 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;
}
根据你的代码,我确实发现了一些问题
- 得到总高度的总和需要当时跟踪所有关节。
- 为什么要跟踪高度需要跟踪所有关节?你应该只需要头和脚
- 你仔细检查每个关节是否被跟踪
- 对每个 foot/knee/hip 关节使用左侧会给你带来数学错误。它们在一个方向上偏移(因为我们的脚不在 body 的中心)
- 我会同时跟踪左右 foot/knee/hip,然后在 x 轴上找到两者的中心。
- 如果您使用两个向量的大小,并且一个膝盖在您的臀部前方很远,它会给它一个夸大的值。
- 我只会使用你的kinect关节的y位置来计算高度。