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は誰かがそこにいることを知っていますが、彼らのスケルトンを積極的に追跡していません。ループ内のckeckもforeach探したい場合は、更新できます。

于 2012-11-22T06:04:22.830 に答える