隠れマルコフモデルによるジェスチャー認識


8

現在、ジェスチャー認識システム(Androidアプリケーション用)に取り組んでいます。手の輪郭を抽出できる画像処理段階が完了したと思います(今のところ、背景の減算を避けるために手袋を着用しています)。

手の楕円/長方形、重心も手の「重要な」形状特徴として取得しています。

私の問題は、隠れマルコフモデルによる画像の分類の前の次の段階が何であるかを示す多くの文献がないことです。この「特徴抽出」の段階は非常にあいまいです。

現在、コンターの角度のリストを取得しています(これは、限られた数の角度を取得するために概算されています)

問題は、私が次に何をすべきかについて無知であることです。「HMMを使用した形状分類」として文献を検索しても、次に何をしたらよいかわかりません。

HMMのツールとして、JaHMMを使用する予定です。しかし、この分類段階への入力が何になるかわからないので、この段階ではツールを試す方法がわかりません!

これは私の手から得られる情報を示しています

高速フーリエ記述子、曲率記述子、Bスプラインなど、いくつかの文献で見つけた関数のリストに遭遇しました。しかし、私はこれらの関数を現在のデータ(つまり、角度のリスト、たとえば-63、154、3、23、54など)に適用する方法については無知です。


更新1:

情報をくれてありがとう。@ピーター・K

ポーズについて:私は指で綴られたアメリカ手話の単語のセット、例えば「犬」->「d」「o」「g」(3つの状態); しかし、何をするか決めていない瞬間。

私は現在、以下のような、どのような種類の情報を抽出する必要があるかを確認するために、いくつかの論文を読んでいます。

  • 手の重心
  • 動きの角度
  • 特定のポイントから手の輪郭の別のポイントまでの距離(など)

今、私がやりたいことを示しているように見える論文に遭遇しました、私にはわかりません:

http://espace.library.uq.edu.au/eserv.php?pid=UQ:10700&dsID=n0273.pdf

