5

Kinect 用に存在するジェスチャ認識ライブラリ (存在する場合) は? 現在、OpenNI を使用してスケルトンの動きを記録していますが、そこから個別のアクションをトリガーする方法がわかりません。

私の問題は、ポーズ検出と同じくらい単純かもしれませんが、それがどれほど難しいかによって、時間ベースの動き (つまり、円を描いて手を動かしているときを検出する) と同じくらい複雑になることもあります。私が見た姿勢検出の例は非常にその場しのぎのものでした。これは、一般的なアルゴリズムを正しく実行するのが難しいためですか?

4

4 に答える 4

5

NITE ライブラリ (OpenNI の上) には、スワイプやその他のジェスチャを検出するためのクラスがありますが、個人的には、C# でベース OpenNI ライブラリと NITE ライブラリの両方を使用するのに問題がありました (AccessViolationExceptions が発生し続けます)。マネージ コードを作成している場合、XnVNITE.net.dll にスワイプ検出機能があります。NITE をインストールすると、PrimeSense/NITE フォルダーの下にあります。

スケルトンとユーザー認識なしで実行できる場合は、PrimeSense NITE インストールに同梱されている冗長ライブラリである ManagedNite.dll ライブラリもあります。ManagedNite.dll にも手/ジェスチャー認識がありますが、スケルトン/ユーザー検出はありません。

それ以外の場合は、提案したように、時間ベースのスワイプ ジェスチャを確実に検出できます。次のような関数を使用して、一連の手のポイントが直線で移動するかどうかを検出できるはずです。

static bool DetectSwipe(Point3D[] points)
{
    int LineSize = 10; // number of points in the array to look at
    int MinXDelta = 300; // required horizontal distance
    int MaxYDelta = 100; // max mount of vertical variation

    float x1 = points[0].X;
    float y1 = points[0].Y;
    float x2 = points[last].X;
    float y2 = points[last].Y;

    if (Math.Abs(x1 - x2) < MinXDelta)
        return false;

    if (y1 - y2 > MaxYDelta)
        return false;

    for (int i = 1; i < LineSize - 2; i++)
    {
        if (Math.Abs((points[i].Y - y1)) > MaxYDelta)
            return false;

        float result =
            (y1 - y1) * points[i].X +
            (x2 - x1) * points[i].Y +
            (x1 * y2 - x2 * y1);

        if (result > Math.Abs(result))
        {
            return false;
        }
    }
    return true;
}

このコードを拡張して、右スワイプと左スワイプを検出できます。また、上記の例では時間の計算も含めていません。最初と最後のポイントの時間を見て、スワイプが一定時間内に完了したかどうかを判断する必要があります。

于 2011-03-25T20:59:34.887 に答える
1

これをチェックしてください:http://kinectrecognizer.codeplex.com/

3D追跡と認識の微調整をサポート..再利用も簡単でなければなりません

于 2011-08-09T07:33:34.147 に答える
0

kinect用のスタンドアロンのスケルトン検出コードに取り組んでいます。http://code42tiger.blogspot.com

無料でリリースする予定ですが、完成までにはまだ長い道のりがあります。あなたの要件が手の位置の追跡だけであるかどうか疑問に思います。OpenNIや他のライブラリを使用しなくても、自分で書くことができます。簡単なヒントが必要な場合は、以下をお読みください。

1)背景の除去(私のブログで説明)2)ブロブの検出(追跡する人を選択するため、ブログでも説明)3)手の追跡(データにユーザーが1人いる場合、手を簡単に見つけることができます体から最も遠い点を考慮します。)4)手の位置を追跡して、ジェスチャーを検出します。(数フレームごとに手を追跡するいくつかの計算により、動きのジオメトリが得られます)

これは(完全ではないにしても)75%の時間で機能するはずです。ユーザーがアルゴの欠陥を見つけようとしない限り、通常のユーザーには機能するはずです。

于 2011-04-05T07:20:41.883 に答える
0

Softkineticは有望に見えますが、SDKはまだ無料で入手できません。

于 2011-03-09T18:34:11.277 に答える