openFrameworksでジェスチャ認識

最近いろいろと試しているGRTというジェスチャ解析ライブラリの紹介です。

ジェスチャ認識とはなんぞや

理系じゃないので、正しくはないですが、ふんわりこんな感じなのかな↓

ジェスチャ認識とは

1.パソコンに正解パターンを沢山教える。→ Classfication  
2.入力した信号が、どのパターンに似ていたか判定する。→ Recognition  

この2つのフェーズに別れてやるらしい。論文を読むと妙に難しい単語で挫けそうになるのだけど。 学習フェーズ、判定フェーズの2つがあるってことを知っておけば、わかりやすくなります。

その上で、素敵なスライドのご紹介。流石MIT
IAP Workshop: A Hands-On Introduction to Gesture Recognition & Machine Learning

そしてこのPDFがとてもまとまっている。 [IAP Session 1] (http://www.nickgillian.com/archive/teaching/workshops/mitiap2013/IAP_Session1.pdf)

本当は検出器に掛ける前に、
カルマンフィルタ、ローパスフィルタやら入力する信号の特性に応じてフィルタリングかけたり、FFTに変換とかいろいろ下ごしらえをするらしい。

アルゴリズムも色いろある。
AdBoostとか、SVMとか…ふむふむ分からん。
僕がよくやりたいパターンだと、9軸センサからジェスチェ認識とかやりたいので、Dynamic Time Warpingがよさげ。

やってみる。

ジェスチャ認識のライブラリは他にWiigeeとか見つかったのですが、アルゴリズムが一種類HMM(隠れマルコフモデル)だけ。上記でも使っているGRTを使ってみます。

GRTソースコードはこちらから。
https://code.google.com/p/gesture-recognition-toolkit/source/checkout

今回実行したプログラムはこちら。
http://www.nickgillian.com/wiki/pmwiki.php/GRT/OpenframeworksDTWExample

Rキーで、レコード開始。正解パターンを教えます。一文字につき5~10回繰り返す。
スクリーンショット 2013-12-15 19.00.10.pngスクリーンショット 2013-12-15 19.00.17.png

スクリーンショット 2013-12-15 19.00.57.pngスクリーンショット 2013-12-15 19.01.12.png

スクリーンショット 2013-12-15 19.02.38.pngスクリーンショット 2013-12-15 19.02.44.png

Tキーで教えこむ。
ちょっと待つとリアルタイムで解析するようになります。
全部Rとして認識成功!

スクリーンショット 2013-12-15 19.05.10.pngスクリーンショット 2013-12-15 19.05.24.pngスクリーンショット 2013-12-15 19.04.48.png

今回はマウス座標で2次元だったけど、yaw,pitch,rollでの解析とか。加速度での解析とかができそう。

// line:
trainingData.setNumDimensions( 2 ); // こんかいはx,y

おまけ

GRT部分を単体のアプリケーションにして、OSC経由で使える。Processingのサンプルが含まれてますが、OSC経由なら別にiPhoneの加速度センサだって簡単に。面白いことができそう。
http://www.nickgillian.com/wiki/pmwiki.php/GRT/Download