Kinect侧身骨架展示

时间:2012-10-26 19:18:29

标签: c# kinect

我正在使用Kinect和Windows Kinect SDK 1.5开发游戏。 Kinect相机放在桌子上,我正站在Kinect旁边。 我想显示玩家的骨架,如图1和图2所示。 enter image description here 图1 enter image description here 图2

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

我的想法是使用位置信息和跟踪关节状态来判断一只手臂是否在身体的另一部分后面(有多种重叠,手臂,手臂,手臂头,臂到腿)。但我不认为只是不显示Kinect未跟踪的关节就足够了。也许我们可以通过计算两个手腕,两个​​肘部和两个肩膀之间的距离来检测两个手臂是否重叠。如果两个手腕和两个肘部之间的距离都在阈值范围内,则两个臂都有重叠,我们可以只显示被跟踪臂骨架的关节。

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

你们有没有更好的想法解决这个问题?

2 个答案:

答案 0 :(得分:0)

查看v1.5 SDK Toolkit示例附带的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枚举,根据您的具体情况,这也可能会有用。

在示例的情况下,Bones也仅在Tracked的关节之间绘制。

顺便说一下 - 在撰写本文时,官方Kinect for Windows SDK是v1.6。您可能希望了解更新。

答案 1 :(得分:0)

这是Kinect sideways skeleton tracking的精确副本,所以请看Outlaw Lemur's answer,它解释了Kinect的功能以及为什么这不起作用以及一些尝试解决方法如何获得它上班。从本质上讲,他说Kinect是为了跟踪人们的脸部或背部,但会将其解释为他们的前线。侧向跟踪不起作用,因为Kinect只能看到你的一半关节,并且必须估计其余部分,导致不良结果。