1

私はかなり長い間、WPF で Kinect V2 を使用してきました。HighDefinitionFaceFrameSource現在、 と を介してカラー ストリームから顔の輪郭を抽出するモジュールを作成しましたHighDefinitionFaceFrameReader。基本的に、面の周りのパスを計算するためにfaceModelfaceAllignmentプロパティを使用しています。HightDefinitionFaceFrameResultそれをカラー ストリームにマッピングすると、人物の顔のイメージが得られます。次に、カラー ストリームを に描画WriteableBitmapし、XAML ウィンドウに表示します。パスデータは今のところ破棄されます。

この方法は、一人の場合にうまく機能します。しかし、6 人に拡張しようとすると、ビジュアライゼーションのレンダリングが遅くなり、停止してしまいました! 顔フレームは通常どおり到着しているように見えるため、レンダリングのみが影響を受けているようです。CPU とメモリの使用量も影響を受けていません。これは、複数の高解像度の顔フレームを処理すると発生するようです。

また、Microsoft SDK の例では、HighDefinitionFaceFrameSource. おそらく、SDK に制限がありますか?

HignDefinitionFaceFrameSource&で 6 人を追跡できた人はいReaderますか?

4

1 に答える 1

1

HighDefinitionFaceFrameSourceさらにテストした結果、Kinect SDK では複数の にトラッキング ID を設定できないことが明らかになりました。そのため、一度に追跡できるのは 1 つの顔だけのように思えます。ここで私が間違っている可能性があることに注意してください。おそらく、Microsoft の Kinect チームの誰かがより決定的な答えを出すことができますが、それが私が見つけたものです。

これが、この制限を回避する方法です。追跡されたボディのリストを反復処理し、各顔の追跡 ID を個別に設定しています。これにより、顔をしばらく追跡し、必要なすべてのデータを取得し、追跡を停止して、次の体の顔に移動して繰り返すことができます。もちろん、これには多くの欠点があります。顔追跡データ ストリームは本来あるべきほど「流動的」ではなく、ビジュアライゼーションにはデータの「ギャップ」があります。小さいながらも目立ちます。ただし、これは単なる回避策であり、私はまだより良い解決策を探しています.

Sergio さんのコメントに応えて、最新の有効な追跡 ID を割り当てることで、顔をアクティブとして設定できます。

        // update the face frame source to track this body

        if (FaceFrameSources[bodyFrameIndex].TrackingId != trackingId)
        {
            FaceFrameSources[bodyFrameIndex].TrackingId = trackingId;
        }


        //set all the tracking face data to false
        // update the high definition face frame source to track this body / face

        if (_highDefinitionFaceFrameSources[bodyFrameIndex].TrackingId != trackingId)
        {
            _highDefinitionFaceFrameSources[bodyFrameIndex].TrackingId = trackingId;
        }

ここで、trackingId は Body オブジェクトのリストからの現在の追跡 ID です。スケルトン トラッカーは、フレームごとにこの値を更新し続ける必要があります。

TrackingIdの値を 0 に設定するHighDefinitionFaceFrameSourceと、そのオブジェクトの追跡が無効になります。

于 2016-02-05T18:37:01.977 に答える