¿Cómo utiliza Python opencv archivos csv para entrenar el código del modelo de reconocimiento facial?
1.1. Introducción
A partir de OpenCV2.4, se ha agregado una nueva clase FaceRecognizer, que podemos utilizar para realizar experimentos de reconocimiento facial de manera conveniente. Este artículo no solo presenta el uso del código, sino que también presenta los principios del algoritmo. (El código fuente que escribió se puede encontrar en opencv\modules\contrib\doc\facerec\src de OpenCV. Por supuesto, también se puede encontrar en su github. Si desea estudiar el código fuente, naturalmente puede tomar un mira, no es complicado.
Los algoritmos actualmente admitidos son
Eigenfaces eigenface createEigenFaceRecognizer()
Fisherfaces createFisherFaceRecognizer()
LocalBinary. Patrones Histogramas Histograma binario local createLBPHFaceRecognizer()
Los códigos de todos los ejemplos siguientes se pueden encontrar en samples/cpp en el directorio de instalación de OpenCV. Todos los códigos son gratuitos para uso comercial o aprendizaje.
1.2. Reconocimiento facial
Para los humanos, el reconocimiento facial es fácil. La literatura [Tu06] nos dice que los bebés de tan solo tres días de edad ya pueden distinguir caras familiares a su alrededor. ¿Qué tan difícil es para una computadora? De hecho, hasta ahora sabemos muy poco acerca de por qué los propios humanos pueden distinguir entre diferentes personas. ¿Son las características internas de la cara (ojos, nariz, boca) o las características externas (forma de la cabeza, línea del cabello) más efectivas para el reconocimiento humano? ¿Cómo analizamos una imagen y cómo la codifica el cerebro? David Hubel y Torsten Wiesel nos muestran que nuestros cerebros tienen células nerviosas especializadas que responden a características locales de diferentes escenas, como líneas, bordes, esquinas o movimiento. Es evidente que no vemos el mundo como trozos fragmentados; nuestra corteza visual debe transformar de algún modo fuentes dispares de información en patrones útiles. El reconocimiento facial automático consiste en extraer características significativas de una imagen, ponerlas en una representación útil y luego realizar alguna clasificación sobre ellas. El reconocimiento facial basado en características geométricas de los rostros es probablemente el método más intuitivo para reconocer rostros. El primer sistema automático de reconocimiento facial también se describe en [Kanade73]: Los puntos de marcado (posiciones de ojos, oídos, nariz, etc.) se utilizan para construir un vector de características (distancia entre puntos, ángulo, etc.). El reconocimiento se realiza calculando la distancia euclidiana de los vectores característicos de las imágenes de prueba y entrenamiento. Estos métodos son resistentes a los cambios de iluminación, pero también tienen un gran inconveniente: la determinación de los puntos marcadores es compleja, incluso utilizando algoritmos de última generación. En [Bru92] se describen algunos trabajos recientes sobre el reconocimiento facial de características geométricas. En una base de datos grande se utiliza un vector de características de 22 dimensiones, y las características geométricas por sí solas no pueden proporcionar suficiente información para el reconocimiento facial.
El método de cara propia se describe en la literatura [TP91]. Describe un método integral para reconocer caras: la imagen facial es un punto, y este punto se encuentra en el espacio de la imagen de alta dimensión para encontrarlo. en el espacio de imágenes de baja dimensión La representación del espacio hace que la clasificación sea muy simple. La dimensión baja del subespacio de baja dimensión se encuentra mediante el Análisis de Componentes Principales (PCA), que puede encontrar el eje con la mayor varianza. Aunque dicha conversión se considera desde la perspectiva de la reconstrucción óptima, no tiene en cuenta la cuestión de la etiqueta. [gm: comprender este párrafo requiere algunos conocimientos de aprendizaje automático]. Imagine una situación si el cambio se basa en una fuente externa, como la iluminación. La varianza máxima del eje no contiene necesariamente ninguna información discriminativa, por lo que la clasificación no es posible en este punto.
Por lo tanto, se propuso un método de proyección específico de clase que utiliza Análisis Discriminante Lineal (LDA) para resolver el problema de reconocimiento facial [BHK97]. Una de las ideas básicas es minimizar la variación dentro de la clase y maximizar la variación fuera de la clase.
En los últimos años, han surgido varios métodos de extracción de características locales. Para evitar los datos de alta dimensión de la imagen de entrada, se ha propuesto un método para describir la imagen utilizando solo características locales. Las características extraídas son (con suerte) más robustas a la oclusión local, cambios de iluminación, muestras pequeñas, etc. Los métodos relacionados con la extracción de características locales incluyen Gabor Waelets ([Wiskott97]), Transformada DiscretaCosinus (DCT) ([Messer06]), Patrones Binarios Locales (LBP) ([AHP04]). Qué método utilizar para extraer características locales del espacio en el dominio del tiempo sigue siendo una cuestión de investigación abierta, porque la información espacial es información potencialmente útil.
1.3. Base de datos de rostros
Primero obtengamos algunos datos para realizar experimentos. No quiero dar un ejemplo ingenuo aquí. Estamos estudiando el reconocimiento facial, ¡así que necesitamos una imagen facial real! Puede crear su propio conjunto de datos o descargar uno desde aquí (http://face-rec.org/databases/).
AT&TFacedatabase, también conocida como base de datos de rostros ORL, tiene 40 personas y 10 fotos para cada persona. Las fotografías fueron recopiladas en diferentes momentos, con diferente iluminación, con diferentes expresiones (ojos abiertos y cerrados, sonriendo o sin sonreír) y con diferentes detalles faciales (con o sin gafas). Todas las imágenes fueron tomadas sobre un fondo oscuro uniforme, con los rostros erguidos (algunos ligeramente girados).