web-dev-qa-db-ja.com

Kinectの横方向のスケルトントラッキング

現在、関節間の角度を測定するためにMicrosoftKinectを使用しています。ほとんどの測定は正しく機能しています。人が横向きに(椅子に)座っているときはいつでも、Kinectはスケルトンを正確に追跡しません。私の問題を説明するために、Kinect深度ビューの写真を3枚追加しました。

Seated sideways measurement with skeleton tracking

Seated sideways measurement without skeleton tracking

Sideways measurement with skeleton tracking

ご覧のとおり、3つの測定値のうち2つが「正しく」機能します。脚を持ち上げるたびに、Kinectはスケルトンの追跡を正しく停止します。誰かがこの問題の解決策を持っていますか、それともこれはKinectの単なる制限ですか?

ありがとう。

更新1:スクリーンショット2に示されているこれらの追跡された関節のJointTrackingState-EnumerationInferredとしてマークされていますが、深度ビューは私の全身を追跡しています。

更新2:スクリーンショット2で、緑色で強調表示された前脚を追跡しようとしています。もう一方の足が追跡されていないことは知っていますが、これは問題ではないと思います。

更新3:次のコードはスケルトンを選択します:

private Skeleton StickySkeleton(Skeleton[] skeletons)
{
    if (skeletons.Count<Skeleton>(skeleton => skeleton.TrackingId == _trackedSkeletonId) <= 0)
    {
        _trackedSkeletonId = -1;
        _skeleton = null;
    }

    if (_trackedSkeletonId == -1)
    {
        Skeleton foundSkeleton = skeletons.FirstOrDefault<Skeleton>(skeleton => skeleton.TrackingState == SkeletonTrackingState.Tracked);

        if (foundSkeleton != null)
        {
            _trackedSkeletonId = foundSkeleton.TrackingId;
            return foundSkeleton;
        }
    }

    return _skeleton;
}

スケルトンが追跡されるときはいつでも、そのデータはジョイントポイントの描画とジョイント間の角度の計算に使用されます。

更新4:私は「ブロック」に座ってテストしました。椅子よりもはるかに単純化されています。残念ながら、Kinectはまだ同じように動作します。

2つのスクリーンショットの下:

Sitting on a block 1

Sitting on a block 2

42
Velth

Kinectは、独自のSDKの制限により、スケルトンを正確に追跡できません。基本的に、デバイスがスケルトンを拾おうとするたびに、それは常に正面を向いていると想定します。ジョイントを保存する場合は、トップダウンビューを取り、x座標とz座標をプロットします。これは非常に簡単に確認できます。

0
user2299275

私もKinectを使用しています。膝の関節角度の関節角度の値を取得できますが、推定値が表示されていないため、直面しているように見える問題はKinect自体にあります。スケルトンボディ全体を使用して膝を追跡すると、各関節の動きのすべての値が得られることを願っています。

0
user2823510