Módulo de visión por computador

Started by grisendo, November 22, 2009, 04:19:55 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

grisendo

Hola a todos,

El motivo mi post anterior era crear un módulo para Bennu para poder realizar operaciones de visión por computador.
Tras pegarme rato intentando hacer que compilase en mi Ubuntu de 64 bits, tiré la toalla, reinicié en Windows XP
y conseguí acoplar todo, así que solo tengo hecha la librería para windows en DLL.

A mí me funciona, en el ordenador de mi hermano también... pero a valmontwindgate se lo he pasado y no le rula,
le dice que le falta una DLL (la que he creado yo, opencv.dll) que le dice que no la encuentra (pero está ahi!!!)

Está basado en OpenCV, las funciones que incluye de momento son las que vienen en el main.prg:

// Abrir la webcam. Si solo tenemos una es la 0, si hay más se puede elegir, devuelve un ID de la cámara
camara=openCam(0);

// Obtener un fotograma de la camara, y devuelve el números de caras del fotograma
// Guarda el fotograma con las caras en "salida.jpg"
// Esta funcion evidentemente es de prueba, no tiene mucho sentido xDD tal y como está
// No es que sea lento pillando imágenes de la cámara, es un bucle que tengo ahí dentro metido
// para esperar a que se inicialice la cámara, si no sale fotograma negro.

caras=getFaces(int idCamara);

// Cerrar la cámara con el ID
closeCam(idCamara);

Descarga del ejemplo (sin código fuente por el momento):
http://www.grisendo.com/subidas/opencv.rar


A ver si a vosotros os funciona, y conseguís explicarnos por qué a valmontwindgate no xDD

Drumpi

¿Exactamente qué es lo que hace la librería? ¿tomar una foto con la webcam y recotar las caras de los que aparezcan?

Si es eso, me interesa el tema de cómo lo hace y cómo has obtenido la información, porque estoy intentando hacer lo mismo pero reconociendo palabras y se me están agotando las fuentes de consulta :S
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

grisendo

De momento la librería hace:

Abre el controlador de la webcam, toma una imagen, pinta en ella recuadros verdes sobre lo que detecta que son caras y la guarda en "salida.jpg", devolviendo el número de caras encontradas, y finalmente cierra la cámara. Quiero "liberarla" cuando pueda convertir del formato de imágenes que utilizo actualmente al que utiliza bennu en funciones del tipo "load_png()" (si alguien me echa un cable diciéndome como se llama la estructura o dónde está se lo agradecería, porque ando muy liado y me ahorraría trabajo en ir buscando por el código).

La verdad que la función de detectar caras está muy mal hecha (lo siento, ando un poco liado), tengo que utilizar otra que haga filtrado de tamaño y detecte ojos, boca, etc... Pero la idea es que la librería haga más cosas, entre ellas la que tú dices (como los sistemas que leen matrículas en los parkings). La visión por computador es un campo muy amplio.

¿Qué más se podría hacer? En primer lugar juegos tipo los de la webcam de PS2. Se me ocurre también un piedra-papel-tijera (o piedra-papel-tijera-lagarto-spock para los más freaks xDD), generación automática de mapas de durezas a partir de imágenes, control del ratón o de un personaje con la mirada o movimiento de cabeza, reconocimiento de estado de ánimo del usuario, obtención de texturas de la cara del usuario para ponerle a un personaje 3D... el límite lo pone la imaginación (y el tiempo para investigar sobre cómo implementar estos temas, claro :P).

Sobre cómo he obtenido la información... pues unas cuantas asignaturas de imágenes y visión por computador donde aprendí lo básico y un proyecto fin de carera sobre detección facial, muchas horas de leerme libros, artículos del IEEE y tal... si quieres información te puedo dar bibligrafía.

FreeYourMind

Ha funcionado!!! Esto promete hehehehehehe  ;D
Muchas grácias, karma up :)

Nota: No pongo la foto porque estaba en pelotas  ;D ;D

FreeYourMind

#4
Si me envias info como compilar en Windows que es el que uso, te puedo echar un cable, ya que estoy pensando en ponerme tambien con la creación de modulos, y todavia no he intentado compilar Bennu.

