我正在构建一个kinect驱动的.net应用程序,是否可以限制kinect的检测距离?
就像我有一个由kinect控制的交互式购物窗口,我只想要在地面上踩到X标记的人被检测到,或者让我说距离传感器3米远的人是检测。 如果有人比3米更近或更远,那么它就不会发现他。
我使用VB.Net进行编码,虽然大部分代码都是从C#翻译过来的,但我们非常感谢任何帮助。
感谢。
答案 0 :(得分:3)
在你的SkeletonFrameReady回调中,你可能有一个foreach
循环(或类似)循环你的活动骨架。您还应该关注它们是否被积极跟踪。
foreach (Skeleton skeleton in _skeletons) {
// some extra setup stuff here...
if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
return;
// the Kinect is actively tracking the skeleton at this point
...
}
此时您要做的是检查此人的Z
位置。选择你想要用作参考的关节 - 我建议头部,臀部或脊柱。如果Z
位置是您想要的位置,请继续对骨架进行操作。
foreach (Skeleton skeleton in _skeletons) {
....
if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
return;
if (skeleton.Joints[JointType.Spine].Position.Z < _minValue || skeleton.Joints[JointType.Spine].Position.Z > _maxValue)
return;
// if you reach this point, the person is standing a certain distance from the Kinect. Not too close, not too far away.
}
您需要检查Z
位置的范围。它可以是一个很小的范围,但你想给用户足够的空间来移动一点而不让Kinect忽略它们。
更新:您也可以使用Position
中的Skeleton
属性。它对Kinect FOV中整个骨架的计算点有一个x / y / z参考。
答案 1 :(得分:0)
遍历所有检测到的骨架并将骨架设置为主骨架,其中心关节的Z位置位于X标记距离处。考虑60厘米的公差。