大阪てら子 22 「webカメラで遊ぼう!」に参加してきました。
毎度ながら、スイマセン!的な発表なんですが、今回もスイマセンです。
今回やっておきたかったことは以下の2点。
- Webカメラで撮った画像を保存。
- シンプルな動体検知
こんなものを発表しました動画
Webカメラで撮った画像を保存
Flashのみで画像保存はFlash Player9の段階では不可能?みたいなので、サーバー側(php)で保存します。
※Flash Player10からはローカルファイルアクセス機能が出来るようになったので画像保存できるかもしれない。
1、BitmapDataをエンコードしてサーバーへ送信
2、サーバー側で画像保存
※サーバーはローカルにMAMPをインストールした環境を使用しました。(mac 0SX)
Flash→PHPの連携はパラメーターの引き渡しが簡単に出来るAMFPHPを使ってみました。エンコードに関しては、as3corelibよりPNGEncoderを使用しています。
主要部分のASスクリプト
package { import com.adobe.images.PNGEncoder; import flash.display.BitmapData; import flash.display.Sprite; import flash.net.NetConnection; import flash.net.Responder; import flash.utils.ByteArray; public class Test_amfphp extends Sprite { public function Test_amfphp() { //BitmapDataをエンコード var bmd:BitmapData = new BitmapData(100,100,false,0x0) var byteArray:ByteArray = PNGEncoder.encode(bmd); //AMFPHPのgateway.phpがある場所 var gateway:String = "http://localhost/amfphp/gateway.php"; //AMFPHPが返す値の受け皿を設定 var responder:Responder = new Responder(_onResult,_onStatus); //つなげる。 var connection:NetConnection = new NetConnection(); connection.connect(gateway); //呼ぶ connection.call("PHPクラス名.メソッド名",responder,byteArray,"その他引数1","その他引数2"); } private function _onResult($result:Object):void { trace("結果_" + $result); } private function _onStatus($status:Object):void { trace("ステータス_" + $status); } } }
画像保存のphpスクリプト
class PngSave { public function download($image,$dir) { $fileName = $dir."hae.png"; // ファイル名 //方法1 $fp = fopen($fileName, 'wb'); fwrite($fp, $image->data); fclose($fp); //方法2 ブラウザからじゃないと上手くいかない? //$im = imagecreatefromstring ($image->data); //header('Content-Type: image/png'); //header("Content-Disposition: attachment; filename=".$fileName); //imagepng($im); return $fileName; } }
ActionScript側からAMFPHPにByteArrayを飛ばした時、$image->dataにデータが入ってます。※$imageと指定してハマりました。
参考:AMFPHP1.9b2でByteArrayをもらう、返す
シンプルな動体検知
動体検知ですが、検知する場所を決めて、その場所のピクセルの色が一つ前の色と最新の色とで、
どれだけ変化しているか?で判断しています。
今回の場合、画面の左、上、右の3カ所に検知するポイントを置いて、そこのピクセルの色が一定以上変化したかどうか?で動体検知を行いました。
動体検知判断のASスクリプト
package { import flash.display.Sprite; public class Test_ColorDiff extends Sprite { public function Test_ColorDiff() { //古い色と最新の色 var color_old:uint = 0xFFFFFF; var color_new:uint = 0xFFFF00; //古い色をR,G,Bに分ける var color_old_arr:Array = [ color_old >> 16 , color_old >> 8 & 0xFF , color_old & 0xFF , ]; trace("old-R_" + color_old_arr[0]); //255 trace("old-G_" + color_old_arr[1]); //255 trace("old-B_" + color_old_arr[2]); //255 //新しいい色をR,G,Bに分ける var color_new_arr:Array = [ color_new >> 16 , color_new >> 8 & 0xFF , color_new & 0xFF , ]; trace("new-R_" + color_new_arr[0]); //255 trace("new-G_" + color_new_arr[1]); //255 trace("new-B_" + color_new_arr[2]); //0 //R,G,Bそれぞれ古い色と新しい色を比較し、threshold_valueの値以上に差が出たら「動いた」と見なす。 var threshold_value:Number = 20; for(var i:Number = 0;i <= 2;i++ ){ if(Math.abs(color_old_arr[i] - color_new_arr[i]) > threshold_value ) { trace("動いた!"); } } } } }
てな感じです。
大阪てら子 22 「webカメラで遊ぼう!」の感想
世の中広いわけで、凄いスクリプトを書く人、とても良いアイデアを持っている人を目のあたりにすると、
危機感というか、やべー状態になりました。
ということでこれからも精進していこうと思います。
USKさんが今回の様子をしっかりまとめてくださっています。
それと、トンカさんが同様に動体検知されてました。
てら子に行ってきた!~大阪てら子 22 「webカメラで遊ぼう!」~@キテレツ荘
動体検知方法は、BlendMode.DIFFERENCEで古い情報と新しい情報の差分を取得する方法のようです。その方法は全く思いつかなかった!!
comments
なんか変な人が映ってる
参考にさせていただきます^^。
その変な人は気になさらないでください^^。
シナチクさんみたいに顔出ししようとしたんですが、
やっぱやめました。。
ご紹介にあずかり光栄です。
っても動体検知の差分取得はいろんな人の受け売りなんです…。
パンツカムヨさんのように面白プレゼンができるよう頑張ります!
AMFPHP思ったより簡単に使えそう!
参考にさせていただきますね。
>とんかさん
こちらこそ、勉強させて頂きありがとうございます!
AMFPHPはHallo worldレベルでしか使ってないですが、
結構簡単かな?って気がしました。
こんにちは。センバツ事務局です。
突然のご連絡で失礼いたします。
「崖っぷちWEBデザイナーブログ」を拝見させていただき、
大変楽しく読ませていただきました。
そこで、今回はぜひ弊社サービス「センバツ( http://www.1000buzz.jp/ )」を
ご紹介させていただきたく存じます。
(既にご存知の方にお届けしている場合は申し訳ございません。)
「センバツ」とは、審査を通過されたブロガーの方だけが参加できる
プレミアムなブロガー向けサービスです。
会員様には企業からリリースされた新商品やイベントなどの情報が届きます。
その情報をもとにブログ上で商品やイベントをご紹介いただくと、
お礼として掲載料をお支払いいたします。
※1:ご利用はもちろん全て無料です。
※2:会員登録にはブログの審査が必要です。
☆選ばれたブロガーの方だけに、いち早くプレミアムな情報をお届けいたします!
☆ブログを書くだけで高額な掲載料(1,000~10,000円)がゲットできます!
☆限定イベントに参加できたり、新商品を試せたり、お得で楽しい体験が盛りだくさん!
↓まずはこちらから審査依頼↓
http://www.1000buzz.jp/common_link.aspx?action=fwd&af=20018
皆様からの審査依頼を楽しみにお待ちしております!
本メッセージにご返信をいただいても返信できない場合があります。
何かお問い合わせをいただく場合はこちらのアドレスにご連絡ください。
お問い合わせ先:customer@1000buzz.jp
この変装グッズはわざわざ用意したん?
>どすこい
学生ん時に文化祭で使ったやつを発掘してきたよー
物持ちいいなー。
でもただ、見てる側からしたら単なるヘンタイだから気をつけて!
I just couldn't depart your site before suggesting that I actually enjoyed the standard information a person provide for your visitors? Is gonna be back often in order to check up on new posts