Comunidad de diseño web y desarrollo en internet online

mouse sigue objeto por medio de camara

Citar            
MensajeEscrito el 20 Jul 2010 10:07 pm
Hola estimado flasheros

necesito su ayuda en lo siguiente:

estoy usando la camara en flash, lo que pretendo es que se detecte un obketo o un color, cualquiera d elos dos, y que al detectarlo, el mouse siga los movimientos de ese objeto o color, claro que los movimientos de dicho objeto son captados por la camara.

la vdd lo unico que tengo hasta ahora es que se vea la camara web en el flash :lol: , espero no se rian de mi, de lo demas aun no tengo mucha idea de como hacerlo, les agradeceria muchisimo cualquier documentacion que me pudieran facilitar y mas aun les agradeceria cualquier ayuda directa.

gracias de antemano por leer este mensaje e intentar ayudarme.

Por loboblanco

74 de clabLevel



 

msie8
Citar            
MensajeEscrito el 20 Jul 2010 10:46 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Jul 2010 08:18 pm
Gracias por la respuesta mi estimado solisarg, estuve investigando masomenos algo similar a lo que me enviaste y encontre esta pagina que es algo mas parecido a lo que quiero hacer

http://www.christeso.com/blog/index.php/lab/tracking-multiple-objects-using-a-webcam/

ahi masomenos explica como funciona, pero la vdd es que aun estoy algo verde en programacion y me gustaria que le hecharan un ojito y me ayuden a realizar algo similar.

en el video que se ve de la pagina, se pueden seguir varios objetos, en mi caso, solo quiero uno y lo ideal seria que en vez de colocar un objeto que lo siga, obtener las coordenadas para colocarselas al mouse.

de antemano gracias a todos.

Por loboblanco

74 de clabLevel



 

msie8
Citar            
MensajeEscrito el 22 Jul 2010 08:31 pm
Seguro, en cuanto tenga un rato me pongo a estudiar esa página ;)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Jul 2010 09:32 pm
muchas gracias solisarg, de igual manera le hechare ganas a ver que saco

Por loboblanco

74 de clabLevel



 

msie8
Citar            
MensajeEscrito el 29 Jul 2010 01:56 am
Hola de nuevo chicos

bien, pues despues de haberme quemado varias neuronas :lol: , logre encontrar algunas funciones que posiblemente me ayuden a lograr mi objetivo, intente compilar algo, pero no salio como esperaba, les dejo a continuacion el codigo de lo que hice y despues explico el por que del codigo

Código :

// librerias que sin ellas no funciona el bitmapdata
import flash.display.Bitmap;
import flash.display.BitmapData;

//tomo la imagen de la pantalla
var img_tmp:BitmapData = new BitmapData(300, 300);

//hago un barrido por los pixeles de la pantalla
for (var i:uint = 0; i < 300; i++){
   for (var j:uint = 0; j < 300; j++){
      // obtengo el valor del color del pixel
      var scn_pxl:uint = img_tmp.getPixel(i,j);
      // lo comparo contra el color blanco, si es igual, salgo del ciclo
      if (scn_pxl == 16777215){
         break;
      }
      
   }
   // esto se repite para salir del otro ciclo
   if (scn_pxl == 16777215){
      // muestro las coordanas de los pixeles
      trace(i)
      trace(j)
         break;
   }
}


lo que intento hacer, es lo siguiente, de momento hice un nuevo archivo de 300x300, puse un movieclip en el escenario con el mismo tamaño, con contorno rojo, fondo negro y en el centro un punto blanco, la idea tras el codigo es que el bitmapdata obtenga una matriz de color de la pantalla (al menos se que devuelve una matriz de pixeles con valores RGB) despues de eso hago un barrido con los "for's" y detecto que coordenadas tiene un pixel color blanco (0xFFFFFF = 16777215), cuando sea igual, salgo de los barridos he imprimo los valores de las coordenadas.

lo anterior es por lo siguiente, la idea principal tras de esto es detectar un color tomado de la camara y que el mouse siga ese color, toy haciendo pequeños intentos para no frustarme con el grande :D , de momento el codigo que les estoy mostrando me grafica unas coordenadas (0,0), aun no se por que, o si funciona correctamente. Lo ideal seria que me dijera i=130, j=150 (por ejemplo) y esas coordenadas colocarselas al mouse.

