久しぶりの更新です。
最近仕事でAR関係のことをやる機会が増えてきたので、Processing.rbを使ってARのプロトタイプをいくつか作ってみたいと思います。
今日はウォーミングアップとして、Processing.rbからWebカメラを使ってみます。
Processing.rbから拡張ライブラリを使う
Processing.rbでは、Processing.load_library
関数でライブラリの読み込みを、Processing.import_package
関数でJavaのクラスのインポートができます。
ProcessingではWebカメラを使うために、次のようにimport
命令でprocessing.videoパッケージを読み込みますが、
import processing.video.*;
Processing.rbでは同じ処理が以下のようになります。
Processing.load_library 'video' Processing.import_package 'processing.video', 'Video'
Processing.import_package
関数の第2引数は、Javaのクラスの登録先となるRubyのモジュール名になります。ここではVideoモジュールを指定していますので、以後Video::Capture
のようにvideoパッケージのクラスが参照できます。
videoパッケージのクラスを使用する
続いて実際にvideoパッケージのクラスを使ってみます。ProcessingでWebカメラを初期化するコードは次のようになります。
Capture cam; void setup() { // 途中省略 cam = new Capture(this, 640, 480); cam.start(); }
Processing.rbでは同様の処理が以下のようになります。
def setup # 途中省略 @cam = Video::Capture.new(self, 640, 480) @cam.start end
new
命令の使い方や、this
キーワードの代わりにself
を使用するところが大きな違いになります。
サンプルコード
実際にWebカメラで取り込んだ画像を画面に表示するサンプルがこちらです。Rubyらしいエレガントさを保ったまま、Processingの機能が使えているところがポイントです。
Processing.load_library 'video' Processing.import_package 'processing.video', 'Video' # A WebCam example for Processing.rb class WebCam < Processing::SketchBase def setup size(640, 480) @cam = Video::Capture.new(self, 640, 480) @cam.start end def draw @cam.read if @cam.available image(@cam, 0, 0) end end Processing.start(WebCam.new)
余談ですが、猫2匹をMacのカメラの前に留めるのに苦労しました。
終わりに
次回はいよいよマーカーを使ったARに挑戦してみたいと思います。
…と書きつつ実はもう完成して動いていたりします。 ;-)