Sunday, April 01, 2007

Programa de reconocimiento facial

En este quarter que acaba de terminar, he tomado una clase sobre sistemas de visión. Básicamente, un poco de fisiología y funcionamiento del ojo, bastante de teoría del color, un poco de JPEG, algo de sensores, algo más de pantallas, y, de pasada, algo de impresión.

En las últimas dos semanas de la clase, había que hacer un proyecto, y como no me convencían los que ofertaban, propuse hacer uno propio. Concretamente un sistema de reconocimiento de caras en fotos.

En principio, el programa solo reconoce que algo es una cara, es decir, no reconoce a personas concretas, pero es un inicio. El software en sí, es ampliamente mejorable, si bien estoy bastante satisfecho (salvo por la velocidad). El report, se hacía en forma de web, y la verdad es que lo hice los últimos dos dias deprisa y corriendo, con lo que no esta demasiado bien.

Aun así, las fotos del report molan bastante, así que os dejo aquí el link, y el que este interesado, le echa una ojeada. En el report, esta todo el codigo fuente, para el que quiera perder el tiempo mejorandolo, y ademas, en la parte de mejoras señalo cuales son los siguientes pasos a dar.

Aquí una foto resultado del programa con 100% de éxito.


shuttle2_faces

17 comments:

Mat said...

Está chulo. Así a bote pronto, si te aburres y quieres mejorar su velocidad podrías utilizar una versión de la imagen reducida para la búsqueda del tamaño de las caras.
O algo parecido usando una descomposición piramidal (no sé si te merecería la pena).
Tb te puedes ayudar de algoritmos de detección de contornos o de elipses para mejorar su fiabilidad (y de paso empeorar la velocidad, jeje)

Bueno, pues ahí te dejo un par de ideas. Hace 3 años que no toco nada de estos temas, así que lo tengo un poco oxidado, pero el procesado de imágenes es un tema que siempre me ha atraído mucho.

Por otro lado, el link de la función 'give_sizes.m' está mal, le sobra el '<'.

Salu2!

Himnem said...

mmm...muy interesante! en www.myheritage.com puedes poner una foto tuya y te dice a que famoso te pareces...aunque no te puedes fiar mucho xD

Vanesa said...

eyyy he descubierto tu blog gracias al de kiray jajaja y me has dejado flipada con lo que estas estudiando, tiene que ser flipante todo lo que estas haciendo.

bueno un saludillo Vane :D

julio said...

Es interesante lo que se puede hacer con matlab... y con una mente suspicaz claro está.
Una pregunta Pablo ¿El procesado digital de señales es un campo con futuro?

Felipe said...

Oye, no me mola nada que tu algoritmo no me reconozca en ninguna de tus fotos!! O es que llevo gafas, o es que no me había lavado bien la cara... excusas. Prueba a ponerle un template mío, o a quitarle la linea: if (esfelipe==true) then mecagoenel
Será el MatLab que se quiere vengar de mi (lo tengo hasta la p...toolbox de invertir matrices).

Ahora en serio, está muy chulo. Me llama la atención los problemas que presenta cuando hay brazos,... y trozos del mismo color. (has probado con la foto de Elsa Pataky del interviu?) Creo que tendría el máximo interés científico! al estar desnuda, podría reconocer hasta 3 caras.... La idea de Mat es interesante. Se podrían aplicar algoritmos de detección de bordes a los templates y a las fotos y hacer también la correlación entre bordes.

Un abrazo, Felipe.

Anotnio said...

Joder, parece que en Stanford se curra en serio. ¡Y pensar que en la ETSIT lo más complicado en tratamiento de señal que llegué a programar fue el decodificador de audio del Canal Plus para un DSP (seguro que tú también lo hiciste :D )!

O sea, que realmente sí se curra por allí... estoy planteándome no pedir la beca esa de la Caixa :P

RuBeN said...

Muy bueno esto que has hecho, y yo comiendome la cabeza con practicas super cutres...

rober said...

¡¡ Impresionante haber obtenido ese resultado en tan poco tiempo !!

Se me ocurre una mejora sencilla para eliminar los falsos positivos una vez encontrados: volver a procesarlos, pero sólo el recuadro encontrado, quizá cambiando algo en el algoritmo o puede que con otra técnica más simple (como simplemente la desviación media).

Claro, que volvería a aparecer el problema de eliminar las caras correctamente encontradas; tendría que ser algo muy fiable o "bajar" mucho el listón para no deshechar ocurrencias correctas; al menos se eliminarían parte de los falsos positivos. Pero debería funcionar: la silla de indian tribe no se parece en nada a una cara.

ellos83@hotmail.com said...

Jooo, estoy intentando hacer un programa de detección de elipses en imagenes, y me tope con tu web, con tu programa de detección de caras, pero hete aqui que el link no esta activo...

Podrias decirme donde puedo encontrar info y algoritmos?

Gracias y un saludo

clarita said...

ola!!estudio elctronica y automatica.Tengo una pract de vision artificial,donde debo detectar cuadrados decierto rango conuna elipse dentro y cuadrados solapados.En serio...ayuda con matlab.Situvieras un ratillo y puedieras echarme una mano.gracias!!Xciertotutrabajoesestupendo!!!enhorabuena

Anonymous said...

no puedo entrar en givesize.m
si puedes pasamelo a alexperez65@hotmail.com.;) gracias y a ver si lo pruebo :D

diane said...

hi, i cannot download the file give_sizes.m. If you have it can you please send it to my email please? diane_simlean@yahoo.com

Really hope you have it. I want to see how it works. Thanks so much. =)

Anonymous said...

hola, antes ke nada felicidades por tu trabajo, pero no pude abrir el archivo give_sizes.m, me lo podrian mandar a seudorama@gmail.com
por favor, se lo agradeceria muchisimo...por cierto esto esta hecho con redes neuronales?

MSME said...

Hola amigo
Soy de Ecuador y quisiera que por favor me ayude con el reconocimiento facial, ya que necesito realizar un software para reconcer rostros.
Si es posible, que por favor me ayude con la información acerca de matlab y todo lo referente a este tema. Mi mail es manolom651@hotmail.com, gracias por la respuesta.

Hasta pronto

Swicher said...

La dirección del programa para reconocimiento de rostros que aparece en el articulo ha cambiado, por lo que ahora se lo puede descargar desde aquí.
Anonymous 1, diane y Anonymous 2, el enlace al archivo give_sizes.m esta mal hecho, por lo que en realidad ese archivo se puede abrir desde aquí.
Ellos83, aquí hay un programa de detección de elipses (aunque no lo he probado, por lo que no se que tan bien funcione).
MSME, en este documento hay algo de información sobre como detectar rostros en imágenes tomadas desde una webcam (podrías comenzar revisando eso y si quieres ampliar, entonces busca en Google algunas palabras clave de ese documento) y también puedes probar con este programa que hace lo que tu buscas.
14 de abril de 2010

suitengu1016 said...

Hola, he estado leyendo y me interesa mucho como haces eso en MATLAB, puedes facilitarme el archivo? me gustaria mucho poder mirar. Gracias. Rafael.

Sistemas Operativos said...

Disculpa no pude descargar el reporte con el codigo fuente, por favor me podrias mandar al correo special_world_2002@hotmail.com