KinectRTC
概要
KinectRTCは、KINECTで取得したアレイ処理後の音響データ。人の骨格モデルデータおよびカラー画像を出力するRTコンポーネントです。Kinect for Windows SDKを用いて実装していますので、動作するプラットフォームは、Windows7, 8, 8.1のみとなります。
このコンポーネントの概要を下図に示します。
動作環境
KinectRTCは、Kinect for Windows v1.5で開発を行いました。v1.6, v1.7を導入したWindows7, 8, 8.1での動作確認を行っています。Kinect for Windowsは、v1.5以降でVMwareでの動作をサポートしていますが、XBOX用のKinectではVMで動作しません。これは、マイクロソフトの制限だと思いますので、ご注意ください。
上記のような状況ですので、開発言語は、VC2010以降となります。
ライセンス
このコンポーネントは、EPL-1.0で配布しています。
データポート
入力データポート
KinectRTCでは、commandという1つの入力ポートを実装しています。このデータポートは、TimedString型であり、KinectRTCの内部状態を変更するためのコマンド入力ポートですが、現在はコマンドは未実装です。今後、ジェスチャ認識のコンポーネントとの連携を含めて実装予定です。
出力データポート
出力データポートtrackingおよびskeletonからのデータは、Kinect for Windows SDKで定義された骨格モデルのインデックスに対応した座標データです。Kinect for Windows SDKで定義された順番で出力します。すなわち、trackingから出力されるデータは、座標データで x1, y1, x2, y2, … のような配列になっており、skeletonから出力されるデータは、x1, y1, z1, x2, y2, z2, … のようにKINECTで取得した各関節の座標データの配列になります。これらの出力データポートから出力されるデータは、配列のデータになりますので、単にモニタリングをおこなうばあいには、StateOutコンポーネントなどを使うとよいと思います。
traking, skeletonともに関節角のインデックスは、下記のように定義されています。
static int SkeletonPos[] = { NUI_SKELETON_POSITION_HIP_CENTER, NUI_SKELETON_POSITION_SPINE, NUI_SKELETON_POSITION_SHOULDER_CENTER, NUI_SKELETON_POSITION_HEAD, NUI_SKELETON_POSITION_SHOULDER_LEFT, NUI_SKELETON_POSITION_ELBOW_LEFT, NUI_SKELETON_POSITION_WRIST_LEFT, NUI_SKELETON_POSITION_HAND_LEFT, NUI_SKELETON_POSITION_SHOULDER_RIGHT, NUI_SKELETON_POSITION_ELBOW_RIGHT, NUI_SKELETON_POSITION_WRIST_RIGHT, NUI_SKELETON_POSITION_HAND_RIGHT, NUI_SKELETON_POSITION_HIP_LEFT, NUI_SKELETON_POSITION_KNEE_LEFT, NUI_SKELETON_POSITION_ANKLE_LEFT, NUI_SKELETON_POSITION_FOOT_LEFT, NUI_SKELETON_POSITION_HIP_RIGHT, NUI_SKELETON_POSITION_KNEE_RIGHT, NUI_SKELETON_POSITION_ANKLE_RIGHT, NUI_SKELETON_POSITION_FOOT_RIGHT, };
また、audio_signalから出力されるデータは、OpenHRIの1つである音声 PulseAudioInput や PortAudioInputと同じ型のデータとなっていますので、OpenHRIで提供していた、JuliusRTC等のコンポーネント群と容易に接続することができます。音声データは、正面から左右0.3ラジアンの範囲からの音声を取得し、出力します。出力される音声は、マイクロホンアレイ処理後の音声です。音声の取得範囲は、コンフィグレーションパラメータmax_angle,min_angleで変更することができます。
audio_src_angleから出力されるデータは、KINECTが検出した音源方向になります。音源方向は、パワー最大の音源方向であり、中央をを0度として10度刻みの方向を検出することができます。解像度に関しては、KINECT for Windows SDKの制限によるところです。
4つのマイクロホンが検出した音響データを別途処理して方向検出をすることも考えられますが、未実装です。
rawImegから出力されるデータは単純なカラー画像または深度画像を出力します。コンフィグレーションパラメータによって、画像サイズや色情報を変更することができます。ただし、
このコンポーネントの出力のモニタリングには、CvMonitorを用いれば、距離画像出力時に骨格モデルの関節ポイントを同時に閲覧することができます。
コンフィグレーションパラメータ
KinectRTCは、下記のコンフィグレーションパラメータを持っています。
パラメータ名 | 初期値 | 説明 |
---|---|---|
max_angle | 0.3 | 取得する音声データの音源の範囲(GetBeamメソッドで取得した値)の上限 |
min_angle | -0.3 | 取得する音声データの音源の範囲(GetBeamメソッドで取得した値)の下限 |
capture_mode | 2 | 画像取得モード設定: 1: VGAのカラー画像のみ取得、2:骨格モデル取得 |
intval | 100 | 画像出力のタイミング(ECのループに対してintvalにつき一回画像をデータポートから出力 |
使い方
このコンポーンンとは、Kinect for Windowsを利用しますので、デバイスドライバ、ライブラリをマイクロソフトのWebページよりダウンロードしておく必要があります。実行のみであれば、デバイスドライバとランタイムライブラリのみでOKです。
コンパイル
ダウンロードした実行ファイルを使い場合には、ここを読み飛ばしてください。
ソースコードからコンパイルするには、通常のRTCの開発と同じようにCMakeが必要です。手続きとしては、
- CMake: ソリューションファイルの生成
- VisualStudio: 生成されたソリューションによりコンポーネントの生成で完了します。一括でコンパイルする場合には、rtcmake.batを実行すればよいと思います。
実行
添付のアーカイブには、rtcというフォルダに実行形式のファイルを同梱しています。KinectRTCComp.exeをダブルクリックすれば、実行されると思います。
起動時には、Kinectへの接続はありません。アクティベート時にKinectへのコネクションをオープンし、4秒待つようになっていますので、音声、画像の取得には少しタイムラグが生じると思いますのでご注意ください。
Kinectを接続せずにアクティベートするとコンポーネントが応答がなくなり終了します。
他のコンポーネントとの利用方法、アプリケーションでの使用に関しては、サンプルシステムを参照していただいた方がわかりやすと思います。
ソースファイルについて
添付されてるアーカイブンは、本コンポーネントの下記のソースファイルがあります。
- KinectRTC.cpp : KinectRTCのコンポーネントのクラスのソースファイル
- KinectRTC.h: KinectRTCのコンポーネントのヘッダファイル
- KinetcRTCComp.cpp: KinectRTCのコンポーネントのmain関数
- Kinect.cpp: Kinect for Windows SDKを用いたKinect操作用のクラスファイル
- Kinect.h:同上ヘッダファイル
- PThread.cpp:POSIXスレッド互換のためのラッパーのソースファイル
- PThread.h:同上ヘッダファイル
- stdsfx.h:標準のシステム インクルード ファイルのインクルード ファイル
このファイル構成からも分かると思いますが、Kinect.cpp, Kinect.h, PThread.cpp, PThread.hは、RTC特有のコードが一切含まれていませんので、自分のアプリケーションを作成する際にも使っていただいて結構です。Kinect操作用のクラスファイルに関しては、後日ドキュメントを作成する予定です。
添付ファイル:KinectRTC.zip