私は現在セクション5-ベクトル量子化を読んでいます(この用語を以前聞いたことはありますが、実際にそれが何であるかはわかりません。図5では、複雑なアルゴリズムがあるようです。正しく理解すれば、達成した値のセットを変換します。手(前述)から1桁に変換します。これを観測シーケンスとして使用して、1つの特定の標識のHMMをトレーニングできます。私は正しい道を進んでいると思いますか?(私はAndroid、(NDK)で作業しています) 、JaHMMをHMMツールとして見つけ、OpenCVを画像処理に使用していることを発見しました。

@Peter K.回答ありがとうございます。データ生成については、個人データセットを作成した後、このペーパーの手順に従うことを計画していました(セクション4および5) http://www.i.ci.ritsumei.ac.jp/~shimada/papers/vi02 -tanibata.pdf


更新2:ジェスチャーは{姿勢a、姿勢b、姿勢c}で構成されることを覚えておいてください

私は今、何らかの形の分類アルゴリズムを利用する必要があると考えています。つまり、現在、一連の特徴ベクトルがあります。

姿勢A:[周囲の楕円の角度、高さ:幅の比率]

  • 0.802985 33.909615
  • 0.722824 31.209663
  • 0.734535 30.206722
  • 0.68397 31.838253
  • 0.713706 34.29641
  • 0.688798 30.603661
  • 0.721395 34.880161

姿勢B:[姿勢Aと同じ構造]

  • 0.474164 16.077467
    • 0.483104 14.526289
    • 0.478904 14.800572
    • 0.483134 14.523611
    • 0.480608 14.41159
    • 0.481552 15.563665
    • 0.497951 15.563585

等..

特徴ベクトルをフィードするときに、「A」、「B」などの単純なシンボルを取得したいと思います。

これは可能ですか?ここにも質問を移行しました:https : //stackoverflow.com/questions/15602963/vector-quantization-algorithms-used-to-provide-observation-sequences-for-hidden


1
「ジェスチャー」で何を意味するかを定義する必要があります。手のポーズですか?または手の動き?または手の指の動き?この猫の皮をむく方法はたくさんあります...
ピーターK.

この場合、私は(ある時点で:片手)アメリカのサインのlangaugeの基本的なシンボルは基本的に手紙の指文字から始まり、運動や姿勢の両方を目指していますジェスチャー
テスト

1
読んで、私が思いつくものを見るでしょう。応答するまでに時間がかかる場合があります。この空間を見て。
Peter K.

こんにちは私はAndroid Open CVでハンドジェスチャー認識を行うことを試みています。私は両方のツールの初心者であり、あなたの経験からのステップやアイデアの手助けをしています。どうもありがとうございます。
user2253346 2014

こんにちは、私があなただったら、私はandroidのopen cvページにあるチュートリアルに従うことから始めます。その前の最初のステップは、AndroidアプリケーションでCコードを実行できるようにネイティブ開発が適切に設定されていることを確認することです(より効率的な結果を得るためにJavaではなくCを使用する場合)
テスト

回答:


5

私はジェスチャー認識(ポーズ認識ではない)にHMMを使用しました。私がしたこと:手を追跡し、空中で手を描いているジェスチャーを認識すると、それを軌跡としてイメージできます。

HMMをシーケンスレコグナイザーとして使用できるため、最初に画像を離散番号シーケンスに変換する必要があります。

認識したいジェスチャーごとに、そのためのHMMをトレーニングする必要があります。

これで、いくつかの既知の単語を含む辞書があります。それぞれが訓練されたHMMです。新しい単語(不明なobdervation)がある場合、辞書の各単語が未知の単語である可能性が高い確率を計算できます。

いくつかの擬似コード:

##################### training phase

examples = [112233, 11233, 123, 1122223333]
word1 = train(example)

examples = [222333, 22222223333, 2222333333]
word2 = train(example)

examples = [124555, 1122445, 1111111222224444555]
word3 = train(example)

dictionary = [word1, word2, word3]


##################### recognition phase

#let's say you have a new unkown word: 12245, you want to know what word of the dictionary it is more likly

unkown = 12245
probabilities = []
for w in word:
    probabilities.append( calculate_prob(unkown) )

さて、これが確率の最大値であるかを確認すると、辞書の最も可能性の高い単語が得られます。

こちらをご覧ください:

http://www.ece.ucsb.edu/Faculty/Rabiner/ece259/Reprints/tutorial%20on%20hmm%20and%20applications.pdf

http://www.codeproject.com/Articles/69647/Hidden-Markov-Models-in-C

http://www.creativedistraction.com/demos/gesture-recognition-kinect-with-hidden-markov-models-hmms/


このような素晴らしい反応をありがとうございました。私はあなたが言ったすべてを理解しました。私の現在の問題は、どのようにして観測値を取得するか、つまり[112223333,222333など]です。つまり、現在のデータを変換するにはどうすればよいですか(例:手の長さと幅+同時に動き+動きの角度など)これらのタイプの数字に?私の編集から、私はおそらく「コード」ベクトルを取得するためにクラスタリングとK平均法を検討していると述べました。あなたのフィードバックは何ですか?本当にありがとうございました!
テスト

1
はい、これは問題です。kmeansを使用しましたが、問題に適合しなかったため、重心を使用し、重心からのeculidean距離でジェスチャーを「離散化」しました。速度とkmeansがフィットする可能性があるようなデータをスマート広告に追加できることを確認してください。申し訳ありません。試してみてください。マシンラーニングで、特定のデータに対していくつかの経験的解決策がうまく機能することが時々ありました。別の解決策を試してください!
nkint 2013年

(opencvでkmeansを使用する方法の例が必要な場合は、質問してください)
nkint

probabillyない良い解決策がありますが、...手を「skeletonize」に試すことができますen.wikipedia.org/wiki/Morphological_skeleton、ここでいくつかのコード:felix.abecassis.me/2011/09/opencv-morphological-skeleton
nkint

それを解決する場合、どうやってそれをどうやって管理したのか教えてください、それは素晴らしい仕事です
:)

3

ポーズ認識から始めましょう。 この紙は、手の境界を追跡し、その境界からの指先検出の数をカウントします。この論文で注意すべきことの1つは、必要な「状態」情報がないことです。姿勢/位置の推定では、HMMはおそらく適切ではありません。

ジェスチャー情報は、問題を解決するためのHMM色域によりよく適合します。ただし、ジェスチャーに使用するデータの種類をもう少し確認する必要があります。あなたが持っているデータを生成するアルゴリズムについてもう少し説明できますか?

問題は、隠れマルコフモデルの正しい構造を選択すると、達成可能な精度にかなりの影響があるということです...警告:PDFリンク!


1
質問の更新を作成しました!情報ありがとうございます。
テスト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.