Processing.rbでWebカメラを使う

久しぶりの更新です。

最近仕事で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)

f:id:tkitao:20150228133707p:plain

余談ですが、猫2匹をMacのカメラの前に留めるのに苦労しました。

終わりに

次回はいよいよマーカーを使ったARに挑戦してみたいと思います。

…と書きつつ実はもう完成して動いていたりします。 ;-)