-2

Kinectを使用して、ユーザーを監視し、プログラムの出力としてユーザーが歩いている方向を示すプログラムを作成しようとしています。

つまり、ユーザーが前に歩いている場合、出力は次のようになります。UP

0    <=  8 <=        // the user (8) is walking forward  (<=) to the camera (0=kinect)

ユーザーが戻ってきた場合、出力はDOWNになっているはずです。ユーザーが左に歩いている場合、出力はLEFTになります。そして、RIGHTについても同じことが言えます。

私が持っているものまで:

    private static  KinectSensor kinectSensor;
    static void Main(string[] args)
    {
        kinectSensor = KinectSensor.KinectSensors[0];
        kinectSensor.SkeletonStream.Enable();
        kinectSensor.Start();
        kinectSensor.SkeletonFrameReady += kinectRuntime_SkeletonFrameReady;

        while (true) { }
    }

    private static Skeleton[] data;
    static void kinectRuntime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
    {
        using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
        {
            if (skeletonFrame != null)
            {
                if ((data == null) || (data.Length != skeletonFrame.SkeletonArrayLength))
                    data = new Skeleton[skeletonFrame.SkeletonArrayLength];
                skeletonFrame.CopySkeletonDataTo(data);

                foreach (Skeleton ske in data)
                {
                    if (ske.TrackingState == SkeletonTrackingState.Tracked)
                    {
                        var joints = ske.Joints;

                        foreach (Joint joint in ske.Joints)
                        {
                            if (joint.JointType == JointType.HandLeft)
                            {
                                Console.WriteLine(joint.Position.X.ToString(".##"));
                                Console.WriteLine(joint.Position.Y.ToString(".##"));
                                Console.WriteLine(joint.Position.Z.ToString(".##"));
                            }
                        }
                    }
                }
            }
        }
    }

そして、これはあなたの左手の位置を教えてくれます。Kinectライブラリについてはよくわからないので、これを行うには少し助けが必要です。

投稿を見たことがありますが、これがどのように役立つのかまだわかりません。

4

2 に答える 2

3

すべての関節にはX、Y、Z値があるため、関節のZ座標を監視するのと同じくらい簡単に、前方と後方(上下)を検出できます。左右の検出は、X座標値を監視するのと同じくらい簡単です。明らかに、誰かが各軸で排他的に移動することを期待するのは難しいので、少しのバッファルームが必要になります。

Spine歩くと手が振れるので、監視するのに良い関節かもしれません。最後の3つまたは4つのスケルトンフレームを比較して、ユーザーが移動しているように見える方向を確認し、それを必要な方向にマッピングするだけです。

于 2012-04-17T02:37:12.043 に答える
1

ある方向への動きをチェックするには、関節の履歴をしばらく保持する必要があります。たとえば、最後の0.5秒からの最後の16フレーム。それがある場合は、関節の実際の位置(HipCenterなど)を履歴と比較して、動きの方向を分析できます。3つの軸すべてをチェックすると、ユーザーが右、左、前、後ろに移動していると言えます。彼はジャンプしているのですか、それともしゃがんでいるのですか。

このような履歴を作成するには、いくつかの構造体のリストを作成できます。構造体にはタイムスタンプが必要です。タイムスタンプを使用すると、0.5秒より古いエントリを削除できるため、リストが大きくなることはありません。すべてのフレームでリストをループに入れ、ジョイントの位置を比較して各要素を実際の位置と比較します

于 2012-04-17T06:04:39.100 に答える