Procesamiento de Huellas Digitales: Ejecutar el Conjunto de Herramientas de Huellas Digitales NIST NBIS en un ODROID-XU4

El Instituto Nacional de Ciencia y Tecnología, o NIST, mantiene un conjunto muy amplio de herramientas de código abierto conocido como NIST Biometric Image Software, o NBIS para abreviar. Su funcionalidad está centrada en las huellas digitales [1], [2]. Este artículo cubrirá todo lo necesario para empezar a trabajar y comparar huellas en un ODROID-XU4.

Partes de este artículo han sido tomadas del proyecto maestro relacionado con el preprocesamiento de imágenes en huellas digitales para aumentar el rendimiento de coincidencia del software proporcionado por NBIS. El proyecto hace uso de un ODROID-XU4 ya que el procesador utilizado en el ODROID-XU4, un Samsung Exynos 5422 [3], es el mismo procesador que el Samsung Galaxy S5, un dispositivo que tiene un lector de huellas digitales. Este proporciona una representación casi exacta de un objetivo potencial donde se utilizarían estos algoritmos de preprocesamiento. Aunque este es importante para mi proyecto original, también es importante para muchos otros posibles usos. El tema del bajo consumo y el alto rendimiento del ODROID-XU4 lo hace ideal para muchos proyectos que uno podría tener en mente. Por ejemplo, un ODROID-XU4 sería un controlador ideal en un sistema IoT que también podría implementar autentificación biométrica para el acceso de personas.

Configuración del software

El ODROID-XU4 debe ejecutar Ubuntu 18.04LTS, preferiblemente la versión mínima. NBIS se compila utilizando el conjunto de herramientas GNU C/C++. Después de configurar ODROID-XU4, las instrucciones de la página wiki de hardkernel son una excelente guía a seguir, el NBIS debe descargarse desde https://www.nist.gov/itl/iad/image-group/products-and-services/image-group-open-source-server-nigos.

Abre una terminal en el directorio donde se descargó nbis_v5.0.0.zip. Los siguientes pasos tendrán como resultado la compilación de todos los binarios necesarios. Primero, es necesario instalar cmake ya que será usado en pasos posteriores, luego el archivo debe extraerse y se moverse a una carpeta llamada 'nbis'. Dentro de ese directorio 'nbis', se crea un directorio 'build' donde el script de configuración (setup.sh) recibe las instrucciones para colocar todos los archivos binarios en el paso final de la instalación. La ruta al script de configuración debe ser una ruta completa, no una ruta relativa o una que use atajos, como ~. Además, los argumentos se pasan sin X11 y stdlibs, estos argumentos ayudan a reducir las dependencias externas que son necesarias. Por último, la secuencia de pasos de make, compila y mueve los archivos binarios a su ubicación final, respectivamente.

$ sudo apt-get install cmake
$ unzip nbis_v5_0_0.zip
$ mv Rel_5.0.0 nbis
$ cd nbis
$ mkdir build
$ ./setup.sh /home/odroid/Downloads/nbis/build --without-X11 –STDLIBS
$ make config
$ make it
$ make install
Los pasos anteriores tienen como resultado un conjunto de binarios que funcionan y crean todo lo necesario para avanzar. Sin embargo, a raíz de algunas pruebas, se ha demostrado que añadir un par de marcas de compilación adicionales puede crear archivos binarios que están extremadamente bien ajustados para el ODROID-XU4. En el directorio "nbis" hay dos archivos "rules.mak" y "arch.mak", abre ambos archivos. Abre una línea que declara la variable "ARCH_FLAG", agrega los siguientes elementos que se le asignarán. Todos los elementos existentes que se asignaron a "ARCH_FLAG", como "-fPIC", deberían mantenerse.
ARCH_FLAG := -fPIC -mfloat-abi=hard -mcpu=cortex-a15 -fipa-pta
Después de editar y guardar los archivos con los cambios mencionados anteriormente, se deben ejecutar los siguientes comandos.
$ make clean
$ make config
$ make it
$ make install

Software

De todos los binarios que se crean, los siguientes son los únicos que se necesitan en este ejemplo.

CWSQ : Conversor de archivos de imagen a Wavelet CWSQ creará un archivo wavelet comprimido a partir de una entrada de escala de grises. Existen dos franjas de compresión para nuestra prueba, 5: 1 es la que se utilizó, la otra opción es 15: 1. La mayoría de las herramientas NBIS funcionan con este formato de archivo wavelet, de modo que todas las huellas digitales compatibles deben estar en este formato.

MINDTCT: detección de minucias

