robo8080のブログ

ロボット製作や電子工作など。

Kinect SDK V1.0を使ってみた。(Kinect for Xbox 360使用)

2012年02月25日 | Kinect SDK

Kinect SDK V1.0が公開されたのでさっそく使ってみた。

まず、ここからSDKをダウンロード。

インストーラーが1つなのでOpenNIに比べてインストールも簡単。

サンプルの”Kinect Explorer”もサクッと動いた。 

OpenNIだとなかなかこうはいかない。インストールでトラブル人が多いようだ。

 

まず、”Kinect Explorer”でSkeletonTrackingを試してみた。

simple-openniでやった時より安定している(ふらつかない)ような気がする。

 

ZOOM for Xbox 360 を使ってみた。椅子に座ったままでも全身が画面に入りやすくなる。

 

さて、SDKが使えるようになったので、サンプルのソースを読んでみる。

Kinect SDKはサンプルプログラムの数が少ない。

OpenNIはサンプルプログラムが多かったから、やりたいことがすぐ試せたんだが...

ここを参考にさせていただく。シンプルでわかり易い。

Kinect for Windows SDK で RGBカメラの画像を表示する(C# + WPF)

 

まずは、Kinect SDK + C# でDepthの3次元表示をやってみたい。

DirectXは使ったことないから、やはり使い慣れたOpenGLかな。

C# でOpenGLを使うにはOpenTKがよさそうだ。ここの説明がわかり易い。

 

どうもKinectでいろいろ実験するには、processing + simple-openniが一番簡単な気がする。

余計なことに煩わされずにやりたいことにすぐ到達できる。

いまのところ、Kinectを使ったアプリを配布するならKinect SDKで、自分で作って自分で使うだけならOpenNIの方が楽かな。

Kinect SDK + Processingが使えるようになれば状況が変わるかもしれないが...。

 

Kinect SDK API Referenceを読む。

Depthとカメラ画像を重ねて3次元表示したいのだが、OpenNIの"depthMapRealWorld()"みたいなAPIはないのかな...

"KinectSensor.MapDepthFrameToColorFrame()"を使えば同様のことが出来そうだ。

 

試行錯誤の末、Depthを使ったカメラ画像の切り出しがやっと出来た。

Depthとカメラ画像がちゃんと重なっているので指の形も分かる。が...表示が異様に遅い。

 

これを見ながらKinect SDKでのDepthデータの扱い方を勉強。

今日、一日中試行錯誤でやって来たことは間違っていなかったようだ。

Working with Depth Data (Channel 9)

 

SDKのサンプルに付属の"KinectWpfViewers"を使うと、ほとんどコードを書かなくても簡単にDepth表示やSkeleton表示ができることが分かった。

やり方は、ここの動画の最後の3分30秒ぐらいから ...(英語ですが、見てればわかります。)

 

あぁ~。OpenNI + Processingを使えば半日もかからなかったことが、Kinect SDK + C# だと4日掛かってもまだ先が遠い。

やりたいことにたどり着くまでにマスターしなければならないことが多すぎる!!

 

"KinectSensor.MapDepthFrameToColorFrame"を使うと表示がカクカクになってしまう。

処理が重いのかな~。

現象が出るのはrgb,depth共に640x480の時。depthが320x240ならOK。

色々調べてみるとデータ取得イベント内での処理が重くて、次のフレームデータ来るまでに終わらないのが原因のようだ。

データ取得イベント内でやっていた表示処理を外へ移すことにする。

 

さらに、Kinect SDK API Referenceを読む。

Tilt Motorを制御して首を振るときは、1秒に一回ぐらいにしろと書いてある。

Tilt Motorでトラッキングするのは無理か...。サーボモーターを外付けするかな。

やっと C#+OpenGL(OpenTK)の使い方がわかってきた。つぎは、Kinect SDKと組み合わせてDepthを3次元表示してみる。

 

ついに、Kinect SDK + C# + OpenGL(OpenTK)で、Depthを3次元表示出来るようになった。

 

動画はこちら。

Kinect SDK + C# + OpenGLで、Depthを3次元表示してみた。

 

次は、カメラ画像とDepthを3次元表示してみた。

 

 

さらに、Skeletonも3次元表示できるようにした。

 

 

動画はこちら。

Kinect SDK v 1.0 + C# + OpenGL(OpenTK)で、カメラ画像、Depth、スケルトンを3次元表示してみた。

 

―以上―

 

関連するリンク

ProcessingでKinectを使ってみた。

DOWNLOAD KINECT FOR WINDOWS SDK

simple-openni

Kinect for Windows SDK で RGBカメラの画像を表示する(C# + WPF)

OpenTK

OpenGL with C# (1) : 初期化

Working with Depth Data (Channel 9) 


最新の画像もっと見る

3 コメント

コメント日が  古い順  |   新しい順
スケルトンの座標変換について (たろう)
2015-10-19 21:43:40
はじめまして、突然すみません。
私は、現在Kinectで空間に手の軌跡を描画させるアプリケーションを作成しています。
2D平面へのスケルトン表示や手の軌跡の描画はできたのですが、3D空間での表示に苦労しているので助言をいただけたらと思い、コメントさせていただきました。
具体的には、座標変換がうまくいかず、robo8080さんのように綺麗に骨格の線が表示されません。
2Dではcanvasがあったのでそれにうまく変換できたのですが...

お忙しいとは思いますが、返信のほどよろしくお願い致します。
返信する
Re:スケルトンの座標変換について (roboz80)
2015-10-20 20:16:14
Kinect SDK v 1.0 + C# + OpenGL(OpenTK)を使用しています。
参考になるかどうか分かりませんが、ソースをここに置いておきます。
ttps://www.dropbox.com/s/77rg96vghy0j92u/OpenGL_Test4.zip?dl=0
ただし、中身についてのご質問はご容赦ください。m(_ _)m
返信する
スケルトンの座標変換について (たろう)
2015-10-22 14:16:04
お世話になっております、たろうです。

ソースコードを公開していただき、ありがとうございました。
おかげさまで解決できました。本当にありがとうございました。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。