2010-07-21 20 views
5

Quiero desarrollar una aplicación en la que el usuario ingrese una imagen (de una persona), un sistema debería ser capaz de identificar la cara de una imagen de una persona. El sistema también funciona si hay más de una persona en una imagen.Lógica de Reconocimiento de caras

Necesito una lógica, no tengo idea de cómo se puede trabajar en los datos de píxeles de la imagen de manera que identifique los rostros de las personas.

+2

Esta pregunta está en un nivel demasiado alto para Stack Overflow. Si tuviera algún código que supuestamente detectara ojos (por ejemplo) que no funcionaba, entonces sería (potencialmente) responsable. Para empezar, necesitas leer algunas técnicas de reconocimiento facial y luego intentar implementar una. – ChrisF

+0

@Petar: lo siento, estaba siendo sarcástico. Borré el comentario de todos modos. Solo estaba tratando de aclarar que este es probablemente uno de los problemas más difíciles en la informática, no es algo que se pueda solucionar en un par de días después de que alguien en SO le haya dicho el algoritmo :) – fearofawhackplanet

+0

@fear No hay problema :) –

Respuesta

15

Eigenface podría ser un buen algoritmo para empezar si está buscando construir un sistema con fines educativos, ya que es relativamente simple y sirve como punto de partida para muchos otros algoritmos en el campo. Básicamente lo que haces es tomar una serie de imágenes faciales (datos de entrenamiento), cambiarlas a escala de grises si son RGB, redimensionarlas para que cada imagen tenga las mismas dimensiones, convertirlas en vectores apilando las columnas de las imágenes (que ahora son matrices 2D) uno encima del otro, calcule la media de cada valor de píxel en todas las imágenes y reste ese valor de cada entrada en la matriz para que los vectores componentes no sean afines. Una vez hecho esto, se calcula la matriz de covarianza del resultado, se resuelven sus valores propios y vectores propios y se encuentran los componentes principales. Estos componentes servirán como base para un espacio vectorial, y juntos describen las formas más significativas en que las imágenes faciales difieren entre sí.

Una vez que haya hecho eso, puede calcular una puntuación de similitud para una nueva imagen de cara convirtiéndola en un vector de cara, proyectándose en el nuevo espacio vectorial y calculando la distancia lineal entre él y otros vectores de cara proyectados.

Si decide seguir esta ruta, tenga cuidado de elegir imágenes de caras que se tomaron en un rango apropiado de condiciones de iluminación y ángulos de posición. Esos dos factores juegan un papel muy importante en lo bien que funcionará su sistema cuando se le presenten caras nuevas. Si la galería de entrenamiento no tiene en cuenta las propiedades de una imagen de sonda, obtendrás resultados sin sentido. (Una vez entrené un sistema eigenface en fotografías aleatorias caídas de Internet, y me dio a Bill Clinton como el mejor partido para una foto de Elizabeth II, a pesar de que había otra imagen de la Reina en la galería. Ambos tenían blanco pelo, miraban en la misma dirección, y se fotografiaron en condiciones de iluminación similares, y eso fue lo suficientemente bueno para la computadora.)

Si quiere sacar caras de varias personas en la misma imagen, va a necesita un sistema completo para detectar rostros, extraerlos en archivos separados y preprocesarlos para que sean comparables con otras caras extraídas de otras imágenes. Esos son todos grandes temas por derecho propio. He visto un buen trabajo realizado por personas que utilizan el color de la piel y los métodos basados ​​en texturas para recortar los componentes de la imagen que no son rostros, pero estos también están muy sujetos a las variaciones en los datos de entrenamiento. La fundición de color es particularmente difícil de controlar, y es por eso que la conversión de escala de grises y/o las representaciones de imágenes wavelet son populares.

El aprendizaje automático es la piedra angular de muchos procesos importantes en un sistema FR, por lo que no puedo enfatizar la importancia de una buena información de entrenamiento. Hay un montón de algoritmos de aprendizaje, pero el más importante en mi opinión es el ingenuo clasificador de Bayes; los otros métodos convergen en Bayes a medida que aumenta el tamaño del conjunto de datos de capacitación, por lo que solo necesita ser elegante si planea trabajar con conjuntos de datos más pequeños. Solo recuerde que la calidad de sus datos de capacitación creará o romperá el sistema como un todo, y mientras sea sólido, puede elegir los árboles que desee del bosque de algoritmos que se han escrito para respaldar a la empresa.

EDITAR: Un buen control de cordura para los datos de entrenamiento es calcular las caras promedio para las imágenes de la sonda y la galería.(Esto es exactamente lo que parece: después de controlar el tamaño de la imagen, tome la suma de los canales RGB para cada imagen y divida cada píxel entre el número de imágenes). Cuanto mejor sea su preprocesamiento, más humano se verán las caras promedio. Si las dos caras promedio se ven como personas diferentes (diferente género, origen étnico, color de cabello, lo que sea), esa es una señal de advertencia de que sus datos de capacitación pueden no ser apropiados para lo que usted tiene en mente.

+0

Por curiosidad, ¿qué haces para ganarte la vida? –

0

Hay muchos muchos alghorithms diferentes por ahí. Básicamente lo que estás buscando es "visión por computadora". Hicimos un proyecto en la universidad basado en reconocimiento facial y detección. Lo que debes hacer es googlear extensivamente e intentar entender todo esto. Hay un poco de matemáticas involucradas así que prepárate. Primero vaya al wikipedia. Entonces querrá buscar publicaciones en pdf de algoritmos específicos.

Puede ir por un camino difícil: escriba una implementación de todos los alghorithms usted mismo. O de manera fácil: utilice una biblioteca de visión por computadora como OpenCV o OpenVIDIA.

Y en realidad no es tan difícil hacer algo que funcione. Entonces sé valiente Mucho más difícil es crear un software que funcione en condiciones diferentes y en constante variación. Y ahí es donde Google no te ayudará. Pero supongo que no quieres ir tan profundo.