2011年7月22日金曜日

Kinect.Toolkit にジェスチャのテンプレートを追加する

Eternal CodingCode PlexでKinectでジェスチャの認識をするためのライブラリが公開されてます。

記事を読むのが一番早いと思いますが、ライブラリでは点の軌跡をそのまま解析する方法と、テンプレートを予め用意しておいてそれと比較する二種類の方法があるようです。

今回はそのテンプレートを自作してみようと思います。
どういうことかというと、公開されているサンプルの

この部分に表示されるものを自分で作ってみます。
(circleKB.saveに当たるものを作る。)

自作するジェスチャは次のような感じ。


今回はこのジェスチャの軌跡をテキストファイルに手打ちして、それを読み込んで.saveファイルを作成してみました。
大体の手順はTemplateGestureDetectorのAddメソッドに座標を追加していって、それをSaveStateメソッドでファイルに保存します。
以下が正確ではないですがコードにしたものです。

TemplateGestureDetector gd = new TemplateGestureDetector(null);
gd.StartRecordTemplate()
for (i = 0 ; i < n ; i++) {
gd.add(position , kinect.SkeletonEngine);
}
gd.EndRecordTemplate()
gd.SaveState(stream)


作成した結果がこちら


公開されているサンプルはほとんどいじっていないので、自作したテンプレートの認識結果を載せようとすると自分が写ってしまうので載せませんが、このとおりの動きをしたらきちんとジェスチャが認識されました。
最初に予定していたのに比べると傾いてしまいましたが、これは説明文をもっときちんと読むことで解消できるかと思います。

プロジェクトはこちらDownLoad

2011年7月9日土曜日

Kinect + OpenCVSharp フィルタ処理

Kinectから取ってきた深度画像とOpenCVを組み合わせて何かできないかと考えてます。
一応Kinectから取ってこれる画像は生の実画像に近いと思うのでOpenCVSharpに慣れるのもかねてフィルタ処理をしてみました。

画像中左上がKinectから取得してそのままの画像。
右上がガウシアンフィルタ。左下がブラー処理、右下がメディアンフィルタです。
これを見る限りだとフィルタ処理しても全然変わらないですね・・・
それでも若干ですがメディアンフィルタがエッジを保ちつつノイズを除去できているようには感じます。
そもそもフィルタ処理が必要かどうかという部分もありますが、使うならメディアンフィルタになるのかな・・・?

2011年7月2日土曜日

Kinect SDK + ARっぽいもの

前に、カメラからの距離の変化を利用してARっぽいことができないかと考えたので、その第一段階のようなものです。

Kinectから得られた最初のDepthFrameを基準とし、それと比べて距離が一定以上遠くなった領域の大体の重心に球体を描画しています。
もうちょっとちゃんと位置合わせしたりしないといけないですね。
まだまだ付け足さないといけない部分も多いですがこれをもとにいろいろいじろうと思います。