Kinect使ってみました(mac, openframeworks, ofxKinect)

Kinect買いました。

engadgetにも記事があがっていますね。
http://japanese.engadget.com/2010/11/19/kinect-cg/
ほんと普通のUSBカメラだと困ってたことができそうで嬉しい限りです。

今日一日でわかったことをどんどんアップしていきたいと思います。


macでのインストール方法を説明します。

[追記]
Kinectmacで使用するにはまずopenkinectドライバが必要です。
http://www.spoofscript.com/blog/?p=323
このブログのDownloadボタンをクリックします。
ターミナルでsetup.shの中身を実行することでドライバがインストールできます。

サイトが更新してたのでこちらを参考にしてください。
http://www.spoofscript.com/blog/?p=402
以下のサイトも参考にしました。
http://hiropo.co.uk/archives/576


openframeworksで使えるようにするには、
以下のページでofxKinectをインストールします。
https://github.com/ofTheo/ofxKinect


openframeworksを普段使っている人ならこれだけでKinect使えると思います。


まず、「深度センサを試す」ということで、
本を置いてどれくらいの精度なのか試してみました。
ofxKinectクラスのfloat getDistanceAt(int x, int y);
を使います。

測定のイメージ図はこちら。こんな感じで測りながらやってみました。

実際にはマウスクリックしたポイントのgetDistanceAtを求めています。

結果は、
(実際の距離)→(getDistanceAtの値)
60cm→57
70cm→67
80cm→76
90cm→86
といい感じの値になりました。照明条件などがよければもっと正確な値が取れるのかもしれませんね。
5cm程度距離が離れていれば、かなり正確に判別できるのではないでしょうか。


[macbook pro, Mac OS X 10.6.4, 2.66GHz Intel Core i7, Memory 8GB]
この環境でofxKinectのサンプルを試したところfpsは21~22程度。
PlayStation eyeは最大60fpsでかなり快適だったのでリアルタイム性が必要とされるシステムで使うには調整が必要かな。


簡単なアプリ作ってみました。

目標としてはどこでもドアみたいなものを作りたかったのですが、うまくいかず。
Kinectは距離はきれいにとれるのですが、輪郭の周りの値が安定してないですね。
なのでくっきり人の体を消すのは簡単なアルゴリズムでは無理でした。。。
[追記]このアプリでは輪郭抽出もせずに距離だけで判別していたので失敗しました。輪郭抽出して、面積の小さい部分を表示しないようにすればきれいに作れると思います。


それとカメラの自動調整のせいで明るさが変化して背景差分の値が変化してしまいました。通常のUSBカメラならビデオの設定が可能なのですが、Kinectではまだできないんですかね。

コードは以下のフォーラムにアップしました。[ofxKinect_dokodemoDoor.zip]
http://openframeworks.jp/forum/topic.php?id=95&page=2
[追記]古いバージョンで作ってしまったので、不都合があればtest.appとtest.hのコードをコピーして使ってください。


ということで、まだまだドライバーの更新などで使い勝手がよくなる可能性はありそうですね。[追記]ドライバは更新されてたので30fps出てました。調整すればパフォーマンスに利用できるレベルかと思います。


何か質問あればコメントでどうぞー