「にっこにっこにー」のジェスチャーを認識する
RealSenseには、デフォルトでいくつかのジェスチャーが実装されている。 頑張ってにっこにっこにーのジェスチャーを認識させるようにしたお話。
RealSenseとは
Intelが進めている、NUIのためのセンサデバイスです。通常のカメラ以外に深度センサが搭載されており、顔・手の検出・トラッキング、ジェスチャー、3Dスキャンなどの機能がある。最近市販PCの組み込みが始まっている。
こちらの画像がわかりやすい。
できることは、こちらによくまとまってる。 tips.hecomi.com
RealSenseのジェスチャー認識
RealSenseに組み込まれているジェスチャーは、以下のようなものがある。
グー、チョキ、パー、いいね、などの静的なものから、スワイプ、ピンチ、ウェーブなどの動的なものがある。 それぞれの認識精度はまちまちで、認識されやすかったりされにくかったりする。 これ以外のジェスチャーを認識させるためには、自分で頑張るしかない。
にっこにっこにーの認識
まず前提として、RealSenseでは、手の各点の座標が取れる。 取れる点はこの通り。
点の座標を表示させた状態で、にっこにっこにーを行うと、こんな感じ。
もう少し詳しくみてみる。
片手の状態だと、このように、人差し指と小指は立てたまま、中指と薬指を折り曲げた状態になる。
とすると、にっこにっこにーの手の時は、人差し指と小指のy座標が、中指と薬指のy座標よりも小さくなっている状態である。 とすると、下記の条件を満たす時、手の形をにっこにっこにーと判定すればよい。
各指の先端のy座標をそれぞれ、人y, 中y, 薬y, 小y, 閾値をThとすると、
人y - 中y > Th ・・・①
人y - 薬y > Th ・・・②
小y - 中y > Th ・・・③
小y - 薬y > Th ・・・④
上記の①②③④を全て満たした時、その手はにっこにっこにーのポジションをしている。 きちんと指を立たせていることも大事なので、一定距離以上高さに差がないと判定されないように、閾値Thを用いている。 両手ともこの条件を満たせば、にっこにっこにーをしていると判定できる。
実装
実装は、プロジェクションマッピングなどで使われている、TouchDesignerというツールを用いた。 箱をつなぐだけで簡単にプログラミングができる。 RealSenseやKinnectのセンサデータを、生データをリアルタイムで見ながらデバッグできるので便利。
TouchDesignerの使い方は、こちらのブログがわかりやすい
デモ
こちらが片手のデモ。左側の箱が、先ほどの条件を一つづつ表したボックスで、指を動かすと、箱の中の状態が変わっている。 白くなると、その条件が満たされた状態。4つの条件を満たした時のみ、右の箱が白くなる。きちんとにっこにっこにーのときだけ判定されている。 www.youtube.com
使ってみて
片手でやるときはうまくいくが、両手になると、RealSenseの問題で左右の手のポイントがうまく取得できないことがある。 片手しか認識されなかったり、中指なのに人差し指として認識されていたり。 そもそも点がちゃんと取れないと、この方法ではうまく判定できない。精度の改善に期待。