agosto 19, 2025

AdeaDNI: Reconocimiento facial y DNI para control de accesos

En Adealóxica hemos estado dedicando tiempo a un proyecto para el control de accesos mediante reconocimiento facial, usando la fotografía del Documento Nacional de Identidad electrónico.

AdeaDNI es un sistema de reconocimiento facial simple y efectivo, aunque el trabajo detrás no fue tan sencillo. Consiste en: dos cámaras, un lector NFC (Near Field Communication) y un ordenador con el programa instalado. 

El usuario coloca su documento boca abajo en el lector de tarjetas. Una cámara captura desde encima el código MRZ (Machine Readable Zone) del lado posterior del DNI. Esto permite al programa acceder al chip criptográfico del DNI y analizar de manera segura la fotografía almacenada en él. Finalmente el usuario debe mirar a la segunda cámara que captura varias imágenes de su rostro para que el programa pueda compararlas con la que extrae del DNI. 

Este proceso garantiza la verificación de la identidad del usuario en menos de un minuto, de manera consistente y segura para todas las partes.

Cámaras

La recogida de las imágenes faciales es una parte clave en el reconocimiento facial. Suele ser donde hay mayores problemas para estos sistemas, por la iluminación, obstrucciones de la lente y demás factores externos. 

En este caso el proceso requiere dos cámaras:

a. Cámara MRZ

Este sensor analiza la imagen en busca del código MRZ, una vez lo registra puede compartirlo con el programa. Este paso es necesario para poder acceder a la información del DNIe, si algo falla el programa notifica del problema al usuario, ya sea por un fallo al leer el código o en la comunicación por NFC.

Hemos probado también una versión alternativa en la que esta cámara captura directamente la fotografía del DNI físico, sin necesidad de un lector NFC. Es posible aunque irregular, especialmente cuando hay reflejos no deseados.

b. Cámara de rostro

En tiempo real, el usuario puede observarse a sí mismo, con un recuadro sobre el rostro. Eso quiere decir que el programa está detectándolo correctamente. El programa coge varias imágenes para comparar todas con la del documento, y basta con que sólo coincida una para dar el aprobado.

En nuestras pruebas usamos la webcam de un portátil, que sin tener mucha calidad, fue más que suficiente. Mientras haya buena iluminación y la persona mire recto a una distancia cercana las imágenes son válidas. La diferencia de tamaños influye en esta comparativa, más abajo explicamos por qué.

2. Lector

Un dispositivo para lectura por NFC que se conecta mediante USB al ordenador. Es la pieza clave en la comunicación del documento con el programa, por lo que tanto la conexión del cable como el aparato en sí influyen en el resultado final. Preferiblemente debería tener la mayor velocidad de comunicación posible para evitar problemas, en nuestro caso hemos probado varios modelos y comprobamos que el ACR1252U fue el más óptimo.

Como alternativa se podrían usar otros dispositivos como smartphones, que son muy rápidos para este tipo de comunicación. Pero para aplicaciones profesionales y consistentes es mejor un hardware específico.

3. Programa

Para el desarrollo del software recurrimos a DLIB, una biblioteca de código abierto para visión artificial. En el reconocimiento facial un software debe pasar por distintas fases: detección, alineamiento, extracción de características, reconocimiento.

Detección

Para la detección el programa analiza la imagen por cuadrantes y de ahí puede encontrar las características clave (ojos, boca, nariz…) y definir el espacio facial que debe capturar el programa. Lo hace mediante HOG (Histogram of Oriented Gradients) un método muy robusto y efectivo que se usa para detección de todo tipo de objetos.

Alineamiento

Por lo general, para cualquier sistema de reconocimiento ambos objetos deberían estar en el mismo ángulo de la imagen. Como las personas o el propio DNI pueden estar torcidos, es necesario que se alineen los rostros que se van a comparar, para asegurar la efectividad del proceso.

Extracción

En el espacio de la cara en la imagen se concretan hasta 128 caracteres faciales. Los puntos clave de la imagen que definen el rostro a nivel matemático, estos serán la base de la comparación entre rostros. El programa recurre a los histogramas usados anteriormente para detectar la imagen facial.

Reconocimiento

El reconocimiento requiere comparar las dos imágenes (del DNI y en tiempo real) para medir la coincidencia. La métrica que se usa para esta comparación es la distancia euclidiana de los caracteres faciales. El programa debe dar un resultado entre 0 y 1; donde 0 representa “ninguna diferencia” y 1 “completamente distintas”.

Observaciones

  1. Hay muchos métodos y algoritmos de reconocimiento y detección facial, pero esta manera es la que hemos encontrado más óptima para la práctica. Alternativas como las redes neuronales convolucionales consumen muchos recursos y hasta pueden ser demasiado eficientes, reconociendo caras de fondo.
  1. La diferencia de tamaño de las imágenes puede afectar en la comparación, dando malos resultados. Para eso hay métodos que se pueden integrar en el código para escalar las imágenes y normalizar sus tamaños.
  1. El programa debe leer el texto del MRZ de manera consistente, algo que puede ser irregular. En muchas pruebas las “Q” se confundían por “0”. Para evitar estos errores el programa sólo se centra en recopilar las cifras, ya que las letras que hay son siempre las mismas, excepto la del DNI que se puede deducir a partir del número sin problema.
  1. Para acceder al DNIe es importante seguir un protocolo específico a nivel de programación. El PACE (Password Authenticated Connection Establishment) es el más recomendado por ser el más seguro y consistente, en otro artículo hablamos más en detalle sobre esto.
Compártelo:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos requeridos están marcados *

Publicar comentario