Recomiendo:
0

Identificación biométrica en Linux

Fuentes:

Las lluvias desbordaron los ríos y quebradas, produjeron deslaves y miles quedaron sin techo al instante. Todos trabajamos en los refugios ayudando en lo que se pueda. En el que nos tocó, unas 1500 personas damnificadas trabajaban en conjunto con las instituciones para organizar un pequeño espacio, un colchón y un plato de comida. Necesitamos […]

Las lluvias desbordaron los ríos y quebradas, produjeron deslaves y miles quedaron sin techo al instante. Todos trabajamos en los refugios ayudando en lo que se pueda. En el que nos tocó, unas 1500 personas damnificadas trabajaban en conjunto con las instituciones para organizar un pequeño espacio, un colchón y un plato de comida.

Necesitamos pues, organizar rápidamente la información para proveer alimentos, ropa, darle atención medica psicológica, etc. Pues diseñamos un software que permita capturar toda esta información por persona, construir los grupos familiares, cuantificar por sexo y edades, enfermedades, tratamientos especiales.

Para el acceso al refugio decidimos añadirle al sistema capacidad de reconocimiento biométrico. Para esto utilizamos un vieja librería llamada libfprint. La dificultad de esta librería es que normalmente identifica y autentica contra el home del usuario mediante módulos PAM. Es decir, no esta orientada a realizar una base de datos de huellas en linux.

Una huella dactilar usualmente aparece como una serie de líneas oscuras que representan los relieves, la porción saliente de las crestas de fricción, mientras los valles entre estas crestas aparecen como espacio en blanco y están en bajo relieve, la porción subyacente de las crestas de fricción.

La identificación por huella dactilar está basada principalmente en las minucias, o la ubicación y dirección de los finales y bifurcaciones (separaciones) de las crestas a lo largo su trayectoria.

Los tipos de información que pueden tomarse de la impresión de la cresta de fricción de una huella incluyen el flujo de crestas de fricción (nivel 1 de detalle), la presencia o ausencia de características a lo largo de cada trayecto individual de crestas de fricción y sus secuencias (nivel 2 de detalle), y el detalle intrincado de una sola cresta (nivel 3 de detalle). El reconocimiento está usualmente basado en los primeros 2 niveles de detalle o sólo en el último.

La tecnología AFIS explota algunas de estas características de huellas dactilares. Las crestas de fricción no siempre fluyen continuamente a través de un patrón y a menudo resultan en características específicas como finales de crestas, crestas divisorias y puntos, u otra información. Un AFIS esta diseñado para interpretar el flujo de las crestas sobresalientes para asignar una clasificación de huellas dactilares y luego extraer los detalles de minucias- un subconjunto de la suma total de información disponible, suficiente aun para buscar efectivamente en un repositorio de huellas dactilares grande.

Realizamos una modificación en la aplicación de enrolamiento para poder almacenar la huella. La librería, escrita en lenguaje C, genera una estructura de datos que a través de una función se convierte en un binaryblob (Binary Large Objet). Las bases de datos mas reconocidas como como MySql o Postgres permiten almacenar estos tipos de datos.

Posteriormente, la verificación se realiza a través de una función que toma una colección de estructuras y la compara con la estructura capturada por el dispositivo.

Los dispositivos que soporta libfprint son genéricos. Nosotros utilizamos un digitalPersona U4000B de bajo coste y alta velocidad de captura.

Realizamos una prueba en un Slackware 13.1, con un procesador core duo 2, de una VIT, nada sobredimensionado, y simulamos una colección de cinco mil huellas, logrando hacer el match en menos de dos segundos.

Rápidamente integramos la librería al sistema de control de damnificados y realizamos el control de acceso biométrico cien por ciento en Software Libre.

Las funciones claves a utilizar de las librerías son:

#include

// Declaración de la estructura de datos // de una huella captura por el dispositivo

struct fp_print_data *fdata;

// Coloca en un buffer la información capturada // por el dispositivo y devuelve la longitud

len = fp_print_data_get_data(data, &buf);

// Convierte los datos almacenados en un // buffer en la estructura de datos fdata

fdata = fp_print_data_from_data(buf,len);

// Esta es la más importante // toma una huella y realiza la comparación // entre una colección de huellas, almacenada // en fdata que, en este caso, debe ser // un array de punteros

fp_identify_finger(dev, fdata, &posicion);

http://www.pablo.web.ve/?p=75