Kinect的SkeletonStream反馈用户未检测到的C#

时间:2012-11-22 05:32:08

标签: c# kinect kinect-sdk

我试图让我的Kinect的SkeletonStream反馈一个数据,告诉我没有人被发现。如果检测到我的骨架,我可以获得饲料,但如果没有人,我无法收到任何通知。有没有办法让kinect告诉我是否没有拾取骷髅?

private void kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
    {
        using (SkeletonFrame frame = e.OpenSkeletonFrame())
        {
            if (frame == null)
            {
                return;
            }
            frame.GetSkeletons(ref allSkeletons);
            if (allSkeletons.All(s => s.TrackingState == SkeletonTrackingState.NotTracked))
                return;

            foreach (var skeleton in allSkeletons)
            {
                if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
                {
                    continue;
                }
                if (skeleton.TrackingState == SkeletonTrackingState.NotTracked)
                {

                }
                foreach (Joint joint in skeleton.Joints)
                {
                    if (joint.TrackingState != JointTrackingState.Tracked)
                        continue;

                    if (joint.JointType == JointType.HipCenter)
                    {
                        hipCenter = joint.Position;
                        AdvanceFunction();
                    }

                }
                sdm.Draw(frame.GetSkeletons(), false);
            }

        }
    }

1 个答案:

答案 0 :(得分:1)

没有什么可以简单地告诉你目前没有跟踪任何骷髅。您需要查看骨架框架以确定是否有任何用户。

你的foreach循环遍历所有骷髅......

foreach (var skeleton in allSkeletons)
{
    if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
    {
        continue;
    }

    ....
}

在第一个if语句中 - 如果当前骨架未被主动跟踪,则循环将移至下一个骨架。如果找到任何骨架,您将要添加标记。例如,您可以执行类似......

的操作
bool hasActivePlayer = false;

foreach (var skeleton in allSkeletons)
{
    if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
    {
        continue;
    }

    hasActivePlayer = true;

    ....
}

if (hasActivePlayer == false)
{
    // you aren't tracking anyone, deal with it
}

您可能也有兴趣查看SkeletonTrackingState.PositionOnly。在这种情况下,Kinect知道某人在那里,但它没有主动跟踪他们的骨架。如果你想查找它,你可以在foreach循环中更新ckeck。