KinectとProcessingを使ってFingerTrackingができないか調べていたところ、これを見つけたので試してみた。
Kinect + Processing + SimpleOpenNI を使ったFingerTracking
私は通常 Kinect SDK を使用しているので、Kinect SDKとOpenNIを共存させることができるこれを使用した。
(Kinect SDKもProcessing から使えるようになったようだ。ただ、OpenNIのNiteに相当するものがないのが残念。追記2012.12.12)
ということで、
Kinect SDK v1.6 + kinect-mssdk-openni-bridge + OpenNI + SimpleOpenNI + Processing
という構成で ”FingerTracker” を試してみたら、ちゃんと動いた。
この構成で動くというのが逆にすごい... (^^;)
◆動かしてみてわかった問題点
・Depthを二値化して指を検出するための閾値が固定であるため、認識しやすい位置に手を固定しておかなければならない。
・手の動きの自由度を上げるために閾値を大きくすると、体の一部や周囲のものを誤検出する。
動的に閾値を変える良い手が無いか考えていたところ、いい案を思いついた。
OpenNIには手の平を検出するHandTrackingの機能がある。
SimpleOpenNI Niteのサンプルプログラム"Hands"
これで手の平の座標を求め、その周囲のDepthデータだけを”FingerTracker”へ喰わせてやれば...
実験してみたところうまく行った。
動画はこちら。
KinectでFingerTrackingの実験
◆使用した環境
・Windows 7 64ビット版
・Kinect Xbox版
・Kinect for Windows SDK v1.6
・OpenNI 1.5.2.23 32ビット版
・Processing 1.5.1
・SimpleOpenNI 0.27
・kinect-mssdk-openni-bridge-v1.6.0.0-for-1.5.2.23
―以上―
ここを参考にさせていただいた。
・Kinect for Windows を OpenNI で使う(Windows 7 限定)
関連するリンク
・Kinect for Processing Library (Kinect for Windows SDKをProcessingから使えるようにするライブラリ)