Changes

UMV

3,603 bytes removed, 20:56, 4 June 2010
Documentation
==Documentation==
*Screenshots:
 
uMV_windmills:
 
[[Image:Umv_shot.jpg]]
 
uMV_street:
 
[[Image:Umv_street_shot.jpg]]
 
uMV_black:
 
[[Image:Umv_black_shot.jpg]]
 
* Source Code:
 
-coding consists of initialization of camera, bitmap manipulating to create motion-detecting/color/background editing effects, and some animating code.
 -camera code and motion detecting code is adapted from [[http://drawlogic.com/2007/10/17/motion-detection-in-flash-as2-and-as3-and-c/]], with some changes for color and background editing effects.
CAMERA:
-sets up webcam and shows security panel
import flash[[Image:Cam_code.media.Camera;import flash.system.Security;jpg]]import flash.system.SecurityPanel;import flash.events.*;BITMAP:
var cam[[Image:Camera = CameraBitmap_initialize.getCamera(); if(cam != null){ cam.setMode(video1.width, video1.height, 12, true); video1.attachCamera(cam); cam.addEventListener(ActivityEvent.ACTIVITY, activityHandler);}else{ Security.showSettings(SecurityPanel.CAMERA)}var inited:Boolean=false;function activityHandler(event:ActivityEvent):void { if(cam.muted){ Security.showSettings(SecurityPanel.CAMERA) }else if(!inited){ initialize(); inited=true; } //trace("activityHandler: " + event);}jpg]]
BITMAP[[Image:Bitmap_snap.jpg]]import flash.display.Bitmap;import flash.display.BitmapData;ANIMATIONS:import flash.geom.Matrix;import flash.utils.Timer-code needed for animating windmills and shadows, the animations are based on camera activity level;import flash.eventsthe more movement the faster they go.TimerEvent;
--windmills in uMV
var now[[Image:BitmapData;var out:BitmapData;var before:BitmapData;var bitmap:Bitmap;var timer:Timer;var m:Matrix;var max:int = 7;function initialize(){ //create an array that will be the fading image cue list=new Array() //create an identity matrix m=new Matrix() //scale the transformation matrix to match the scale of the Video object on stage m.scale((video1.scaleX),(video1.scaleY)) //create a bitmap object in memory that is the same size as the Video object on stage now=new BitmapData(video1.width, video1.height, true, 0x00000000); //create a bitmap object in memory to hold a layered bitmap from the fading image cue out=new BitmapData(video1.width, video1.height, true, 0x00000000); //out.draw(video1,m); before = out.clone(); bitmap=new Bitmap(); //create a bitmap to display the bitmapdata this.addChild(bitmap); //position it to the right of the live Webcam feed //bitmap.x=video1.x+video1.width; bitmap.x=video1.x; bitmap.y=video1.y; //call the snap function every 1/10th of a second timer = new Timer(100); timer.addEventListener(TimerEvent.TIMER, snap); timer.start();}//capture a freezeframe from the webcam and copy it, called regularly do detect movementfunction snap(event:TimerEvent){ bitmap.bitmapData=out; //draw the video into the bitmapdata object object with the scaled transformation matrix now.draw(video1,m) //copy the current freezeframe done=now.clone() //now draw the previous freezeframe ("BEFORE"!) on top of the current frameframe and apply the 'difference' blendmode done.draw(before,m,null,"difference") //filter out all pixels in the differenced bitmap that are greater than just over black (0xFF111111) and make them green (0xFF00FF00) //over-write the previous contents of the bitmap done.threshold(done,done.rect,done.rect.topLeft,">",0xFF707070,0xFF00FF00,0xFFFFFFFF,true) //important line, used to set threshold of colors and change background to black while movement/people to green //add the finished bitmap to a fading image cue list.push(done.clone()) //if the cue is now greater than the maximum length we specified if(list.length > max) { //then remove the bitmap at the very front of the cue //and free the memory it was using list.shift().dispose() } //how many items in the fading cue var l=list.length //how much should the green channel deteriate on each degradation var each=255/l //declare local var to speed up the loop var g //var changed:uint //clear the out bitmap object so we can start a fresh out.fillRect(out.rect,0xFF000000) //copy the current bitmap and save it for the next time this function is called before=nowWindmill_code.clone() //loop through each bitmap in the fading image cue for(var i=0;i<l;++i) { //determine the current degradation g=each*i jpg]]
out.threshold(list[i], out.rect, out.rect.topLeft, "<=", 0xFF707070, 0x00000000, 0xFF000000, true); //this line was added to make unimportant pixels transparent - used for background changing-shadows in uMV_black and uMV_city
//copy all the pixels that are green in the current item in the fading image cue and make them into the degradated green color //add those pixels on top of the bitmap that will displayed to the user out[[Image:Shadows_code.threshold(list[ijpg]],out.rect,out.rect.topLeft,"==",0xFF00FF00,(255<<24 | 0<<16 | g<<8 | 0),0x00FFFFFF,false) }
52
edits