1

Windows Kinect SDK 1.5 で Kinect を使用してゲームを開発しています。Kinect カメラを机の上に置き、Kinect に向かって横向きに立っています。図1 、図2のように選手の骨格を表示したい。 ここに画像の説明を入力 図1 ここに画像の説明を入力 図2

これらには、Kinect Skeleton Stream によって検出された関節の位置が必要です。しかし、ほとんどの場合、プレイヤーが横向きに立っていると、後ろに隠れている関節が Kinect によって検出されません。図 1 に示すように、腕を重ねたときに、隠れている腕の関節が画面に表示されないようにします。左腕の関節を表示したいだけです。もう 1 つの状況は、図 2 に示すように通常の方法で腕を置いたときに、両方を表示したい場合です。

私のアイデアは、位置情報と関節の追跡状態を使用して、腕が体の別の部分の後ろにあるかどうかを判断することです (オーバーラップには、腕と腕、腕と体、腕と頭、腕と脚など、さまざまな種類があります)。 . しかし、Kinect によって追跡されない関節を表示しないだけでは十分ではないと思います。2 つの手首、2 つの肘、2 つの肩の間の距離を計算することで、2 つの腕が重なっているかどうかを検出できるかもしれません。2 つの手首と 2 つの肘の間の距離がすべてしきい値内にある場合、両方の腕のオーバーラップがあり、追跡された腕のスケルトンのジョイントを表示できます。

しかし、腕が体の他の部分と重なる方法がたくさんあるという別の問題があり、足もそうです. したがって、このソリューションでは、表示前に非常に多くのしきい値とチェックが必要です。また、このソリューションの効果についてはわかりません。

この問題を解決するためのよりクールなアイデアはありますか?

4

2 に答える 2

0

これはKinect の横方向のスケルトン トラッキングの正確な複製です。そのため、Kinect の機能と、これが機能しない理由、および機能させる方法のいくつかの回避策について説明しているOutlaw Lemur's answerを見てください。基本的に彼は、Kinect は人々の正面または背面を追跡するように作られていると言っていますが、それを正面として解釈します。Kinect は関節の半分しか見ることができず、残りを推定する必要があるため、横方向の追跡は機能せず、悪い結果につながります。

于 2012-11-04T00:07:57.470 に答える
0

SkeletonBasics-WPFv1.5 SDK Toolkit のサンプルに付属のサンプルをご覧ください。あなたがやりたいことと同様のアクションが表示されます。

最も興味深いと思われるコード ブロックは次のとおりです。

foreach (Joint joint in skeleton.Joints)
{
    Brush drawBrush = null;

    if (joint.TrackingState == JointTrackingState.Tracked)
    {
        drawBrush = this.trackedJointBrush;
    }
    else if (joint.TrackingState == JointTrackingState.Inferred)
    {
        drawBrush = this.inferredJointBrush;
    }

    if (drawBrush != null)
    {
        drawingContext.DrawEllipse(drawBrush, null, this.SkeletonPointToScreen(joint.Position), JointThickness, JointThickness);
    }
}

チェックに注意してJointTrackingState.Inferredください。このデモでは、関節は引き続き表示されますが、黄色に変わります。あなたの場合、それらを非表示にすることができます。 JointTracingState列挙型もありNotTracked、状況によってはこれも役立つ場合があります。

この例の場合、ボーンも、Tracked.

ちなみに、これを書いている時点で、公式の Kinect for Windows SDK は v1.6 です。更新を検討する必要があるかもしれません。

于 2012-10-26T22:01:56.947 に答える