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.

FreeYourMind

grisendo, mis mensajes privados estan fucnionando ??  :-\

Windgate

@l1nk3rn3l: Esa sería una de las grandes cosas que se pueden hacer con este módulo, mover un volante moviendo sólamente las manos delante de la cam y cosas así xD
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

Quote from: FreeYourMind on November 24, 2009, 07:21:29 PM
grisendo, mis mensajes privados estan fucnionando ??  :-\

Sí. Si mi memoria no me falla te envié un ejemplo, ¿No te ha llegado? Luego intento re-enviártelo, que ando un poco liado últimamente...

Quote from: l1nk3rn3l on November 24, 2009, 05:28:44 PM
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

El ejemplo no busca color, va con formas. Pero se pueden hacer cosillas con color también, de hecho
tengo más manejo con el color que con la detección de patrones... Me pondré a ello cuando pueda.

Ahora en el juego, el principal problema es que cada vez que llamo a la función, busco la
cara, en toda la imagen sin tener en cuenta información del fotograma anterior, y esto no es muy eficiente.
Estoy intentando que se haga detección la primera vez y seguimiento en el resto (que será mucho más
rápido y no bailará). Lo tengo ya hecho, pero me da un error que no hay forma de arreglar (y ahora no tengo
mucho tiempo, me voy mañana de viaje) en cuanto vuelva me pongo a saco.

Quote from: Drumpi on November 22, 2009, 05:52:42 PM
¿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

Te mandé ya la bibliografía? Ten en cuenta que yo de sonido no he tocado casi nada, yo todo lo que sé es de imágenes...


Os enviaría el código ya para lo del pack, pero lo veo tan verde que es posible que haya que reestructurar muchas cosas...
No es plan de que la gente empiece a usar una librería experimental que luego cambie radicalmente la forma de trabajar con
ella y no sea compatible ni de lejos.

Mientras estoy fuera, podéis sugerir cosas (como la del color) y funciones que os gustaría que apareciesen.
Por ejemplo, para lo del color podría ser algo así:

objetos=funcionQueDevuelveObjetosDeColor(color, margen); // RGB, HSV; YCbCr... el espacio de color que sea

for(i=0;i<size(objetos);i++){
   objeto=getObjeto(objetos,i);
   x=getX(objeto);
   y=getY(objeto);
   width=getWidth(objeto);
   angle=getAngulo(objeto);
   ....
}


FreeYourMind

No llego!
De mi parte puedes poner las cosas por aqui.
Nosotros somos como hermanos y nos gustan las cosas grátis, y compartir entre nosotros (algunas cosas claro :)).
No tenemos pena de los pobres avergonzados que necesiten venir a curiosear y llevarse algo  ;D

Ahora si prefieres que sea privado, mi palabra es la de total confidencialidad  :P

Windgate

QuoteAhora en el juego, el principal problema es que cada vez que llamo a la función, busco la
cara, en toda la imagen sin tener en cuenta información del fotograma anterior, y esto no es muy eficiente.

¿Eso es un tracking, no?

Se me ocurre que la próxima vez puedes buscar sólamente en un entorno de la última detección, y si no lo encuentras ponerte ya a buscar en toda la imagen... Supongo que por ahí van los tiros :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

Sí, es tracking :D

Sobre la bibliografía: vale, pongo la lista de bibliografía que usé para mi proyecto fin de carrera, porque
no me da tiempo a hacer una selección. Recomiendo para empezar leer [NTa06] (ojo, son transparencias de una asignatura,
es posible que no os enteréis de una mierda... xD), [Pit00], [GWo02]/[GWo04].

