アクセシビリティ
デベロッパーリソース

目次

Flash 判定システムを利用したスクリーンセーバーのライブ制作

VOTING SYSTEM【2】

COLOR ANALYSIS - 色判定について -
(解説:本田 篤史氏)

 

実際に、この色判定ではスクリーンセーバーにアドビニュースリーダー機能を追加するかどうかの選択を行いました。ステージにいる4人に赤と緑のパネルを利用してもらい、そのニュースリーダー機能が必要な場合には赤を、不必要な場合には緑のパネルをあげてもらい、その様子をビデオカメラで撮影しながらその映像はOsprey社のキャプチャーカードを実装した判定用PCを経由させて、色を解析しました。その解析結果は会場モニターに映し出された下記のような円グラフで、リアルタイムに色判定結果が反映されるというものです。では、色判定プログラムについて見ていきましょう。

COLOR ANALYSIS 1

会場モニターに映し出された円グラフ

COLOR ANALYSIS 2

var my_cam:Camera = Camera.get();
bg.myvideo.attachVideo(my_cam);
my_cam.setMode(640,480,30,true);

bt  = new flash.display.BitmapData(640,480,false);         ---- (1)

onEnterFrame = function(){
bt.draw(bg);         ---- (2)

var r_count = 0;
var g_count = 0;

for(var x=0;x<640;x+=16){           ---- (3)
  for(var y=0;y<480;y+=16){         ---- (3)
   var p0 = bt.getPixel(x,y);       ---- (3)

   var r = ((p0 & 0xff0000) >> 16);   ---- (4)
   var g = ((p0 & 0xff00) >> 8);      ---- (4)
   var b = ( p0 & 0xff);              ---- (4)

   if(r > 128 && g < 128 && b < 128){  ---- (5)
    r_count++;                          ---- (5)
   }
   if(r < 128 && g > 128 && b < 128){   ---- (6)
    g_count++;                           ---- (6)
   }
  }
}

var r_vote = Math.floor(r_count/1200/0.25 * 100);  ---- (7)
var g_vote = Math.floor(g_count/1200/0.25 * 100);  ---- (7)

if(r_vote > 100) r_vote = 100;
if(g_vote > 100) g_vote = 100;
r_level.text = g_vote;
g_level.text = r_vote;

}
        

解説:

  1. VIDEO をキャプチャする為の、BitmapData。サイズは640 x 480 pixel。
  2. その時点のVIDEO をBitmapDataにする。
  3. 縦横16ピクセル毎にgetPixelを使用して、RGB値を取得。
  4. RGB値から、R値、G値、B値のそれぞれに分解する。
  5. R値が128以上、G値が128以下、B値が128以下で赤と判定し、赤用カウンターをカウントする。
  6. R値が128以下、G値が128以上、B値が128以下で赤と判定し、緑用カウンターをカウントする。 ※上記の(5),(6)の128と言う基準値は、イベント本番では異なっている。 この値は、現場の照明やカメラによって設定が必要となる。
  7. 赤と緑のカウント値が、それぞれ画面全体(1200個の矩形分)に対しての割合を計算し、さらに、基準パーセント値(25%)に対しての割合を計算する。
    ※上記(7)の基準パーセント値の25%は、イベント本場では異なっている。 この値は、カメラに収まるターゲットとなる色の面積によって設定が必要となる。

コーヒーブレイク:

色判別では、本番前の準備として照明やキャストの立ち位置などの環境を念頭に本番に臨みましたが、イベント本番の Flash オペレーティング作業では現場の照明の変化や、カメラ内に収まるパネルの面積の変化等にすぐに適用できるように、各計算用境界値を全てキーボード操作で変更できるようにしておきました。