Ahora han aparecido juegos que utilizan esta manera para simular lo que nos hace Eye Toy (Ps2).
Tambiem han aparecido camaras IP, ect.. y me ha echo pensar lo siguiente:
montarte tu propia webcam de seguridad, es decir, montarte tu propias camaras de vigilancia a traves de webcam y controladas por Flash 8 / 9 y grabadas en tu ordenador.
Pensando en lo siguiente ---------------------------------------------------------------------- Deteccion de movimiento --> Para poder visualizar lo que trasmite a traves de la cam.
Alarma (Y grabacion) --> Poniendo un Objeto (dibujado), simulando una barrera, la cual se traspasa o toca, se pondria a grabar y se almacenaba en nuestro HD, poniendo unos codigos (Camara que ha realizado la grabacion (en caso de tener mas de una), hora de la grabacion y fecha, mas o menos asi: 021533110906 o cam021533110906).
Estas ideas me estan saliendo de la cabeza ahora mismo -----------------------------------------------------------------------
¿Porque he pensado en esto?
Lo pense en cuanto vi un juego de flash que detectaba el movimiento y aplicaba la accion y también por un documental sobre los usos de la tecnología en la seguridad (que vi hace meses y ahora se me ha pasado por la mente).
¿Se puede hacer esto?
PD: Si este post no es su lugar,pido que se mueva a donde corresponda.
Sólo hacer eso? Yo tengo hecho en flash un programita de control con Webcam (uso parte del code de Conejo) para controlar si un gato furtivo u otro "bicho" se acerca al estanque del jardín de mi casita en Valencia a "pescar" las carpas . Lo detecta y, además, con un posicionador con control paso a paso se orienta y le manda un chorro de agua a los mismísimos hocicos. Detecta movimiento, cuadricula posición esférica, ordena la orientación, chorrea, graba y envia grabación. Lo paso bomba viendo desde Oviedo las maniobras en el estanque de Valencia.
Si es que tenemos unos vicios mas raros!!
Se puede. Sigue con tu idea.....no es dificil.
Pd. Tiene un problemilla: no funciona bien cuando llueve. Pero como cuando llueve no hay gatos...
Eso sí que mola Lo bueno es que con AS3 se podrán hacer muchas más cosas, como bucle con getPixel para definir la forma exacta del movimiento, y parametrizarlo. De todas formas, yo estuve intentando mejorarlo bastante y acabé por llegar a esto: http://img428.imageshack.us/img428/636/prbzn0.swf
Te podrías complicar intentándolo hacer con flash, porque ya hay soluciones de ese tipo en el mercado (claro que a un elevado coste $$$) sólo busca por "Cámaras IP" y verás lo que te divierte, muchas de ellas WIFI!
En flash, de todas formas hay una opción de la cámara que es "getActivity()" si mal no recuerdo, te indica si hay actividad en la cámara o no, en vez de hacer el bucle de getPixel, lo que te ahorraría mucha CPU hasta que efectivamente hay movimiento y aplicas el getPixel para detectar exáctamente donde está el gato|bicho|hijo y soltarle unos cuantos miles de voltios en sus genitales para que no vuelva a tocar a los patos del estanque... xDDDDDD
PD: Teseo, me gustaría ver como tienes ese sistema La verdad que por falta de "componentes" y tiendas de calidad donde comprarlos no me he metido mucho con el tema de Flash+Dispositivos externos (arduino)
Un poquito de paciencia Perdonar, tengo aquí los archivos de control y demás, pero el FLA base lo tengo allá y no me lo traje. No está en el ordenador que uso allí para controlar de modo que no no lo puedo bajar desde aquí. Soy un poco desastre .......peeeeeero: Mañana marcho a Valencia (puente largo) y lo pillo!! Lo monto todo en ZIP y lo pongo para bajar. Se agradecerán gracias efusivas, cava, jamones, turrón, ... en fin, lo normal .
Inyaca, no batees hasta que no lance la bola. Despues de que este asunto se vaya complicando -ya diré por qué- pongo un script simple y lo explicaré lo mejor posible. Las funciones de control de cam de flash 8 contienen métodos para detectar movimiento de manera genérica: activityLevel , motionLevel , motionTimeOut , onActivity y setMotionLevel que aunque podemos utilizar (algunas de ellas pueden ser necesarias en este desarrollo) no nos determinan cuál es la zona de la imagen donde se efectua el movimiento, que es lo que deseamos. Existen varias maneras de hacerlo, yo usaba una distinta de la que expongo ahora pero era más limitada (y mas engorrosa de código). Primero el programita base:
Si quereis el FLA: Ahora el código por trozos y su explicación:
Código :
disparo._x = 221; sensible._x = 300; velo._x=230;
Para inicializar los mandos a unos valores (80,1,y 10)
Código :
cam.attachVideo(Camera.get());
tomando la cámara que esta en el escenario con nombre cam
Código :
w = cam._width; h = cam._height;
BR = new flash.geom.Rectangle(0,0,w,h); Pt= new flash.geom.Point();
cap = new flash.display.BitmapData(w,h,false,0);
ant = new flash.display.BitmapData(w,h,false,0);
creamos un rectangulo del tamaño de la cam y 2 bitmap de ese mismo tamaño: cap y ant
asociamos el bitmap ant al raiz y vinculamos el movieclip mira desde la biblioteca en un nivel superior
Código :
detectar = function(){
ant.draw(cap); cap.draw(cam);
ant.draw(cap, new flash.geom.Matrix(),null,"difference");
mov = ant.threshold(ant,BR,Pt,"<",umbral,0xffffffff);
cantidad_movi<(w * h -mov)? salida() : texto="";
}
dibujamos en el ant (anterior imagen) el cap (captura actual) y en el cap la imagen cam juntamos en ant y el cap usando la diferencia entre imágenes hacemos un thereshold a ant con un umbral de sensibilidad que definimos en el mando sensible que nos devuelve la varable mov ( nº de pixels cambiados) Si ese mov esta dentro de unos parametros que dedinimos con disparo y cantidad_mov entonces mandamos la salida, sino lo están borramos.
La variable zona es asignada con el rectángulo que determina donde existe "negro" en el bitmap ant. luego calculamos el centro de ese rectángulo y colocamos ahí la mira De aquí es desde donde mandaremos las acciones que deseemos efectuar con la deteccion, en el ejemplo usamosun simple campo de texto dinámico y la mira para representarla.
los controles de los mandos de sensibilidad, disparo y velocidad.
Código :
onMouseUp = function(){
stopDrag();
umbral = 0xff000000 +(320 - sensible._x)* 0x010101;
cantidad_movi = (disparo._x - 220)* w * h / 1000;
clearInterval(ID); ID = setInterval(detectar, 330-velo._x);
}
Fin del drag, asignacion de los valores y nuevo intervalo de llamada a detectar
Código :
onMouseUp();
para inicializar todo con los valores predeterminados La sensibilidad: depende de la cantidad de luz existente, ahora tiene ajuste manual pero lo bueno sería que hiciera un "balance de blancos" para que se ajuste automáticamente. Ya pasaré esa función. El disparo: indica la cantidad de movimiento un valor bajo detectará hasta el humo, Con un valor alto se tendrá que mover "mucha masa" para que se active. La velocidad: Es el valor de intervalo de comparación si el intervalo es alto permitirá que algo que se mueva despacio no sea detectado.
Se puede usar el "inventillo" para comandos activados por movimientos de las manos, ojos u otra cosa. En estos casos es bueno utilizar una deteccion del threshold a un determinado color que seria el del objeto a detectar. También, y ese es el motivo del retraso, para enfocar a la pantalla de la PS y con un pequeño interface (ESE ES EL QUE ESTOY DISEÑANDO) disparar a todo lo que selectivamente se menee. Cuando termine con las pruebas del circuito, posteo la electrónica para quien quiera montárselo. Mi hijo hará horas extras en la Play estas vacaciones
Dejo a Zah que "normalice" el código si lo desea y lo postee. Ya sabeis que yo voy más al fondo que a la forma.
No pues casi igual a como lo tenía yo... aunque mi idea era que se pudiera mover la bolita http://img428.imageshack.us/img428/636/prbzn0.swf Aparte de que no se me había ocurrido lo de optimizarlo con la variable "disparo". Lo de velocidad por mí mejor dejarlo constante. Hace tiempo que tengo que pasar eso a una clase y escribir un tuto . Lo que sí faltaría es una manera eficiente de eliminar el ruido (ya que sin eso, difícil hacer nada), pero creo que eso con AS2 mataría al player.
La bolita ....eso no lo veo dificil, haré un 4 en raya con su IA al que se pueda jugar con la cam como demo. En cuanto al "ruido" hay varios modos, básicamente mi función de ajuste de blancos la elimina, aunque también se pueden incluir unas rutinas inteligentes que optimicen aún más los parámetros mediante un mínimo "entrenamiento". Yo muevo objetos usando una mask en el thereshold y un dedal rojo... y va de cine, aunque quiero suprimir la necesidad del dedal. El intervalo (velo) va de aprox 50 fps a 5fps, no es mucha carga de CPU pues uso solamente 2 bitmap. y además lo necesito para continuar el desarrollo. esto es una versión mínima para entender el sistema base. Añadiré por aquí y a mi manera los distintos elementos que lo completan.
Hombre lo de la bolita y el ruido, como digo lo hago igual. El problema es que si eliminas el ruido disminuyendo la sensibilidad, también recortas la capacidad para detectar movimiento, y en mi ejemplo es muy difícil ajustar la sensibilidad de manera que pueda mover el objeto cómodamente con la mano y a la vez no se desvíe por el ruido. También tiene que ver que la madera de mi habitación se parece demasiado al color de mi piel, si apunto la cam a la pared, suelo tener mejores resultados, claro. No sé si habrá algo más eficiente, pero para eliminar el ruido habría que usar getPixel y cargarse todos los puntos que no tienen nada alrededor, o algo así.
Añadiré por aquí y a mi manera los distintos elementos que lo completan.
Captado. De todas formas, mi punto es que ya puestos a hacer cosas de , que tengan la mayor difusión posible