vvvvのkinect v2でcontourする

x64になってから、

この数年まともに触っていなかったが vvvv。

こういったaddonがあるのは知っていたが初めて使った。

vvvv.org

vvvv.org

 

<やりたいこと>

地上にいる人をトラッキングして、人のいる場所の座標を取得して、

クロスケーブルを使って、oscで別pcのunityへ送信。

床面にもプロジェクションするので、可視光のカメラは使えない。

 

<当初の計画>

kinect v2 -> Depth -> Contour -> get postion 

画角の問題から 初代ではなくkinect v2を使う。(持ってなくて買った)

rawで取得できる点群データの処理は重そうなので、

Depthノードの結果を、contourして領域の中央の座標を取得する。

 

< 課題 >

各ノードの64bit対応がまちまち

kinect v2-nodesは x64のみ

・Contour (FreeFrame DShow9)  は、x86のみ

・Contour (CV.Image)も、x86のみ

に対応。

*エリオットのVVVV.Packs.Image自体が、(x86)でしか動かない。

 

< 解決案 >

1. VVVV.Packs.Imageの非公式64bit版を使う。

非公式64bit版はVVVV.Packs.Imageのページのレスの中にリンクがある。

みんな起動時の読み込みから先へ進まない書いているが、2種類ある内の500mb近くある方を使う&packsフォルダーからVVVV.Packs.Image以外を外した状態で読み込む事でクリアできた。

で、この中のContour (CV.Image)を使う。

*ノイズ除去や反転、ID、boundingboxなど機能が予め使えるContour (FreeFrame DShow9) と比べて、そのあたりを自分で実装する必要があるが、helppatchもなく、Delaunayが刺さるくらいしかヒントがない。

Contour (CV.Image)を試してみて、invertや領域化(特定の範囲内の座標を一つのグループとしてID付けする)、boundingboxあたりは実装できそうだが、ノイズ除去やthresholdが内側で何をしてる分からなかったので時間もないし断念。

 

2. kinect v2-nodesの非公式32bit(x86)版を使う

kinect v2-nodesのページのレスの中にある@solroo氏のgithubから落とせる。

*自分の34.2 x86環境では動かず。33.7では動くらしい。

 

3. x64とx86のvvvvを同時起動してテクスチャ共有する

x64で、kinect v2 →Depthをした上で、AsSharedTextureを使って、pointerをwriterでテキストに書き出す。そのpointerを使って、x86のvvvvでテクスチャを呼び出す。

vvvv(x86) を起動するときに、/multipleを付けて起動するとvvvv(x64)版と共存できる。

*共有のレイテンシーは気にならないが、dx11とdx9の変換で少し遅い。

 

< 結果 >

3を使った。

syphonもレイテンシーがなければ使えそうだけど、

別アプリを使う必要もないのでこのまま。