限制Kinect检测距离

时间:2012-11-25 02:46:53

标签: c# .net vb.net kinect

我正在构建一个kinect驱动的.net应用程序,是否可以限制kinect的检测距离?

就像我有一个由kinect控制的交互式购物窗口,我只想要在地面上踩到X标记的人被检测到,或者让我说距离传感器3米远的人是检测。 如果有人比3米更近或更远,那么它就不会发现他。

我使用VB.Net进行编码,虽然大部分代码都是从C#翻译过来的,但我们非常感谢任何帮助。

感谢。

2 个答案:

答案 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厘米的公差。