MINDTCT es un programa de detección de minucias, un punto de minucias puede considerarse como una característica interesante en una huella digital. El tipo, la ubicación y el ángulo de los puntos encontrados en este programa se utilizan para comparar y contrastar puntos [4]. Hay muchos tipos diferentes de puntos de minucias, pero MINDTCT solo detecta puntos finales (primera imagen) y bifurcación (segunda imagen) en una huella digital. El tipo, la ubicación y la orientación del punto se guardan en un archivo. Cada punto de minucias se guarda como coordenadas en función de su distancia en milímetros, con incrementos de 0,01 mm, hasta la esquina inferior izquierda de la imagen [1]. Además, los puntos contienen información del ángulo relacionada con la dirección local de los contornos de las plieges y los valores (las líneas blancas y negras en una imagen de huella digital) que forman un punto minucioso. La siguiente imagen muestra dos puntos de minucias diferentes. Los ángulos, "A" y "B" representados en las imágenes representan dos métodos diferentes para medir ángulos. NBIST utiliza ángulos medidos por "A".

Figure 1 - Angle A shows the ANSI/NIST measurement, B shows FBI measurement angle. left is a ridge-ending, right is a bifurcation
Figura 1: el ángulo A muestra la medición ANSI/NIST, B muestra el ángulo de medición del FBI. izquierda es un final de pliegue, derecha es una bifurcación

BOZORTH3: Coincidencia de huellas digitales

El algoritmo y el software Bozorth3 es un código de exportación controlado. En un nivel alto, el software toma una huella digital y se compara con el número 'n' de huellas digitales ingresadas objetivo y devuelve una tasa de coincidencia para cada una de las huellas digitales objetivo. Los archivos de huellas digitales que usa están en el formato de archivo creado a partir de MINDTCT.

Ejecutando

Si no hay un dispositivo de captura de huellas digitales conectado o disponible, hay varias bases de datos que contienen conjuntos de imágenes de huellas dactilares que se pueden usar para realizar pruebas. Una de estas bases de datos es la base de datos FVC 2002 disponible en http://bias.csr.unibo.it/fvc2002/. Los comandos se pueden ejecutar desde un terminal que ejecuta el directorio "build/bin" o esta ruta se puede agregar a la variable $ PATH de los terminales, de modo que los comandos pueden ejecutar desde cualquier ubicación.

$ export PATH=$PATH:/home/odroid/Downloads/nbis/build/bin
Para simplificar las cosas, supondré que hay una huella digital conocida llamada "myprint.tiff", y la intención es ver si coincide con otra huella conocida como "mysteryprint.tiff". El primer paso es convertir ambas imágenes de huellas digitales en un wavelet.
$ cwsq .75 myprint.tiff
$ cwsq .75 mysterprint.tiff
Después de cada comando "cwsq", se mostrará un poco de información sobre la impresión y creará un * .wsq correspondiente con el mismo nombre y el archivo de entrada * .tiff. A continuación, estos archivos wavelet se envían a MINDTCT, esto creará varios tipos de archivos, el único de interés es el archivo * .xyt.
$ mindtct -b -m1 myprint.tiff myprint/
El último paso es comparar o "hacer coincidir" las huellas entre sí. Esto se puede hacer con el siguiente comando:
$ bozorth3 -m1 A outfmt=spg -T 30 -p myprint.xyt mysteryprint.xyt
Sin embargo, se pueden comparar varios archivos con nuestra huella (myprint). Esto se puede hacer fácilmente con un operador comodín, * .xyt como último argumento en lugar de "mysteryprint.xyt" compararía todos los archivos xyt con myprint.
$ bozorth3 -m1 A outfmt=spg -T 30 -p myprint.xyt *.xyt
El resultado será una lista con una o más comparaciones. Cada línea es una nueva comparación, donde el primer campo es una "puntuación" que determina como de similares son las coincidencias. El argumento '-T 30' en el comando es un umbral que significa no tener en cuenta nada menos que 30. El segundo valor es la impresión 'objetivo', por lo que siempre será 'myprint' en cada fila, el siguiente elemento es el archivo que fue comparado. A continuación, se muestra un ejemplo del resultado cuando se usa un comodín, por lo tanto, myprint se compara con sí mismo.
250 myprint.xyt myprint.xyt
41 myprint.xyt mysteryprint.xyt
Dado que mysteryprint obtuvo un 41, se considera que coincide con myprint. No existe un valor umbral real perfecto, ya que todo se basa en lo que es una tasa aceptable de falsos positivos y falsos negativos. Un umbral para desbloquear una puerta de una casa sin duda tendrá que ser más alto que acceder a un panel IoT para ajustar la temperatura de contacto

Si te ha sido interesante, tienes más información en los siguientes enlaces de referencia. El documento y el código del proyecto original se pueden encontrar en GitHub en https://github.com/AndrewRuggeri/FP.

Referencias

  • [1] C. Watson et al., “User’s Guide to NIST Biometric Image Software (NBIS).” Gaithersburg, p. 207, 2007.
  • [2] E. Tabassi, C. Wilson, and C. Watson, “Fingerprint Image Quality,” NIST, vol. NISTIR 7151, 2004.
  • [3] R. Roy, Hardkernel ODROID-XU4 Manual, 20170310th ed. Hardkernel, 2017.
  • [4] D. Maltoni, “A Tutorial on Fingerprint Recognition,” Adv. Stud. Biometrics, vol. 3161, pp. 43–68, 2005.

Be the first to comment

Leave a Reply