Sobre lo de controlar el ordenador con los ojos, mi instituto es pionero en ello en Portugal, compis mios se hicieron cargo del proyecto y es un autentico exito, igual podriamos tener una alternativa grátis con Bennu :)

http://www.magickey.ipg.pt/

Windgate

Este módulo promete y mucho, lástima que me da un error a compilar, pero creo que es problema de algún virus que tengo y de la cantidad de días que llevo sin reiniciar Windows, se lo he pasado a amigos y les funciona a todos OK.

De momento toma mi karma, sé que te lo has trabajado a tope, a ver si le puedo sacar partido :P
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

grisendo

#6
Si quieres información para crear librerías mejor por privado, ¿no?

Yo la verdad que igual estoy metiendo la pata y compilando con bibliotecas viejas y tal,
así que igual no te es muy útil (no iban a sacar un tutorial pronto sobre eso?)

A ver si alguien me cuenta como crear tipos de datos GRAPH o lo que sea necesario
(los que utilizan los procesos y los load_png()) porque no los entiendo, debo de hacer
algo mal que me peta.

De momento tengo esto, pero ya digo que me peta:

static int toGraph(INSTANCE *my, int *params){
    GRAPH *graph;
    Mi_imagen* image;
    image=(Mi_imagen*)params[0];
    graph=bitmap_new(0,image->width,image->height,image->channels);
    return((int)graph);
}

grisendo

#7
Acabo de subir una pequeña actualización mejorada de la detección de caras (http://www.grisendo.com/subidas/opencv.rar)

Resultado:



FreeYourMind

Ya te la envie (no se porque no me sale en el outbox!).

Drumpi

Agradecería muchísimo esa bibliografía, a ver si por lo menos, para salir del paso, puedo hacer que reconozca comandos de una persona, y luego ya me liaré a investigar la descomposición en frecuencias, reconocimiento de palabras y demás variables del habla.

Por otro lado, no busques la función load_png, Bennu, si sigue como Fenix, usa internamente el formato MAP con más variables, así que busca la función NEW_MAP y ve tirando del hilo, es que no recuerdo el nombre de la estructura interna. Te lo digo porque estuve mirando eso intentando recompilar una vieja librería que no iba porque cambió esa estructura y no se por qué.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

si no lo resuelves en los proximos dias te dare una mano... ando un poco ocupado estos dias... estamos a punto de entregar nuestro primer trabajo en nuestra propia empresa, y estoy liado un poco... pero ya renuncie a mi actual trabajo asi que en 15 dias estare con algo de tiempo...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

grisendo

Subo el primer juego de Bennu que utiliza la librería OpenCV (versión pre-pre-pre-pre-alfa). Por cierto, se admiten nombres
para la librería (BeOpenCV no me termina de convencer).

El juego en sí es una chorrada, plantas el careto delante de la webcam, ni muy cerca ni muy lejos, y manejas un escudo con
el movimiento de la cabeza (movimientos leves, no bruscos, porque no tengo cogidas las resoluciones, si no el escudo desaparece
de la pantalla). El objetivo es coger monedas, cuantas más monedas más puntos. Si tocas una poción morada, se termina el juego.

Sí, lo se, premio al juego menos imaginativo del año xD

La resolución de la cámara ha de ser 320x200 (no sé por qué a mí no me deja cambiarla)

El link el de siempre:
http://www.grisendo.com/subidas/opencv.rar

l1nk3rn3l

si esta libreria es excelente la habia visto en irrlicht ,

pero hacerla directamente para 2D en bennu es mucho mejor osease multiproposito ...

publica los fuentes que los subire con el bennupack


Gracias..   :o

SplinterGU

no la he probado aun, pero maldito desgraciado... suena fantastico...

saludos.

obviamente estas aumentando tu karma... felicitaciones
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

l1nk3rn3l

tengo sugerencia:
- no me funciona como deberia .. debe ser por el color a buscar..

- puedes poner una funcion adicional que encuentre la coordenada de un color en particular
asi podriamos usar circulos de colores en la camara para mover diferentes cosas..

http://www.youtube.com/watch?v=6jKCFBVLFxE&feature=related