A lo largo de la semana pasada tuvimos varios avances en la parte de reconocimiento facial.
Para empezar tuvimos que modificar el programa original en varios aspectos para que, por ejemplo, los métodos pudieran tomar el dni que el alumno ha introducido como parámetro para realizar las comparaciones o que devolviesen la distancia mínima a la cara elegida como "más parecida" para poder usarla también para la toma de decisiones.
Finalmente nos decidimos por colocar un recuadro encima de una zona del cuadro de captura para que el usuario coloque su cara ahí y luego recortarla. Esta decisión fue debida a que, en caso de usar software, el tiempo de detección de caras era demasiado alto, y la probabilidad de error no demasiado buena.
Como ya comentamos en la presentación y en una entrada anterior, tenemos dos formas de realizar la comprobación de que la persona es quien dice ser. Ambas tienen sus ventajas y sus inconvenientes, y por lo tanto no descartamos a priori ni la una ni la otra:
- Comparando la fotografía de test únicamente con fotos pertenecientes a ésa supuesta persona, y discriminando en función de la distancia euclídea entre ambas caras. Este método tiene la ventaja de que el número de fotos a comparar es mucho menor, por lo que el sistema será más rápido y el tiempo de comprobación no dependerá del número de usuarios que haya en la base de datos. La contrapartida es que, al menos en las pruebas iniciales, no hay un umbral claro entre la distancia entre dos caras de personas totalmente distintas y de la misma persona si ésa foto no está en la base de datos (como es en el caso normal).
- Haciendo que el programa busque entre todas las fotos de todos los usuarios aquella que más se parezca a la fotografía tomada al usuario al identificarse. Si la foto con la menor distancia a ésta es una foto del usuario, entonces se permite el acceso. Ésto tiene la ventaja de no ser tan "azaroso" como en el otro caso, siendo más fácil de implementar. Sin embargo, si la base de datos crece se tardaría mucho en realizar una consulta, y, al haber más caras, la probabilidad de error aumentaría.
De momento probaremos con ambos métodos, y cuando tengamos claro cuál es el mejor seguiremos con ése.
Por otro lado realizamos varios scripts y funciones en Matlab: Implementamos una función que recoge la foto tomada al usuario, la pasa a Blanco y Negro, y la recorta para escoger sólo la parte de la cara (la correspondiente al recuadro colocado encima del cuadro de captura), sobreescribiéndola a continuación. Por otro creamos dos scripts, uno para cada método de identificación, que llaman a las funciones necesarias para el funcionamiento del reconocimiento facial.
Para poder pasar el dni a esos scripts optamos por hacer que se esciba en un archivo txt que posteriormente se leerá desde Matlab. La salida de Matlab se leerá desde el servidor de manera similar.
Durante esta parte nos encontramos con varios problemas, la mayoría relacionados con la parte web y la integración de los plugins en la página. Por ello sólo nos ha dado tiempo a incluir la captura de fotografías en un parte del sistema, aunque esperamos tenerlas todas implemntadas en pocos días.