Processing.rbでARアプリを作ってみる
先日Processing.rbをバージョンアップしました。JRubyに加えてProcessingも自動インストールされるようになり、よりお手軽に使えるようになりましたので、機会がありましたらご活用ください。
今日は以前予告したまま放置していた、Processing.rbでARマーカーを認識させる方法を解説してみたいと思います。
Processing.rbでARマーカーを認識させる方法
Processing用のARライブラリであるNyARToolkit for Processingを利用することで、Processing.rbでもARマーカーを簡単に認識させることができます。
以下手順です。
必要なツールの準備
まず、Processing.rbのインストールと、NyARToolkit for Processingのダウンロードを行います。それぞれ以下のリンクから取得できます。
また、AR Toolkitでは、専用のデータを使ってカメラのキャリブレーションとARマーカーの認識を行います。手っ取り早く使えるデータを用意してみましたので、以下のリンクから取得してください。
フォルダに配置する
取得したファイルは以下のようなフォルダ構成で配置します。なお、simple_ar.rb
が今回作成するスケッチファイルになります。
コードを作成する
言語がRubyに変わること以外は、NyARToolkitの使用方法そのままでコードが書けます。特に面倒な処理は行っていないので、ちょっと手抜きですが実際のコードを一気に載せてしまいます。
require 'processing' Processing.load_library 'video' Processing.import_package 'processing.video', 'Video' Processing.load_library 'nyar4psg' Processing.import_package 'jp.nyatla.nyar4psg', 'NyAR4Psg' # A simple example of NyARToolkit with Processing.rb class SimpleAR < Processing::SketchBase def setup size(640, 480, OPENGL) @cam = Video::Capture.new(self, width, height) @nya = NyAR4Psg::MultiMarker.new( self, width, height, Processing.sketch_path('data/camera.dat'), NyAR4Psg::NyAR4PsgConfig::CONFIG_PSG ) @nya.add_ar_marker(Processing.sketch_path('data/inu.pat'), 80) @nya.add_ar_marker(Processing.sketch_path('data/neko.pat'), 80) @cam.start end def draw return unless @cam.available @cam.read image(@cam, 0, 0) lights no_stroke @nya.detect(@cam) if @nya.is_exist_marker(0) @nya.begin_transform(0) translate(0, 0, 40) fill(0, 255, 255, 192) box(80) @nya.end_transform end if @nya.is_exist_marker(1) @nya.begin_transform(1) translate(0, 0, 40) fill(255, 128, 128, 192) sphere(40) @nya.end_transform end end end Processing.start(SimpleAR.new)
setup
では、WebカメラとNyARToolkitの初期化を順番に行っています。
draw
ではWebカメラからキャプチャされた画像があった場合のみ、キャプチャ画像の描画と、認識されたマーカーの位置に3Dオブジェクトの描画を行っています。
動かしてみる
作成したコードは、通常のRubyスクリプトと同様に以下のコマンドで動かせます。
ruby simple_ar.rb
実際の動作画面がこちらです。
終わりに
NyARToolkitのセットアップ方法にさえ引っかからなければ、以外と簡単にARの処理が書けることがわかりました。もっともARの場合、面白いアプリのネタを出せるかが一番難しいところなんですよね…。