vvvvのkinect v2でcontourする
x64になってから、
この数年まともに触っていなかったが vvvv。
こういったaddonがあるのは知っていたが初めて使った。
<やりたいこと>
地上にいる人をトラッキングして、人のいる場所の座標を取得して、
クロスケーブルを使って、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もレイテンシーがなければ使えそうだけど、
別アプリを使う必要もないのでこのまま。