【问题标题】:Kinect sideways skeleton displayKinect 侧身骨架展示
【发布时间】:2012-10-26 19:18:29
【问题描述】:

我正在使用带有 Windows Kinect SDK 1.5 的 Kinect 开发游戏。 Kinect 摄像头放在桌子上,我侧身站在 Kinect 旁边。 我想显示玩家的骨架,如图 1 和 2。 图1 图2

这些需要 Kinect Skeleton Stream 检测到的关节位置。但在大多数情况下,当玩家侧身站立时,Kinect 无法检测到隐藏在后面的某些关节。如图 1 所示,当我的手臂重叠时,我不希望隐藏手臂的关节显示在屏幕上。我只想显示我左臂的关节。另一种情况是,当我以正常方式放置手臂时,如图 2 所示,我想同时显示它们。

我的想法是利用关节的位置信息和跟踪状态来决定一个手臂是否在你身体的另一部分后面(有很多种重叠,arm-arm,arm-body,arm-head,-arm腿)。但我认为仅不显示 Kinect 未跟踪的关节是不够的。也许我们可以通过计算两个手腕、两个肘部和两个肩膀之间的距离来检测两个手臂是否重叠。如果两个手腕和两个肘部的距离都在阈值之内,说明双臂有重叠,我们可以只显示被跟踪的手臂骨骼的关节。

但还有一个问题是手臂与身体的其他部位重叠的方式有很多,腿也是如此。所以这个解决方案在显示之前需要这么多的阈值和检查。此外,我不确定这个解决方案的效果。

你们有更酷的想法来解决这个问题吗?

【问题讨论】:

标签: c# kinect


【解决方案1】:

查看 v1.5 SDK 工具包示例附带的 SkeletonBasics-WPF 示例。它会向您显示您想要执行的类似操作。

可能最感兴趣的代码块是这个:

foreach (Joint joint in skeleton.Joints)
{
    Brush drawBrush = null;

    if (joint.TrackingState == JointTrackingState.Tracked)
    {
        drawBrush = this.trackedJointBrush;
    }
    else if (joint.TrackingState == JointTrackingState.Inferred)
    {
        drawBrush = this.inferredJointBrush;
    }

    if (drawBrush != null)
    {
        drawingContext.DrawEllipse(drawBrush, null, this.SkeletonPointToScreen(joint.Position), JointThickness, JointThickness);
    }
}

注意JointTrackingState.Inferred 检查。在这个演示中,关节继续显示,但它们变成黄色。在您的情况下,您可以隐藏它们。 JointTracingState 也有 NotTracked 枚举,根据您的情况,它也可能有用。

在本例中,骨骼也仅在 Tracked 的关节之间绘制。

顺便说一句 - 在撰写本文时,Windows SDK 的官方 Kinect 是 v1.6。您可能需要考虑更新。

【讨论】:

  • 感谢您的评论。我具有为跟踪、参考和未跟踪关节绘制不同颜色的功能。看我图中的灰点是参考关节(蓝点是跟踪关节)。
  • 您的问题是隐藏隐藏的关节和骨骼。推断关节是 Kinect 看不到(即,它们被阻挡)但正在猜测的关节,而 NotTracked 关节只是在视野之外。查看 Inferred(以及它们的 z-index 与已知关节相比)将告诉您它们在何处以及如何被阻塞。还是我错过了你的问题?
  • 感谢您的评论。所以推断的关节也有 x,y,z 位置信息,但 Kinect 看不到它们。除了被阻塞之外,您是否知道任何其他可能导致推断关节的情况?
    我发现有时即使关节和 Kinect 之间没有障碍,也会推断出关节。
  • 只要 Kinect 失去对特定关节的跟踪,就可能发生推断关节。不一定是因为它是隐藏的,只是 Kinect 丢失了它。骨架跟踪器“猜测”它在哪里(因此“推断”)并继续提供它认为关节所在位置的 x/y/z 坐标。
【解决方案2】:

这是Kinect sideways skeleton tracking 的完全相同的副本,所以只需查看Outlaw Lemur's answer,它解释了 Kinect 的功能以及为什么它不起作用,以及一些关于如何让它起作用的变通方法的尝试。从本质上讲,他是说 Kinect 是用来跟踪人们的正面或背面,但会将其解释为他们的正面。侧向跟踪不起作用,因为 Kinect 只能看到你一半的关节,并且必须估计其余的关节,从而导致糟糕的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多