flash でカメラ遊び
- 以前、授業の関係でFlash8を使ったことがあったので、研究のモチベーションも下がってることだし思いっきり遊んでみた。
ブラウザでカメラが動いてるのは、予想以上に面白い。 - 次はこれをビットマップに変換して、画像処理。なにするかなー。顔検出なんかたぶん重すぎるよねー。
とりあえず和製マイノリティーキューブ作ってみるか。 - Flashファイル(拡張子.fla)の可読性が低いことが気になる。なんていうか、いろんなところにコードが書ける(オブジェクトにコードを埋め込めたりする)のが逆に気持ち悪い。
以下、flash/カメラからの入力画像を表示するのページ
what
- Flash8からローカルのPCカメラが読み込めるようになったらしい。
- Flashなんて使ったことないから、細かいことはわかんない。
- ActionScriptも、そんなに勉強したくない。
- でもブラウザでカメラが動くとなんとなく面白そうだ。
- やってみようかー。
- できました。
- とにかく↓のページが神すぎる!これ真似してたらなんとなくできます。
SSAW06 » Flash ActionScript2.0 実践講座6:ビデオ映像を扱う - 解像度と表示サイズをGUIから変更できるようにしてみた。Flashはこういうことに関してはすごい楽だなと思う。コンボボックスなんて初めて使ったよ...
ScreenShot
Demo
こちらです(カメラ必須)
Downloads
hako001.lzh (hako001.fla + VideoCapture.as)
Codes
hako001.fla.txt
//?\ヲ??E?C???h?E?????lash????g??????
Stage.scaleMode = "showAll";
// 100%?\ヲ --- noScale
// ????\ヲ --- showAll
// ?O?????????g??--- noBorder
// ???E??t?B?b?g --- exactFit
//?L???v?`???N???X??C???X?^???X????
var vc:VideoCapture = new VideoCapture(this, myVideo);
init();
// ============================================================
//????UI?????R?[?h
// ============================================================
// ============================================================
//GUI???????C?x???g??o?^
// ============================================================
myComboBox_resolution.addEventListener("change", setResolution);
myComboBox_displaySize.addEventListener("change", setVideoSize);
//-------------------------------------------------------------
//?J?????x????s??????B
//-------------------------------------------------------------
function init() {
//?J????R???{?{?b?N?X??I???
myComboBox_resolution.selectedIndex = 3; // 3 => 320 x 240
//????x??\ヲ?T?C?Y????
setResolution();
setVideoSize();
//?J???????O?????\ヲ
myLabel_CameraName.text = '?J???????O : ' + vc.camera.name;
}
//-------------------------------------------------------------
//?t???[??????s?????
//-------------------------------------------------------------
onEnterFrame = function() {
//?p?????[?^??X?V???
PutCameraParameter();
};
//-------------------------------------------------------------
//?p?????[?^??X?V???
//-------------------------------------------------------------
function PutCameraParameter() {
myLabel_fps.text = 'fps : ' + vc.camera.currentFps;
myLabel_activityLevel.text =
'?J????????????[?V??????: ' + vc.camera.activityLevel;
}
//-------------------------------------------------------------
//????x???X???
//-------------------------------------------------------------
function setResolution() {
var capture_size_x, capture_size_y;
switch( myComboBox_resolution.text ) {
case '40 x 30':
capture_size_x = 40;
capture_size_y = 30;
break;
case '80 x 60':
capture_size_x = 80;
capture_size_y = 60;
break;
case '160 x 120':
capture_size_x = 160;
capture_size_y = 120;
break;
case '320 x 240':
capture_size_x = 320;
capture_size_y = 240;
break;
case '640 x 480':
capture_size_x = 640;
capture_size_y = 480;
break;
case '1280 x 960':
capture_size_x = 1280;
capture_size_y = 960;
break;
default: //?Y????????????????20 x 240
capture_size_x = 320;
capture_size_y = 240;
break;
}
//????x??X??K?p???
vc.camera.setMode(capture_size_x, capture_size_y, 30);
//?e?L?X?g???????
myLabel_resolution.text =
'?J?????????x : ' + vc.camera.width + " x " + vc.camera.height;
}
//-------------------------------------------------------------
//?\ヲ?T?C?Y???X???
//-------------------------------------------------------------
function setVideoSize() {
var display_size_x, display_size_y;
switch( myComboBox_displaySize.text ) {
case 'small':
display_size_x = 320;
display_size_y = 240;
break;
case 'medium':
display_size_x = 640;
display_size_y = 480;
break;
case 'large':
display_size_x = 1280;
display_size_y = 960;
break;
default: //?Y?????????????????
display_size_x = Stage.width;
display_size_y = Stage.height-100;
break;
}
//??X??K?p???
vc.setVideoSize(vc.video,Stage.width/2 - display_size_x/2,
(Stage.height-100)/2 - display_size_y/2,
display_size_x, display_size_y);
//?e?L?X?g???????
myLabel_displaySize.text = '?\ヲ?T?C?Y : ' + myComboBox_displaySize.text;
}
VideoCapture.as.txt
class VideoCapture {
private var target_mc:MovieClip; //ゥ?g??^?[?Q?b?g?p?X
public var video:Video; //?r?f?I?I?u?W?F?N?g????
public var camera:Camera; //????????J??????I?u?W?F?N?g
public function VideoCapture(target:MovieClip, _video:Video) {
//?n????????i?[
target_mc = target;
video = _video;
//?r?f?I?J?????????@????????_?C?A???O??\ヲ
System.showSettings(3);
//?r?f?I??L???v?`???J?
captureVideo();
}
private function captureVideo() {
//?J??????amera????
camera = Camera.get();
//?r?f?I?I?u?W?F?N?g??J??????f????\??t???
video.attachVideo(camera);
//?r?f?I?I?u?W?F?N?g???u????????
//???????L???v?`?????T?C?Y??\ヲ????
setVideoSize(video, 0, 0, camera.width, camera.height);
//Camera ??activity ??motionLevel ???????A
//??????????????????
camera.onActivity = function(isActive:Boolean) { }
}
//?r?f?I?I?u?W?F?N?g???u??????????
public function setVideoSize(arg_video, arg_x, arg_y, arg_width, arg_height) {
arg_video._x = arg_x;
arg_video._y = arg_y;
arg_video._width = arg_width;
arg_video._height = arg_height;
}
}