少し進んだスケッチのトップに戻る    印刷する

マーカを検知し、画像を重ねる

AR(Augmented Reality, 拡張現実)は、現実世界の映像に、コンピュータが生成したグラフィックスを重ねて表示する技術です。ProcessingのスケッチでARを実現するライブラリが、 nyar4psgライブラリです。
C言語用に開発された、オープンソースの拡張現実ライブラリARToolkitが元になっています。ARToolkitを移植して、Java言語やC#の開発環境のためのARライブラリを開発するプロジェクトがNyARToolkitで、nyar4psgはそのprocessing版です。
カメラの映像を入力し、あらかじめ登録した特徴のある目印(マーカ)が映っていたら、そこにグラフィックスを重ねるのが、基本的なしくみです。 NyIdマーカ、ARToolKitマーカ、NFTターゲット(ARToolKit5仕様の自然特徴点トラッキング)を検知できます。

Augmented Reality ライブラリ nyar4psg

nyar4psgライブラリは、次のようにインポートします。

メニュー[スケッチ][ライブラリをインポート][ライブラリ-を追加]で、nyar4psgを選択して、インストールします。インストールすると、サンプルのContribute Librariesの中にサンプルが入るので、サンプルを動かして、機能を実験することができます。詳しくは、 を参照。
MultiMarkerクラスが、マーカの検出・トラッキングを行うクラスで、同時に複数のマーカを取扱えます。PImage画像から、マーカの位置、向きを検出します。

ARToolKitマーカ

ArtoolKit marker
検知できるARToolKitマーカは左図のような枠内に描かれたパターンで、これをMultiMarkerオブジェクトに登録することで、検知します。
下のサンプルで使うマーカファイルは、画像ページからコピーできます。


ARToolKitマーカ上に画像が表示されるサンプル

マーカを検知して、その上に2枚の画像を1秒ごとに交互に表示するサンプルを下に示します。 リストA6_1は、マーカ「ぺ」を検知すると、その上に2枚のペンギンの画像を、1秒ごとに交互に表示するスケッチです。ペンギンの画像は、画像ページからコピーできます。
ペンギンが並ぶ
【リストA6-1】
import processing.video.*; //(1)インポート
import jp.nyatla.nyar4psg.*;

Capture video;   //(2)カメラ画像用変数の定義
MultiMarker nya; //(2)マーカ検知用変数の定義
PImage penguin1, penguin2, drawImg;
float ratio = 0.3; //画像小さく

void setup() {
  size(640, 480, P3D); //(3)画面のレンダリングには、P3Dを指定
  colorMode(RGB, 100);
  println(MultiMarker.VERSION);

  String[] cameras = Capture.list(); //(4)利用可能なカメラ一覧
  //(4)配列のインデックスは自分の環境に合わせて変更する
  video = new Capture(this, width, height, cameras[0]);
  video.start();   //(4)カメラ映像取得開始
  //(5)マーカ検知オブジェクトの生成
  nya=new MultiMarker(this, width, height, "camera_para.dat",
                                                NyAR4PsgConfig.CONFIG_PSG);
  //(6)ARToolKitスタイルのマーカーを登録
  nya.addARMarker(loadImage("CharPe.png"), 16, 25, 80);

  penguin1 = loadImage("Penguin1.png"); //2枚のペンギン画像
  penguin2 = loadImage("Penguin2.png");
}

void draw()
{
  if (!video.available()) {  // カメラ映像がなければ、何もしない
    return;
  }
  video.read();
  nya.detect(video); //(7)引数の画像からマーカを検知
  background(0);
  nya.drawBackground(video);  //(8)カメラ画像をバックグラウンドへ描画
  if (nya.isExist(0)) {       //(9)マーカが検知された
   if (second()%2==0) { drawImg = penguin1; }  //1秒ごとに描く画像を変える
   else { drawImg = penguin2; }

   nya.beginTransform(0);  //(10)マーカの位置に描画
   rotateY(PI);    //マーカ平面を上下(y軸)反転
   rotateX(PI/2);  //左右(x軸)、3次元的に立って見えるように回転
   image(drawImg, -penguin1.width*ratio/2, -penguin1.height*ratio,
                   penguin1.width*ratio, penguin1.height*ratio);
   nya.endTransform();
 }
}

NFT(Natural Feature Tracking)ターゲット

ARToolKitマーカのように黒枠線内の白黒マーカではなく、写真やイラストをマーカとして認識できます。これが自然特徴点追跡(Natural Feature Tracking)です。写真やイラストの画像から特徴点ファイルを生成し、スケッチフォルダのdataフォルダの中に入れて使います。特徴点ファイルの生成は、nyar4psgライブラリのサンプルの中にあるnftFileGenを使います。
自然特徴点を使った検知を行う機能をもつのはMultiNftクラスで、上の【リストA6-1】サンプルではこの部分だけを変更すれば、同じように実行できる。
MultiNft nya; //マーカ検知オブジェクト用変数

//マーカ検知オブジェクトの生成
nya=new MultiNft(this, width, height, "camera_para.dat",
                        NyAR4PsgConfig.CONFIG_PSG);

//検知する画像を登録 (ファイル名, 画像の幅[mm])
nya.addNftTarget("PenguinOnBeach", 140);

演習問題

【問題A6-1】MultiMarkerクラスは複数のマーカを識別する機能をもちます。リストA6_1を修正し、マーカ「ぺ」の上にペンギンの画像が、マーカ「モ」の上にサルの画像が表示されるようにしよう。
サルの画像、マーカ「モ」の画像は、画像ページからコピーできます。
arigat アットマーク acm.org / copyright © info