Bibliografía

       Bibliografía general de programación:

   [BKa08]     Learning OpenCV: computer vision with the OpenCV library. 2008
               G. Bradski, A. Kaehler

   [Gil03]     Introducción rápida a Matlab y Simulink para ciencia e ingeniería. 2003
               M. Gil (Editorial Díaz de Santos)

   [Joy06]     Programación en C++, algoritmos, estructura de datos y objetos. 2006
               L. Joyanes (Editorial McGraw-Hill)

   [Moo07]     Matlab para ingenieros. 2007
               H. Moore (Editorial Pearson)

   [Pal03]     Introduction Matlab 7 for engineers. 2003
               W. J. Palm (Editorial McGraw-Hill)

   [Per02]     Matlab y aplicaciones en ciencias y la ingeniería. 2002
               C. Perez (Editorial Prentice Hall)

   [RKe78]     El lenguaje de programación C. 1978
               D. M. Ritchie, B. Kernigan

   [XVa06]     Programación en C++ para ingenieros
               F. Xhafa, P. Vázquez, J. Marco, X. Molinero, A. Martín (Editorial Paraninfo)

       Bibliografía general de inteligencia artificial:

   [And07]     Computational Intelligence. 2007
               D. Andina (Editorial Springer)

   [Fau94]     Fundamentals of neural networks. 1994
               L. Fausett (Editorial Prentice Hall)

   [Gur97]     An introduction to neural networks. 1997
               K. Gurney (Editorial UCL Press)

   [Hay99]     Neural networks. 1999
               S. Haykin (Editorial Prentice Hall)

   [Kun93]     Digital neural networks. 1993
               S. Y. Kung (Editorial Prentice Hall)

   [Lau91]     Neural networks, theoretical foundations and analysis. 1991
               C. Lau

    Bibliografía general de procesamiento de imágenes:

[GMc00]     Dynamic vision: From images to face recognition. 2000
            S. Gong, S. J. McKenna, A. Psarrou (Editorial Imperial College Press)

[GWo02]     Digital image processing. 2002
            R. C. Gonzalez, R. E. Woods

[GWo04]     Digital image processing using Matlab. 2004
            R. C. Gonzalez, R. E. Woods, S. Eddins

[HLo01]     Face detection: A survey. 2001
            E. Hjelmas, B. K. Low

[NTa06]     Visión por computador. 2006
            http://webdiis.unizar.es/~neira/vision.html
            J. Neira, J. D. Tardós

[Pit00]     Digital image processing algorithms and applications. 2000
            I. Pitas

[SAn04]     Digital signal and image processing
            A. N. Skodras, V. Anastassopoulos (Editorial Hellenic Open University Press)

    Bibliografía citada en la memoria y anexos:

[BVe99]    A morphable model for the syntesis of 3D faces.
            International Conference on Computer Graphics and Interactive Techniques
            Proceedings of the 26th annual conference on Computer graphics and
            interactive techniques, pages: 187 – 194 (1999)
            V. Blanz, T. Vetter

[Cas02]     On real-time face detection in video streams. An opportunistic approach. 2002
            M. F. Castrillón

[Cro84]     Summed-area tables for texture mapping. 1984
            International Conference on Computer Graphics and Interactive Techniques
            Proceedings of the 11th annual conference on Computer graphics and
            Interactive techniques, pages: 207 – 212 (1984)
            F. Crow

[DNi95]     Evaluating the performance of active contour models for real-time
            object tracking. 1995
            J. Denzler, H. Niemann

[FSc95]    A decision-theoretic generalization of online learning and an application to
            boosting. Lecture Notes In Computer Science; Vol. 904.
            Proceedings of the Second European Conference on Computational Learning
            Theory, pages: 23 - 37 (1995)
            Y. Freund, R. E. Schapire

[FSc99]     A short introduction to boosting. Introduction to Adaboost.
            Journal of Japanese Society for Artificial Intelligence,
            14(5):771-780, September, 1999.
         Y. Freund, R. E. Schapire

[GNi96] Snake head boundary extraction using global and local energy
          Minimization. 13th International Conference on Pattern Recognition
         (ICPR) Volume 2, pp.581 (1996)
         S. R. Gunn, M. S. Nixon

