2016.10.03
- 人×技術
vvvvでKinect v2を使って赤外線トラッキング
こんにちは、イシイです。
今回は、Kinect v2を使った赤外線トラッキングを、ラピッドプロトタイピングツールのvvvvで実装してみるエントリーです。
vvvvには、Kinect2 NodesというContributionがあるので、Kinect v2の制御についてはこのContributionを使います。この辺りの準備に関しては、vvvv布教者の平野さんの記事「Kinect V2 を vvvv で使う!」を参考にしてみてください。ちなみにWindows10でも問題なく動きます。
Kinect2 Nodesの準備が終わったら、Kinect2からつないだIRノードを使って、IR情報を取得できるようになりました。なお、赤外線のトラッキング検証用には、再帰性反射テープを使っています。
今度はこのテクスチャから、OpenCVの輪郭情報を取得できるContour (FreeFrame DShow9)を使って、ターゲットの位置を特定していきたいのですが、ここでひとつ問題が発生しました。
Kinect2 Nodesはvvvv 64Bit版でしか動かず、Contour (FreeFrame DShow9)の方はvvvv 32Bit版でしか動きません。 そのため、なんらかの方法で64Bit版で取得した情報を32Bit版に渡す必要があります。
そこで、vvvv 64Bit版と32Bit版の同時起動を行うために、Commandline Parameterというものを利用します。 Commandline Parameterは、コマンドプロンプトからパラメーターを与えてvvvvを起動することで、特定の利用ができる手法になります。
まず、vvvv 64Bit版を起動してみます。 そのあとにコマンドプロンプトから
C:\Users\ユーザー名\vvvv32ビット版のパス\vvvv.exe /allowmultiple
というように、/allowmultipleというパラメータを渡して32Bit版を起動すると、64Bit版と32Bit版の同時起動ができました。あとは64Bit版で取得した情報を32Bit版に渡すことができれば、なんとかなりそうです。
vvvv 64Bit版と32Bit版のデータ共有のためには、SharedMemory (Windows)というものを使います。64Bit版からは、PCのメモリ内にテクスチャへのハンドルIDをSharedMemory (Windows)に格納します。
32Bit版では、Shared Memory Name(ここでは#vvvv)を通じて取得したテクスチャへのハンドルIDから、そのテクスチャを扱えるようになります。
実際に、同時起動して64Bit版と32Bit版でテクスチャ共有できてる状態がこんな感じです。
左のウィンドウがvvvv 64Bit版、右のウィンドウが32Bit版です。
あとはContourから得られる情報を元に、適当にターゲットの場所に青色の円を描くようにして、トラッキングできているかの確認をしてみます。
動画では、ちょっと実験時の自席後ろのコンセントタップの電源の光などを拾ったりしていて、目標ターゲット以外のものも抽出されてしまったりしていますが、当初の目的であったKinect v2の赤外線情報からContourを使ってターゲットを特定する、ということは無事できました。これで、vvvvでもKinect v2を使った赤外線トラッキングによるインスタレーションができそうです。