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.

l1nk3rn3l

en gameprogramming gems 6

se usa una tecnica de convertir a negativos para extraer las caras humanas
bajalo de aqui gratis:

y trae mas cosas interesantes para los que les encanta la lectura
http://www.taringa.net/posts/ebooks-tutoriales/2056163/Game-Programming-Gems-6.html

blostec

Lo he probado y funciona aunque cuesta mover el puntero, normalmente se queda en un lado. No he sido capaz de coger ni una pócimas o moneda. Uso un portátil Acer con cámara web integrada Crystal Eye bajo Windows 7, por si te sirve de algo. Saludos!

P.D. ¿podrias subir el ejemplo de capturar la cara?  ;D

grisendo

Esperad, no me os estreseis!!

Hay tanto mensaje nuevo que me pierdo!

A ver, lo de la detección facial esta muy mal hecho, ahora estoy de viaje y no miro casi internet,
pero en cuento vuelva intentaré meterle algo de caña. Y... no sé quién ha preguntado lo de usar
la captura de mi cara, pero mi careto tiene copyright. Aún así podría ceder la imágen a cambio
de... digamos  ::) unos cuantos litros de birra.

FreeYourMind

Grisendo, he aprovechado el parón del curro para empezar a mirar tu código.

Por cierto, este PC no tiene webcam y peta por eso, tienes que tener esto en cuenta en tu proxima versión y no usar la WebCam si no existe, para que no pete.

Este fin de semana, publico mi actual juego y ya me pongo en parte con el intento de creación de un modulo para Bennu, como novedad os cuento que va ser nada más y nada menos que un modulo de OPEN GL, o sea, mi intento va ser poder cargar un modelo 3ds (3d studio) y ponerlo en pantalla. Si logro esto, ya conseguiré mucho más, tiempo al tiempo :)
Ya se que hay más personas que estan haciendo esto, pero este va ser mi intento :)

FreeYourMind

Acabo de compilar tu dll sin problemas :) Que ganas tengo de ponerme con mi dll :)
Saludos.

Windgate

Con Bennu 3D ya puede cargarse un modelo 3ds y ponerlo en pantalla, aunque pierdes las funcionalidades 2D al tener que usar el M8E_RENDER a cada FRAME... Splinter dijo que la ventaja de poder usar OpenGL sería de cara al dibujado 2D, el dibujado 3D ya tiene incorporado render con OpenGL, Direct3D y alguno más.
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

FreeYourMind

Si lo se. Es que Bennu 3D es más una adaptación de un motor 3D, mientras que con esto el objetivo es tener todas las funciones OpenGL de forma simplificada integrado en Bennu, y con el ya podrias crear tu proprio engine y no depender de terceros. Vamos, a mi y según me comento Splinter, esto interesa a más de uno, y como parte del trabajo ya lo tengo echo seria cuestion de adaptarlo a un modulo utilizable con Bennu. Por otro lado no deja de ser más que un experimento, ya que quiero crear un modulo para Bennu y algo el modulo tendrá que hacer, menos cozinar claro  ;D

grisendo

A ver, informe!

Ya he subido una versión nueva (donde siempre) que en vez de buscar todo el rato la cara hace tracking.
Si veis que no os hace mucho caso es porque ha pillado otra cosa como cara, podéis pulsar ENTER
para que vuelva a intentar coger vuestra cara (a mí no me ha pasado, pero ahí está por si acaso...).
Le he añadido también un par de funciones para obtener el tamaño de la camara (y poder adaptar
el juego al tamaño de cada webcam).

Lo que decían algunos de que tenga en cuenta errores, ya estaba hecho, por ejemplo en
[code language="bennu"]camara=openCamera(0);[/code]
si no se podía abrir devolvía -1 (no sé si es el valor habitual de Bennu para este tipo de errores)
así que lo de control de ese error habría que ponerlo en el PRG.

Ahora mismo acabo de intentar ponerme a hacer la conversión de imágenes de OpenCV a imágenes de Bennu
pero justo acaba de joderse Windows (y no he conseguido compilar en Linux de 64 bits), no paran de
salirme pantallazos azules!! He mirado un poco por encima y no encuentro por ninguna parte el tipo de dato MAP!!!