algunas dudas que me surgieron son las siguientes:

si tengo varios MC en pantalla y aplico un bitmapdata, la matriz de colores se toma de la pantalla? o tengo que espeficiar un MC en especial? hay algun parametro para que me tome todos los colores de la pantalla?

puedo cambiar las coordenadas del mouse desde AS3?

de ante mano gracias por su ayuda

Por loboblanco

74 de clabLevel



 

msie8
Citar            
MensajeEscrito el 29 Jul 2010 01:36 pm
Bitmapdata.draw copia un MC con el contenido gráfico del MC, no hay nivel pantalla (en todo caso, mete todo lo que hay en la pantalla en un MC) las propiedades x e y del mouse son de solo lectura

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 29 Jul 2010 10:15 pm
Hola a todos

antes que nada gracias solisarg por la ayuda, resulta que hoy en la mañana platiando sobre este proyectito con un compañero, me surgio una idea que puede ser wena, les platico:

buscando mover el mouse, encontre lo que solisarg menciona que no se puede modificar, pero en otro post alguien intento hacer algo similar (mover el mouse) y le dijeron que mejor lo escondiera y usara un MC que mandara ahi en vez del mouse, y creo que eso es lo que hare, ademas creo me conviene por que asi podria aplicar la propiedad hittest para ver si el MC que ocupa el mouse, esta chocando con otro MC.

hoy en la noche me pondre a implementarlo a ver que sale y si queda les regreso a agradecerles y a mencionarles como quedo, nuevamente muchas gracias a todos por su apoyo.

Por loboblanco

74 de clabLevel



 

msie8
Citar            
MensajeEscrito el 06 Ago 2010 05:58 am
Hola chicos

como estan flasheros, pues aqui reportando las noticias de mis avances:

despues de muchas horas de trabajo, varias desveladas y bastante cafe, casi logre lo que queria, y digo casi pro que tiene algunos detalles que no entiendo que sucede y por eso regreso con ustedes a preguntar, a continuacion les dejo el codigo que he compilado y que funciona a mi parecer bastante bien.

en un nuevo documento de flash AS3, colo que un nuevo video y un MC vacio con el nombre de instancia "img_tmp", todo el en primer fotograma e hice invisible dicha linea.

igualmente en el primer frame, coloque este codigo:

Código :

// librerias que sin ellas no funciona el bitmapdata
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.media.Camera;
import flash.events.TimerEvent;
import flash.utils.Timer;

stop();

//defino la variable que contndra la camara
var cam;

// adjunto la camara a dicha variable
cam = Camera.getCamera();
cuadro.attachCamera(cam);

//agrego un listerner que me permite saber la desicion del usuario con respecto
//al uso de la camara
cam.addEventListener(StatusEvent.STATUS, onCameraStatus);

//la funcion que se realiza cuando el usuario toma una desicion
function onCameraStatus(evt):void{
   if(evt.code == "Camera.Muted"){
      trace("!! HAS NEGADO EL USO DE LA CAMARA !!");
   }
   if(evt.code == "Camera.Unmuted"){
// creamos el objeto timer que nos permite manejar las repeticiones, en este caso, se repite
// indefinidamente cada .5 segs
var ciclador:Timer = new Timer(500, 0);

// creamos el escuchador de eventos para realizar una actividad cuando pase el tiempo (500ms)
ciclador.addEventListener(TimerEvent.TIMER, infinite);

// iniciamos el contador
ciclador.start();

// Creamos la funcion que se ejecutara coada timempo programado
function infinite(Event:TimerEvent){
   
// creamos la matriz BitmapData
var img_tmp:BitmapData = new BitmapData(300, 300);

// tomamos la informacion del MC que deseamos
img_tmp.draw(cuadro);

//hago un barrido por los pixeles de la pantalla
for (var i:uint = 1; i < 300; i++){
   for (var j:uint = 1; j < 300; j++){
      // obtengo el valor del color del pixel
      var scn_pxl:uint = img_tmp.getPixel(i,j);
      // lo comparo contra el color blanco, si es igual, salgo del ciclo
      if (scn_pxl == 16777215){
         break;
      }
   }
   // esto se repite para salir del otro ciclo
   if (scn_pxl == 16777215){
      // muestro las coordanas de los pixeles
      trace(i)
      trace(j)
         break;
   }
}
}
   }
}