[Kap97]  Face Detection in Color Images.
         University of Washington, Department of Electrical Engineering, pp. 1-7 (1997)
         J. P. Kapur

[KPe03]  Human Skin Colour Clustering for Face Detection.
         EUROCON 2003. Computer as a Tool. The IEEE Region 8 Volume 2,
         pages: 144- 148 (2003)
         J. Kovac, P. Peer, F. Solina

[KWi88] Active countour models.
         International Journal of Computer Vision Volume: 1
         Issue: 4, pages: 321-331 (1988)
         M. Kass, A. Witkin, D. Terzopoulos

[LAl07]  Detección de caras y localización de características faciales para
         Reconocimiento Biométrico. 2007
         I. Landesa, J. L. Alba

[LMo04] Finding optimal views for 3D face shape modeling.
         International Conference on Automatic Face and Gesture Recognition (2004)
         J. Lee, B. Moghaddam, H. Pfister, R. Machiraju

[MPi43] A logical calculus of the ideas immanent in nervous activity.
         Neurocomputing: foundations of research, pages: 15 – 27 (1943)
         W. S. McCulloch, W. H. Pitts

[Pap98] A general framework for object detection.
         Sixth International Conference on Computer Vision, pages: 555-562 (1998)
         C. Papageorgiou, M. Oren, T. Poggio

[Per03] Automatical detection of face features and exact face contour.
         Pattern Recognition Letters Volume 24, pages: 2977 – 2985 (2003)
         V. Perlibakas

[PVi03] Aplicación de los diferentes espacios de color para detección y seguimiento
         de caras. 2003
         C. Pérez, M. A. Vicente, C. Fernández, O. Reinoso, A. Gil

[RBa96]  Neural network-based face detection.
         IEEE Transactions On Pattern Analysis and Machine intelligence (1996)
         H. A. Rowley, S. Baluja, T. Kanade

[RMa95] Facial features segmentation by model-based snakes.
         International Conference on Computing Analysis and Image Processing (1995)
         P. Radeva, E. Martí

[Rom05]  Face image analysis using a multiple features fitting strategy.
         PhD Thesis, University of Basel, Faculty of Science (2005)
         S. Romdhani

[RTa05]  Un nuevo método para la detección de caras basado en integrals difusas.
         XII Simposium Nacional de la Unión Científica Internacional de Radio (2005)
         A. Rama, F. Tarrés

[SBa04] Face recognition in subspaces.
         S.Z. Li, A.K. Jain (Eds.), Handbook of Face Recognition (2004)
         G. Shakhnarovich, B. Moghaddam

[SKa00]  A statistical method for 3D object detection applied to faces and cars.
         IEEE Conference on Computer Vision and Pattern Recognition. Volume: 1
         Pages: 745-751 (2000)
         H. Schneiderman, T. Kanade

[Smi78]  Color gamut transform pairs.
         International Conference on Computer Graphics and Interactive Techniques
         Proceedings of the 5th annual conference on Computer graphics and
         interactive techniques, pages: 12-19 (1978)
         A. R. Smith

[SPi98]  A novel method for automatic face segmentation, facial features extraction
         and tracking.
         Signal processing. Image communicationol. 12, no3, pages: 263-281 (1998)
         K. Sobbotka, I. Pitas

[SRa02]  Human face detection in cluttered color images using skin color and
         edge information. 2002
         K. Sandeep, A. N. Rajagopalan

[SSh04]  An edge-based face detection algorithm robust against illumination, focus and
         scale variations.
         EUSIPCO. Conference No12, Vienna , AUTRICHE (2004)
         Y. Suzuki, T. Shibata

[Tor04]  Is there any hope for face recognition?
         Proc. of the 5th International Workshop on Image Analysis for Multimedia
         Interactive Services, WIAMIS, Lisboa, Portugal (2004)
         L. Torres

[TVi01]  Automatic face recognition for video indexing applications. 2001
         L. Torres, J. Vilà