Lo que quiero es algo así:

[code language="c"]static int opencv2bennu(INSTANCE *my, int *params){
    IplImage *imagenOpenCV = (IplImage *)malloc(sizeof(IplImage));
    IMAGEN_DE_BENNU imagenBennu = NUEVA_IMAGEN_BENNU(ancho, alto, canales);
    for(fila=0;fila<filas;fila++){
        for(columna=0;columna<columnas;columna++){
            for(canal=0;canal<canales;canal++){
                color = getPixelOpenCV(imagenCV, fila, columna, canal);
                SET_PIXEL_BENNU(imagenBennu, fila, columna, canal, color);
            }
        }
    }
    return((int)imagenBennu);
}[/code]

Para luego usarlo en bennu dentro de un proceso así:

[code language="bennu"]imagen=getFrame(camara);
graph=opencv2bennu(imagen);
[/code]

Pero claro, necesito saber:
Cuál es el tipo de dato que yo he llamado en el ejemplo IMAGEN_DE_BENNU
Cuál es la función que he llamado NUEVA_IMAGEN_BENNU
Cuál es la función que he llamado SET_PIXEL_BENNU
También, cuál sería la equivalente para la conversión inversa (GET_PIXEL_BENNU).

Y con eso y un bizcocho se podría publicar una versión 0.1 :D

FreeYourMind

Grácias de nuevo.
Si puedes seria mejor separar las versiones con numero y fichero distintos.
El que me enviaste a que versión se corresponde ? Lo compile pero no lo probe.
Saludos.

Windgate

Grisendo, eso es algo que tienen que comentarle a los gurús de Bennu, quizás si les mandas un privado a DCelso o Splinter y les pasas el link de tu último comentario te echen un cable, no debería ser demasiado difícil, hay otras funciones que retornan un nuevo map.
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

josebita

Siento no haber contestado antes, pensaba que alguien más contestaría. :)

Quote from: grisendo on December 04, 2009, 04:11:26 PM
[...]
Pero claro, necesito saber:
Cuál es el tipo de dato que yo he llamado en el ejemplo IMAGEN_DE_BENNU
Cuál es la función que he llamado NUEVA_IMAGEN_BENNU
Cuál es la función que he llamado SET_PIXEL_BENNU
También, cuál sería la equivalente para la conversión inversa (GET_PIXEL_BENNU).

Y con eso y un bizcocho se podría publicar una versión 0.1 :D

Tipo de dato: GRAPH * mapa;
NUEVA_IMAGEN_BENNU: GRAPH * mapa = bitmap_new_syslib(ancho, alto, profundidad); y devuelves mapa->code (que es un entero).
GET_PIXEL_BENNU: gr_get_pixel(mapa, x, y);
SET_PIXEL_BENNU: gr_put_pixel(mapa, x, y, color);

Puede que necesites también:
GRAPH * mapa = bitmap_get(int fileid, int mapid);
Donde generalmente fileid será 0; Ésta función te da acceso al mapa a partir del código numérico que lo representa.


Creo que es todo. Espero ansioso esa 0.1 :)

FreeYourMind


Prg

el ejemplo est'a genial. de vez en cuando se movia raro, pero presionando enter se reacomodaba :)
karma++
y felicidades
en humos puedes mover la camara con los cursores. es necesario para los niveles a partir del dos :)

grisendo

bitmap_new_sys lo pilla pero...

soy muy corto! No sé qué tengo que incluir para gr_put_pixel y gr_get_pixel!!!
y he visto que las funciones esas están en g_pixel.c y g_pixel.h pero empieza
a tirar dependencias y duplicados como un cerdo y no consigo arreglarlo :(

josebita

Intenta mirarte el código fuente de los módulos que dan esa funcionalidad directamente a Bennu. Yo lo miré de ahí.
También puedes mirar sus dependencias en los Makefile.am

Y también puedes poner el mensaje de error y te intentamos echar una mano...