1

我试图让我的 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);
            }

        }
    }
4

1 回答 1

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 。

于 2012-11-22T06:04:22.830 回答