Como ya comentamos en la presentación, el programa elegido para realizar esta función es Matlab. Una de las razones por las que finalmente nos decantamos por Matlab en lugar de otros sistemas como OpenCV fue la inmensa cantidad de programas ya hechos sobre el tema, que utilizaremos para realizar nuestro reconocimiento. En concreto, usaremos en un principio este:
http://www.mathworks.com/matlabcentral/fileexchange/17032-pca-based-face-recognition-system/all_files
Este programa es lo suficientemente intuitivo como para realizar una primera aproximación al reconocimiento facial. Si bien hay muchos otros programas mucho mejores y con menores tasas de error, éste no requiere la instalación de ningún toolkit (de pago) y funciona bastante rápido con bases de datos de tamaño razonable, aparte de consistir únicamente en tres métodos que se ejecutan uno después del otro, siendo como decimos muy fácil de utilizar incluso para los que, como nosotros, no estamos muy versados en el uso de Matlab.
¿Cómo funciona el reconocimiento facial?
El sistema está basado en dos procedimientos:
- Análisis de componentes principales (PCA: Principal Components Analysis): Es un método estadístico que consiste en reducir la dimensionalidad de un conjunto de datos viendo los factores (componentes) que más influyen en la variabilidad del conjunto, dándole más importancia que a los menos influyentes. Dado que buscamos reconocer a la persona que se hace la foto este paso es de suma importancia, ya que nos dice qué elementos diferencian una cara de otra.
- "Autocaras" (Eigenfaces): Estas caras características representan el conjunto de características (componentes) de cada rostro. Cada autocara representa una característica de los modelos de caras usados para entrenar, por lo que una cara será la suma de todas las autocaras multiplicadas por unos pesos, lo que nos dice cuánto se parece la cara a cada una de las características. Esta basado en el Algebra Lineal, ya que estas caras pueden considerarse autovectores del espacio de todas las características. El paso final consiste en hallar la distancia euclídea entre cada una de las posibilidades y la cara a comprobar, y elegir la distancia menor.
Realizando pruebas comprobamos que el programa original necesita ser modificado para cambiar varias cosas: Por un lado, no nos interesa la interfaz gráfica, y por otro hemos pensado modificar el proceso de selección y entrenamiento, usando únicamente fotos de la misma cara (la asociada al DNI introducido) y comprobar la distancia euclídea de la foto que recibimos hacia cada una de las de la base de datos, reconociéndolo como el verdadero usuario si la distancia está por debajo de un umbral y rechazándola si esta por encima.
Además observamos que en las fotografías que se crean con el plugin de jQuery hay mucho espacio inútil para la identificación (toda la imagen excepto la cara), por lo que debemos reducir la imagen original. Para esto se nos han ocurrido dos formas: o bien usando software de detección facial (que, después de las primeras pruebas ha demostrado ser bastante lento) o bien una opción más "cutre", que es colocar un recuadro en la pantalla donde se ve tu imagen antes de tomar la foto para que el usuario coloque la cara en ese recuadro, seleccionando luego únicamente ese recuadro a la hora de hacer los modelos y el reconocimiento
En los próximos días escribiremos un post con los resultados, aunque intentaremos tenerlo funcional para el Viernes y que podáis verlo en primera persona.