[Uca07]  Face and eye detection in Matlab. 2007
         http://www.mathworks.co.uk/matlabcentral/fileexchange/13716
         M. Ucak

[VBe02]  Face detection for video summaries.
         Lecture Notes in Computer Science, volume 2383 (2002)
         J. E. Viallet, O. Bernier

[VJo01]  Rapid object detection using a boosted cascade of simple features. 2001
         IEEE Computer Society Conference on Computer Vision and
         Pattern Recognition. Volume: 1, pages: 511-518 (2001)
         P. Viola, M. Jones

[VJo03]  Robust real-time face detection.
         International Journal of Computer Vision, volume 57 , Issue 2 (2003)
         P. Viola, M. Jones

[YCi98] Enhancing human face detection using motion and active contours.
         Third Asian Conf. Computer Vision (1998)
         K. C. Yow, R. Cipolla

[Zar99]  Comparison of five color model skin pixel classification.
         ICCV'99 Int'l Workshop on recognition, analysis and tracking
         of faces and gestures in Real-Time systems, pages: 58–63 (1999)
         B. D. Zarit , B. J. Super, F. H. K. Quek

[ZCh02]  Face recognition: A literature survey. 2002
         W. Zhao, R. Chellappa, A.Rosenfeld, P. J. Phillips

FreeYourMind

Me has dejado tonto, con esto:

Face and eye detection in Matlab.

Con el Matlab se puede hacer esto!!!

Yo lo tuve en la carrera, y no hacia nada más que simulaciones con gráficos, o este ha evolucionado mucho o nunca descubrimos sus virtudes  :P

grisendo

Jajaja, sí, con Matlab se pueden hacer muchas cosas, en las carreras rara vez te enseñan sus virtudes...

Mi proyecto de hecho era en Matlab, se basaba en detección y ocultación de la cara en vídeos con
algoritmos de color (parte de Matlab) y con redes neuronales (integrando OpenCV en Matlab). Como
Matlab era lento de cojones también tuve que hacer DLL's en C con las funciones que más utilizaba.

Matlab para investigar está muy bien, tiene miles de funciones predefinidas, pero si quieres
velocidad de ejecución te toca tirar de C o C++... por eso triunfa más OpenCV aunque yo personalmente
lo veo miles de veces más complejo de usar :D

Drumpi

Muchas gracias por la documentación, no me había llegado.
Si que has leido libros ¿el PFC es de una ingeniería técnica o superior? porque viendo eso, los proyectos que nos proponían eran juegos de niños en comparación :D
Según he estado leyendo, el reconocimiento de formas en imágenes hace uso de la FFT, por lo que pensé que la búsqueda de patrones en imágenes y sonidos era similar, salvo que una en 2D y la otra en 1D.
Seguramente lo mio sea mucho más sencillo, pero gracias de todas formas.

Respecto a qué hacer si la cámara reconociese formas, colores y movimientos, el campo es infinito, mucho más que si buscásemos métodos para usar el teclado. Esa era la pregunta que tenía inicialmente, porque si la librería sólo reconocía la cara se pueden hacer unas cosas, si encima reconoce movimientos del cuerpo...
Un ejemplo muy claro es lo que quise demostrar con FrikiMusic: una consola normal, cogida de otras formas, simulando instrumentos. No hablo de usar la cámara para ponerle nuestro careto al prota, o para reconocer que hacemos ejercicio correctamente, hay muchos usos.

De todas maneras, se puede simplificar mucho el trabajo de la siguiente forma:
-Cortamos dos círculos de cartulina de dos colores.
-Los sujetamos a las manos con esparadrapo, una cinta o lo que sea.
-Al principio del juego los situamos dentro de unas marcas.
-Y ya la librería nos devuelve las posiciones en cada frame. Y si mide el tamaño, la distancia.
Sólo con eso ya habría control "manual" para todos los juegos, y supongo que un algoritmo mucho más sencillo.
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

