Comunidad de diseño web y desarrollo en internet online

problema con swf en detección de cara con Realidad Aumentada

Citar            
MensajeEscrito el 20 May 2010 01:22 pm
Hola a todos.

Estoy desarrollando una aplicación en flash de realidad aumentada en la que quiero poner un swf delante de la cara de la persona que esta frente a la cámara web. Hasta aquí todo bien. El problema que tengo es que cuando aparece el swf delante de la cara cada vez que se detecta un movimiento se empieza a repetir una y otra vez por toda la pantalla en vez de mostrar el swf moviendose delante de la cara.

¿como podría hacer que el swf se moviese como lo haría un video o un 3d delate de un marker en vez de que el swf se duplique una y otra vez?

creo que le problema esta en las funciones detectionHndler y onInit.
Este es el código que utilizo:

Código ActionScript :

package {
   import flash.display.*;
   import flash.events.Event;
   import flash.geom.*;
   import flash.events.*;
    import flash.net.*;
   import jp.maaash.ObjectDetection.ObjectDetector;
   import jp.maaash.ObjectDetection.ObjectDetectorEvent;
   import jp.maaash.ObjectDetection.ObjectDetectorOptions;

   import com.quasimondo.bitmapdata.CameraBitmap;

   public class Main extends Sprite {
      private var detector:ObjectDetector;
      private var pizarra:Sprite;
      private var camera:CameraBitmap;
      private var detectionMap:BitmapData;
      private var drawMatrix:Matrix;
      private var scaleFactor:int = 4;
      private var w:int = 640;
      private var h:int = 480;
      private var lastTimer:int = 0;

      public function Main() {
         iniciar();
         iniciarDetector();
      }

      private function iniciar():void {
         camera = new CameraBitmap(w, h);
         camera.addEventListener( Event.RENDER, cameraReadyHandler );
         addChild( new Bitmap( camera.bitmapData ) );
         pizarra = Sprite(addChild(new Sprite()));
      }

      private function cameraReadyHandler( event:Event ):void {
         detectionMap = new BitmapData( w / scaleFactor, h / scaleFactor, false, 0 );
         detectionMap.draw(camera.bitmapData,new Matrix( 1/ scaleFactor, 0, 0, 1 / scaleFactor ),null,"normal",null,true);
         detector.detect( detectionMap );
      }

      private function iniciarDetector():void {
         detector = new ObjectDetector();

         var opcionesDetector:ObjectDetectorOptions = new ObjectDetectorOptions();
         opcionesDetector.min_size  = 30;
         detector.options = opcionesDetector;
         detector.addEventListener(ObjectDetectorEvent.DETECTION_COMPLETE, detectionHandler );
      }
      private function detectionHandler( e :ObjectDetectorEvent ):void {
         
         pizarra.graphics.clear();
         if ( e.rects ) {
            pizarra.graphics.lineStyle(2, 0xff0000);
            e.rects.forEach( function( r :Rectangle, idx :int, arr :Array ) :void {   
            var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.INIT, onInit);
            var newContainer:Sprite = new Sprite();
            newContainer.addChild(loader);
            addChild(newContainer);
            loader.load(new URLRequest("swf/cuadrado.swf"));
         function onInit(event:Event):void {   
               event.target.content.x=r.x * scaleFactor;
               event.target.content.y=r.y * scaleFactor;
               event.target.content.width = r.width * scaleFactor;
               event.target.content.height = r.height * scaleFactor;
            }
           });
           }
     }
     }
}

Por plug78

46 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 May 2010 10:03 am
Resuelto.

Por plug78

46 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.