espero no sea mucho para que no les de flojera leerlo :lol: o se aburran.


bien, tomando encuenta los post anteriores a este, creo que este codigo es lo mas cercano que teno por el momento a lo que quiero, pero tiene algunos detalles que no se por que se dan y por ello les consulto.

dudas:
cuando tapo totalmente la camara, en las coordenadas me sale (1,120) y no se por que, o tambien cuando hay mucha mucha luz, y aun moviendo la camara, sigue dando dicha cantidad.

weno se les agradece su valiosa ayuda, apesar de todo, seguire investigando a ver que encuentro por ahi y haciendo pruebas, : 3


Un saludo

Por loboblanco

74 de clabLevel



 

msie8
Citar            
MensajeEscrito el 06 Ago 2010 01:45 pm
Tip: aplica un treshold y chequea sobre un rango más de un punto, sino tendrás falsos positivos todo el rato. Lo de la coordenada, posiblemente se quede con alguna que dio anteriormente y no se actualice

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Ago 2010 04:50 am
Hola mi estimado solisarg

pues con la novedad que ya quedo el sistema, no quedo perfectamente pero tus consejos fueron muy utiles y quiero agradecerte mucho por todo.

apesar de que ya funciona aun me gustaria mejorarlo un poco, pero la vdd es que para eso me gustaria que me dieras algo de informacion sobre como se maneja el threshold, por que yo le coloque unos valores que venian en un ejemplo y de pura suerte me sirvieron, cuando menos para ver que funcione, como dije no a la perfeccion pero funciona, creo que arreglando dichos valores mejoraria, pero la vdd es que no se muy bien que hacen dichos valores del threshold, investigue pero no encontre un buen ejemplo que me explique que hacen.

en fin nuevamente gracias por tu ayuda solisarg.

Por loboblanco

74 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Ago 2010 03:23 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Ago 2010 01:16 am
gracias por el enlace solisarg, pero ya habia revisado ese enlace pero aun asi no entendi del todo como funcionaba, mejor te paso lo que hice y en base a eso, si no seria mucha molestia, podrias explicarme.

segun lo que yo puse en el codigo es lo siguiente (omitire algunas partes obvias)

Código :

new Rectangle(0,0,video.width,video.height), new Point(0,0), "<", 0x00CCCCCC, 0x000000FF, 0x00FF0000, false);


esto fue lo que puse despues del threshold, este codigo me pone la pantalla como en tonos blancos y mientras mas negro es el color que capta, mas blanca se pone la pantalla

me sente a analizar (aunque el trabajo no da mucho tiempo :lol: ) segun yo a ver la relacion de los colores, pero no llegue a ninguna conclusion.

podrias ayudarme a comprender un poco mejor lo que esta haciendo?

Por loboblanco

74 de clabLevel



 

msie8
Citar            
MensajeEscrito el 19 Ago 2010 01:16 am
perdon se me olvido porner por favor y un Saludo

Por loboblanco

74 de clabLevel



 

msie8
Citar            
MensajeEscrito el 19 Ago 2010 01:26 pm
Hace bastante que trabajé en esto, haciendo análisis de bitmaps para ver si la foto que subía el usuario tenía demasiada luz o demasiado poca (eran fotos de personas) Básicamente el threshold filtra los colores a partir de un determinado nivel en base a su valor (hexadecimal, decimal, da lo mismo) Entonces yendo de blanco a negro, buscas el un valor que sea adecuado y le aplicas el filtro, cuentas lo que queda y listo. Yo hacia una copia del bitmap para no modificarlo y un pase de muestreo porque hay muchiiiiisimos pixels. En lo que hice de seguimiento de la cámara (un personaje to cambores) lo aplicaba para detectar formas sobre un fondo contrastado. No busqué entender mucho sino que funcione, ya que hay mucho algoritmo y teoría de colores por detrás, que se va comprendiendo de a poco

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Ene 2011 08:43 pm

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

chrome

 

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