No te creas que me leí todo eso... la mitad de las cosas miré algo, de algunas ni me las miré y las puse
de relleno... jeje. Era ingeniería superior.

Lo de la FFT... pues sí, realmente los sonidos son vectores (una dimensión por canal) y las imágenes
son matrices (dos dimensiones por canal), se aplican cosas parecidas, entre ello la transformada de Fourier,
o, se me ocurre también, los histogramas. Pero la FFT no es el único método para las imágenes, también
hay muchos que no trabajan en el dominio de la frecuencia (al igual que me imagino que habrá más formas
de procesar los sonidos).

En OpenCV hay estructuras de matrices y de arrays, supongo que también las funciones para procesar
imágenes (matrices) se pueden utilizar también para procesar sonidos (vectores), como FFT, filtros de
paso alto/bajo, convolución, histogramas, etc...

Pero yo no tengo ni idea de sonido, y eso que aporreo el piano y la guitarra, aunque me gustaría aprender
las cosas básicas de procesado de la señal sonora, por eso también si pudieses poner alguna bibliografía
básica te lo agradecería.

Drumpi

De momento los conocimientos que tengo se basan en lo que he estudiado en clase, y lo que he ido encontrando en wikipedia y unos cuantos enlaces.

La idea que tengo es que, por ejemplo, un silbido tiene una única componente sinusoidal, y en el dominio de la frecuencia se representa como una delta en dicha frecuencia, con una amplitud proporcional al volumen, un violín tiene por ejemplo tres deltas para un sonido. Por tanto, quiero buscar la forma en el dominio de la frecuencia del sonido de una persona, y analizar su traslación (variación de frecuencia) y su variación de amplitud (volumen) así como ver cómo se añaden o quitan armónicos para articular los diversos sonidos.
Con esas variaciones registradas, sólo necesitaría conocer la "huella vocal" de la persona para saber lo que dice, sin necesidad de un muestreo previo.
Pero me temo que tendré que buscar algo más sencillo.
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)

blostec

Quote from: FreeYourMind on November 24, 2009, 10:50:03 PM
Me has dejado tonto, con esto:

Face and eye detection in Matlab.

Con el Matlab se puede hacer esto!!!

Yo lo tuve en la carrera, y no hacia nada más que simulaciones con gráficos, o este ha evolucionado mucho o nunca descubrimos sus virtudes  :P

Yo tenia una asignatura en la que usábamos el Matlab para manipular gráficos y sonidos. Es un programa muy potente, incluso posee la herramienta GUIDE para crear programas con interfícies de usuario al mas puro estilo Visual Basic.

josebita

Grisendo, tío. Como compartir es vivir, te acabo de mangar la imagen que has puesto del reconocimiento de tu cara para añadir una reseña al tanto de la librería para bennugd.org
Espero que no tengas inconveniente. Si tienes algún problema, avisa y busco otra.

Y ánimo con el proyecto, que tiene buena pinta. Por cierto, esta librería también añade soporte para webcams en Bennu, ¿no?.

Windgate

Esta librería añade TODO lo relacionado con Webcam, grisendo es groso, he estudiado con él y lo sé a ciencia cierta.

Cuidado Grisen, vas a tenerle que ponerle licencia a tu cara tío ;D
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

Drumpi

Por cierto, se me olvidó comentarlo.
Es verdad, Matlab es la herramienta PARA TODO. Nosotros, en clase lo hemos usado para el cálculo matemático de matrices y resolver algun límite o derivada a modo de ejemplo.
Pero luego hemos montado filtros (paso bajo, paso alto...), hemos controlado el movimiento de un motor (con una dll) y hemos creado hasta controladores PID.
Me han llegado a contar que se ha usado para controlar el posicionamiento de un satélite... y creo haberlo estudiado como "lenguaje de programación orientado al cálculo matemático".

El día que Google domine el mundo, Matlab será su peor enemigo :D :D :D
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)