モノクロタイム

I'm from the future!

【vvvv】FiducialTrackerノードを使用してAR

こんにちは,れいじです.

なかなかにツラい時期ですが,やったことをアウトプットするという作業は続けていきたいので,ブログはちゃんと書こうと思います.

さて,私は今大学の授業でvvvvを使用してVJツールを作るという課題をこなしています.

そこでARが絡んできだしたので,vvvvでARをする手段について熟考していました.

何をしたいのか簡単に言うと,

  • 映像をvvvvで作っておく

  • 1つのマーカーに1つの映像を割り当てる

  • カメラがARマーカーを認識したら,事前に割り当てられた映像に切り替える

  • マルチトラッキングが可能なので,映像同士の自由な組み合わせが可能である

こんな感じです.すごくわかりにくい!笑

vvvvでARをやろうと思うと,vvvv界では有名人であるyhyさんがyoutube上で解説をされているARtoolkit(vvvvといわず,ARを始めるならまずコレ!)が取っ付き易いです.

youtu.be

これに加えvvvvのドイツ語本には,ちょっと変わった形のARマーカーが紹介されています.

f:id:yomoyamareiji:20150525205436p:plain

こんな感じのやつ.

ARを実現する上ではARToolkitでも全く無問題(というか動画を参考にできるので寧ろソッチのほうが良い)なのですが,指導教官がこのマーカーをひどく気に入ったため,このマーカーを使用するすることにしました.

参考にしたのはやはりドイツ語本.

英訳出たら買うわ…って言ってる人!コードと写真でなんとなく理解できるしvvvvやりたい人は絵本感覚で買っといたらいいと思いますよ.

FiducialTracker

さて,上記のマーカーを使用する時はFiducialTrackerというノードを使用します.

入力側のピンにはそれぞれWebカメラ入力,2値化のビュー,2値化における閾値設定,ノード自体の有効化・無効化を制御できるピンが有ります.

出力側のピンではWebカメラ出力,(認識したマーカーの)ID,(認識したマーカーの)x座標,(認識したマーカーの)Y座標,(認識したマーカーの)回転角を取得することが出来ます.

ノードの詳しい説明は以下の公式ドキュメントを参考にして下さい.

FiducialTracker (FreeFrame DShow9) | vvvv

FiducialTrackerというノードの使用方法も,F1で開けるヘルプパッチを覗いてみるといいと思います↓

f:id:yomoyamareiji:20150525211054p:plain

たとえば,ID0のマーカーを認識すると,マーカーの中心に(0)というテキストが表示されます.

f:id:yomoyamareiji:20150525211345p:plain

これはID11のマーカーです.中心に(11)というテキストが表示されます.

FiducialTrakcerはマーカーの座標は勿論,回転角もとれるという所が魅力です.

しかし2015年5月現在,このノードに関するフォーラムやチュートリアルが全く見つからないといった状況になっています.

これも普及しにくい原因なのかな…悲しい.

動画を切り替える

さて,ヘルプパッチではARマーカーにテキストを重ねあわせて表示させました.

私がやりたいのはARマーカーによる映像の切り替えです.

f:id:yomoyamareiji:20150525213337p:plain

予め映像パッチをIOBox(Enum)にListを使って格納しておき,FiducialTrackerノードが認識したIDをOrd2EnumというEnumに対して有効な条件分岐ノードを通して指定された映像を呼び出すことができるようにしています.

Ord2Enumについては公式ドキュメントと,フォーラムをどうぞ.

Ord2Enum (Enumerations) | vvvv

How to change Enum entry via switch - question - Forum

超カンタンにですが動画も撮りました.動作の様子です.

vimeo.com

この動画中で使用した映像は

qiita.com

ここで紹介されているものを一部改変し使用させていただきました.

vvvvは平凡スペックのPCでもそれなりにスピードが出て,モノが作りやすいのでいいですね.

システムの部分はそれなりに出来ているというか,後は細かい仕様追加などを行う予定です…というより,完全にオリジナルの映像を作らないと汗

ではでは~