Paste Code
Paste Blends
Paste Images
package 
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.ActivityEvent;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.media.Video;
import flash.net.ObjectEncoding;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.utils.Timer;

import jp.maaash.ObjectDetection.ObjectDetector;
import jp.maaash.ObjectDetection.ObjectDetectorEvent;
import jp.maaash.ObjectDetection.ObjectDetectorOptions;

import org.papervision3d.cameras.Camera3D;
import org.papervision3d.objects.parsers.Collada;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;

//swf-data
[SWF(width="640", height="480", frameRate="15")]

public class Main extends Sprite
{
private var scene:Scene3D;
private var sceneWidth:int;
private var sceneHeight:int;
private var vp:Viewport3D;
private var cam:Camera3D;
private var bre:BasicRenderEngine;
private var collada:Collada;
private var webcam:cameraClass;
private var video:Video;
private var bmpdFromVideo:BitmapData;
private var bmpFromVideo:Bitmap;
private var intervallToFetch:int; // in milliseconds

// detector objects
private var detector:ObjectDetector;
private var options:ObjectDetectorOptions;
private var detectionMap:BitmapData;
private var drawMatrix:Matrix;
private var scaleFactor:int = 4; // scales video-image which is processed by marilena
private var faceRectContainer:Sprite;
private var graph:Graphics;

private var HeadCenterX:Number;
private var HeadCenterY:Number;

private var rollEnabled:Boolean;


public function Main():void
{
sceneWidth = 640;
sceneHeight = 480;
intervallToFetch = 67; // about 15fps
faceRectContainer = new Sprite;
rollEnabled = false;

// webcamera + video
webcam = new cameraClass(sceneWidth, sceneHeight);
video = webcam.camVideo;

if(video == null) {
// no webcam found
trace("NO WEBCAM!!");
var myText:TextField = new TextField();
myText.text = "Please CONNECT your WEBCAM and TRY AGAIN";
myText.width = 350;
myText.height = 100;
myText.x = 180;
myText.y = 220;
myText.selectable = false;
addChild(myText);
}
else {
// webcam available
video.addEventListener(Event.ACTIVATE, initWebcam);
video.x = video.y = 0;
addChild(video);

// bitmap for processing the video image
bmpdFromVideo = new BitmapData(video.width, video.height, false);
///bmpFromVideo = new Bitmap(bmpdFromVideo);
///bmpFromVideo.x = 10; bmpFromVideo.y = 30;
// initiate the image-processing-class, pass video-data for special processings
// var imgProc:imageClassOpt = new imageClassOpt(video.width, video.height);

//detection stuff
detectionMap = new BitmapData(sceneWidth/scaleFactor, sceneHeight/scaleFactor, false, 0);
drawMatrix = new Matrix(1/scaleFactor, 0, 0, 1/scaleFactor);
initDetector();

addChild(faceRectContainer);

setupPV3D();

addCollada();

addEventListener(Event.ENTER_FRAME, loop);

addEventListener(MouseEvent.CLICK, mouseClicked);

}
}

private function initDetector():void {
detector = new ObjectDetector();
var options:ObjectDetectorOptions = new ObjectDetectorOptions();
options.min_size = 30;
detector.options = options;
detector.addEventListener(ObjectDetectorEvent.DETECTION_COMPLETE, detectionHandler);
}

private function detectionHandler(e:ObjectDetectorEvent):void {
// clear current face rectangle on screen
graph = faceRectContainer.graphics;
graph.clear();

// get detected face as rectangle/s from ObjectDetectorEvent
if( e.rects ){
graph.lineStyle(2, 128);
// iterate over face rectangles
e.rects.forEach( function( r:Rectangle, idx :int, arr :Array ) :void {
// draw rectangle around detected face (mirrored)
graph.drawRect(sceneWidth-(r.width+r.x)*scaleFactor, r.y*scaleFactor, r.width*scaleFactor, r.height*scaleFactor);
// get head center
HeadCenterX = sceneWidth-(r.width / 2 + r.x) * scaleFactor;
HeadCenterY = (r.height / 2 + r.y) * scaleFactor;
// position collada object in center of face (mirrored)
collada.x = -sceneWidth / 2 + HeadCenterX;
// 40 to position cow on user's eyes, last value should be calculated by height of collada-object
collada.y = sceneHeight / 2 - HeadCenterY - 40;
});
}
// mouse rotation for collada-object
collada.rotationY = 155 - ((mouseX / stage.width) * 140); //Rotation //*360
// additional roll of collada-object (enabled by mouseclick on object)
if (rollEnabled) {
collada.roll(20 - ((mouseY / stage.height) * 60));
}
}

private function initWebcam(e:Event):void {
trace("#INIT\nVideo started:",e,"\n");
video.removeEventListener(Event.ACTIVATE, init);
webcam.camera.addEventListener(ActivityEvent.ACTIVITY, activated);

// mirror the video
var ma:Matrix = video.transform.matrix;
// flip horizontal assuming that scaleX is currently 1
ma.a = -1;
// apply the mirror matrix to the display object
ma.tx = video.width+video.x;
video.transform.matrix = ma;
}

private function activated(e:Event):void {
if (e.type == "activity") {
webcam.camera.removeEventListener(ActivityEvent.ACTIVITY, activated);
// timer that fetches the webcam image for processing
startTimer();
}
}

private function startTimer():void {
var myTimer:Timer = new Timer(intervallToFetch);
myTimer.addEventListener("timer", getAndDetectCamImage);
myTimer.start();
}

private function getAndDetectCamImage(e:Event):void {
// receive bitmapdata from video
bmpdFromVideo.draw(video);
// pass data to detector
detectionMap.draw(bmpdFromVideo,drawMatrix,null,"normal",null,true);
detector.detect(detectionMap);
}

private function addCollada():void
{
// load collada object and add it to scene
collada = new Collada("cow.dae");
scene.addChild(collada);
}

private function loop(e:Event):void
{
// rendering of 3d scene
bre.renderScene(scene,cam,vp);
}

private function mouseClicked(m:MouseEvent):void
{
rollEnabled = !rollEnabled;
}

private function setupPV3D():void
{
// Papervision 3D inits
scene = new Scene3D();
cam = new Camera3D();
cam.z = -400;
vp = new Viewport3D();
bre = new BasicRenderEngine();
addChild(vp);
}

}

}
  1. package
  2. {
  3.         import flash.display.Bitmap;
  4.         import flash.display.BitmapData;
  5.         import flash.display.Graphics;
  6.         import flash.display.Sprite;
  7.         import flash.events.Event;
  8.         import flash.events.MouseEvent;
  9.         import flash.events.ActivityEvent;
  10.         import flash.geom.Matrix;
  11.         import flash.geom.Rectangle;
  12.         import flash.media.Video;
  13.         import flash.net.ObjectEncoding;
  14.         import flash.text.TextField;
  15.         import flash.text.TextFormat;
  16.         import flash.utils.Timer;
  17.        
  18.         import jp.maaash.ObjectDetection.ObjectDetector;
  19.         import jp.maaash.ObjectDetection.ObjectDetectorEvent;
  20.         import jp.maaash.ObjectDetection.ObjectDetectorOptions;
  21.        
  22.         import org.papervision3d.cameras.Camera3D;
  23.         import org.papervision3d.objects.parsers.Collada;
  24.         import org.papervision3d.render.BasicRenderEngine;
  25.         import org.papervision3d.scenes.Scene3D;
  26.         import org.papervision3d.view.Viewport3D;
  27.        
  28.         //swf-data
  29.         [SWF(width="640", height="480", frameRate="15")]
  30.          
  31.         public class Main extends Sprite
  32.         {
  33.                 private var scene:Scene3D;
  34.                 private var sceneWidth:int;
  35.                 private var sceneHeight:int;
  36.                 private var vp:Viewport3D;
  37.                 private var cam:Camera3D;
  38.                 private var bre:BasicRenderEngine;
  39.                 private var collada:Collada;
  40.                 private var webcam:cameraClass;
  41.                 private var video:Video;
  42.                 private var bmpdFromVideo:BitmapData;
  43.                 private var bmpFromVideo:Bitmap;
  44.                 private var intervallToFetch:int; // in milliseconds
  45.                
  46.                 // detector objects
  47.                 private var detector:ObjectDetector;
  48.                 private var options:ObjectDetectorOptions;
  49.                 private var detectionMap:BitmapData;
  50.                 private var drawMatrix:Matrix;
  51.                 private var scaleFactor:int = 4; // scales video-image which is processed by marilena
  52.                 private var faceRectContainer:Sprite;
  53.                 private var graph:Graphics;
  54.                
  55.                 private var HeadCenterX:Number;
  56.                 private var HeadCenterY:Number;
  57.  
  58.                 private var rollEnabled:Boolean;
  59.  
  60.                
  61.                 public function Main():void
  62.                 {
  63.                         sceneWidth = 640;
  64.                         sceneHeight = 480;
  65.                         intervallToFetch = 67; // about 15fps
  66.                         faceRectContainer = new Sprite;
  67.                         rollEnabled = false;
  68.                        
  69.                         // webcamera + video
  70.                         webcam = new cameraClass(sceneWidth, sceneHeight);
  71.                         video = webcam.camVideo;
  72.                        
  73.                         if(video == null) {
  74.                                 // no webcam found
  75.                                 trace("NO WEBCAM!!");
  76.                                 var myText:TextField = new TextField();
  77.                                 myText.text = "Please CONNECT your WEBCAM and TRY AGAIN";
  78.                                 myText.width = 350;
  79.                                 myText.height = 100;
  80.                                 myText.x = 180;
  81.                                 myText.y = 220;
  82.                                 myText.selectable = false;
  83.                                 addChild(myText);
  84.                         }
  85.                         else {
  86.                                 // webcam available
  87.                                 video.addEventListener(Event.ACTIVATE, initWebcam);
  88.                                 video.x = video.y = 0;
  89.                                 addChild(video);
  90.                                
  91.                                 // bitmap for processing the video image
  92.                                 bmpdFromVideo = new BitmapData(video.width, video.height, false);
  93.                                 ///bmpFromVideo = new Bitmap(bmpdFromVideo);
  94.                                 ///bmpFromVideo.x = 10; bmpFromVideo.y = 30;
  95.                                 // initiate the image-processing-class, pass video-data for special processings
  96.                                 // var imgProc:imageClassOpt = new imageClassOpt(video.width, video.height);
  97.                                
  98.                                 //detection stuff
  99.                                 detectionMap = new BitmapData(sceneWidth/scaleFactor, sceneHeight/scaleFactor, false, 0);
  100.                                 drawMatrix = new Matrix(1/scaleFactor, 0, 0, 1/scaleFactor);
  101.                                 initDetector();
  102.  
  103.                                 addChild(faceRectContainer);
  104.                                
  105.                                 setupPV3D();
  106.                                
  107.                                 addCollada();
  108.                                
  109.                                 addEventListener(Event.ENTER_FRAME, loop);
  110.                                
  111.                                 addEventListener(MouseEvent.CLICK, mouseClicked);
  112.                                
  113.                         }
  114.                 }
  115.                
  116.                 private function initDetector():void {
  117.                         detector = new ObjectDetector();
  118.                         var options:ObjectDetectorOptions = new ObjectDetectorOptions();
  119.                         options.min_size  = 30;
  120.                         detector.options = options;
  121.                         detector.addEventListener(ObjectDetectorEvent.DETECTION_COMPLETE, detectionHandler);
  122.                 }
  123.                
  124.                 private function detectionHandler(e:ObjectDetectorEvent):void {
  125.                         // clear current face rectangle on screen
  126.                         graph = faceRectContainer.graphics;
  127.                         graph.clear();
  128.  
  129.                         // get detected face as rectangle/s from ObjectDetectorEvent
  130.                         if( e.rects ){
  131.                                 graph.lineStyle(2, 128);
  132.                                 // iterate over face rectangles
  133.                                 e.rects.forEach( function( r:Rectangle, idx :int, arr :Array ) :void {
  134.                                         // draw rectangle around detected face (mirrored)
  135.                                         graph.drawRect(sceneWidth-(r.width+r.x)*scaleFactor, r.y*scaleFactor, r.width*scaleFactor, r.height*scaleFactor);
  136.                                         // get head center
  137.                                         HeadCenterX = sceneWidth-(r.width / 2  + r.x) * scaleFactor;
  138.                                         HeadCenterY = (r.height / 2 + r.y) * scaleFactor;
  139.                                         // position collada object in center of face (mirrored)
  140.                                         collada.x = -sceneWidth / 2 + HeadCenterX;
  141.                                         // 40 to position cow on user's eyes, last value should be calculated by height of collada-object
  142.                                         collada.y = sceneHeight / 2 - HeadCenterY - 40;
  143.                                 });
  144.                         }
  145.                         // mouse rotation for collada-object
  146.                         collada.rotationY = 155 - ((mouseX / stage.width) * 140); //Rotation //*360
  147.                         // additional roll of collada-object (enabled by mouseclick on object)
  148.                         if (rollEnabled) {
  149.                                 collada.roll(20 - ((mouseY / stage.height) * 60));
  150.                         }
  151.                 }
  152.                
  153.                 private function initWebcam(e:Event):void {
  154.                         trace("#INIT\nVideo started:",e,"\n");
  155.                         video.removeEventListener(Event.ACTIVATE, init);
  156.                         webcam.camera.addEventListener(ActivityEvent.ACTIVITY, activated);
  157.                        
  158.                         // mirror the video
  159.                         var ma:Matrix = video.transform.matrix;
  160.                         // flip horizontal assuming that scaleX is currently 1
  161.                         ma.a = -1;
  162.                         // apply the mirror matrix to the display object
  163.                         ma.tx = video.width+video.x;
  164.                         video.transform.matrix = ma;
  165.                 }
  166.  
  167.                 private function activated(e:Event):void {
  168.                         if (e.type == "activity") {
  169.                                 webcam.camera.removeEventListener(ActivityEvent.ACTIVITY, activated);
  170.                                 // timer that fetches the webcam image for processing
  171.                                 startTimer();
  172.                         }
  173.                 }
  174.                
  175.                 private function startTimer():void {
  176.                         var myTimer:Timer = new Timer(intervallToFetch);
  177.                         myTimer.addEventListener("timer", getAndDetectCamImage);
  178.                         myTimer.start();
  179.                 }
  180.                
  181.                 private function getAndDetectCamImage(e:Event):void {
  182.                         // receive bitmapdata from video
  183.                         bmpdFromVideo.draw(video);
  184.                         // pass data to detector
  185.                         detectionMap.draw(bmpdFromVideo,drawMatrix,null,"normal",null,true);
  186.                         detector.detect(detectionMap);
  187.                 }
  188.                
  189.                 private function addCollada():void
  190.                 {
  191.                         // load collada object and add it to scene
  192.                         collada = new Collada("cow.dae");
  193.                         scene.addChild(collada);
  194.                 }
  195.                
  196.                 private function loop(e:Event):void
  197.                 {
  198.                         // rendering of 3d scene
  199.                         bre.renderScene(scene,cam,vp);
  200.                 }
  201.  
  202.                 private function mouseClicked(m:MouseEvent):void
  203.                 {
  204.                         rollEnabled = !rollEnabled;
  205.                 }
  206.                
  207.                 private function setupPV3D():void
  208.                 {
  209.                         // Papervision 3D inits
  210.                         scene = new Scene3D();
  211.                         cam = new Camera3D();
  212.                         cam.z = -400;
  213.                         vp = new Viewport3D();
  214.                         bre = new BasicRenderEngine();
  215.                         addChild(vp);
  216.                 }
  217.                
  218.         }
  219.        
  220. }
  221.  
go to heaven