Вы находитесь на странице: 1из 27

UNIVERSIDAD NACIONAL DANIEL ALCIDES CARRION

PROYECTO: LECTOR DE HUELLA DIGITAL EN JAVA

INTELIGENCIA ARTIFICIAL

E.F.P
DOCENTE: Ing. HUAROC SUAREZ, Jhonny A.

SEMESTRE: VI

INTEGRANTES:

ESPINOZA CONDOR, Ivn CALLUPE SEGURA, Cristian

SISTEMAS Y COMPUTACION
Cerro de Pasco, Octubre de 2013

LECTOR DE HUELLA DIGITAL EN JAVA


Actualmente estamos trabajando en este proyecto que pretende realizar la autentificacin de personas en base a su huella digital, lo que este sistema realizar a grandes rasgos es primeramente registrar una cantidad definida de huellas de una persona para que posteriormente al tratar de realizar algn procedimiento le sea requerido colocar alguno de los dedos previamente registrados para poder proceder.

Existen diversas ventajas y desventajas al implementar un sistema de este tipo ya que la correcta lectura de la huella digital depende de varios factores ajenos a la programacin del sistema, sin embargo, este tipo de autentificacin es sumamente segura y resulta realmente cmodo para las personas el no tener que portar ningn tipo de documento para poder realizar transacciones previamente definidas.

En un principio sinceramente no encontrbamos por dnde comenzar ya que nunca habamos desarrollado ningn proyecto de este tipo pero poco a poco fuimos detectando y obteniendo todo lo necesario para poder realizar este trabajo.

Navegando por la web encontramos algunos foros en los cuales se hablaba de diversos SDK's para programar un lector de huellas, desde el propietario de Digital Persona hasta algunos otros ms flexibles como el de Griaule, cada uno de ellos con sus respectivas descargas de prueba. Al final decid utilizar el Fingerprint SDK Java 2007 de Griaule ya que provee de diversas funcionalidades y facilidades de implementacin, adems de que la licencia de uso es relativamente barata ($36 USD para un cliente) y al descargarlo obtienes tambin diversas aplicaciones de ejemplo para poder entender mejor su funcionamiento.

Adems de Java, Griaule provee SDK's para otros lenguajes de programacin como Delphi, Visual Basic, C++, .NET, FoxPro, etc, soporta 19 modelos de lectores diferentes (incluyendo el de Microsoft) ya que viene tambin con un controlador genrico tanto para Windows como Linux que te reconoce cualquiera de estos dispositivos al momento de conectarlo ;), puede comparar hasta 35,000 huellas por segundo y soporta perfectamente un ambiente de cliente - servidor (actualmente yo tengo mi servidor de aplicaciones y bases de datos en Ubuntu Linux 8.04 y nuestros clientes en Windows).

Para realizar la descarga del software de prueba es necesario registrarse previamente (no tiene costo alguno). Ahora hablaremos sobre la implementacin y la programacin de este SDK.

Programando el lector de huella digital en Java

Parte 1.

En la actualidad la seguridad en las transacciones electrnicas se ha vuelto una parte indispensable para los programadores de sistemas, la identificacin para el acceso a los registros y dems cuestiones relacionadas deben de ser tomadas en cuenta para poder validar que alguna persona est accediendo realmente a lo que debe acceder, es esencial hacer que (en medida de lo posible) nadie pueda hacerse pasar por alguien que no es al momento de identificarse en un sistema. Aqu es donde la biometra juega un papel sumamente interesante (ms informacin sobre la biometra en ste artculo) as que dedicaremos una serie de artculos a tratar de explicar cmo programar un lector de huella digital en Java utilizando algunas herramientas y API's que nos permitirn realizar todos los procedimientos sin ningn problema.

Primeramente hablar de lo que necesitamos para poder empezar a programar un sistema completo de registro y verificacin de identidades por medio de la huella digital:

El JRE (Java Runtime Environment) ms reciente, al momento de la publicacin de este artculo es la 1.6.7.

IDE de programacin NetBeans en su versin ms reciente, al momento de publicar este artculo es la 6.1. Cabe mencionar que el vnculo que indico contiene varias versiones, se puede descargar cualquiera que cuente con el Base IDE y Java SE.

Un lector de huella digital de cualquiera de estos modelos. El API de programacin de lectores de huella digital de Griaule para Java. Un servidor de bases de datos en MySQL.

Una vez que tenemos todo lo anterior procedemos con la instalacin del API de programacin de Griaule (asumo que el NetBeans y el servidor MySQL ya estn instalados y funcionando sin problemas). Instalacin del API de programacin de Griaule: Una vez que hemos descargado el API tendremos un archivo llamadoFingerprint_SDK_Java_2007_Installer.jar, para comenzar la instalacin se realiza lo siguiente: 1. Doble clic sobre el archivo, aparecer una ventana que nos pide elegir el idioma, selecciona el que desees. 2. Posteriormente aparece la pantalla de bienvenida y si se da clic en Siguiente aparecen los trminos de la licencia, los cuales se debe aceptar para poder continuar. 3. Una vez hecho lo anterior se selecciona la ruta donde se instalar, aqu se dejan los valores por defecto. 4. Despus de la ruta de instalacin se debe elegir los elementos que se instalarn, de igual manera se deja todo marcado y se da clic en Siguiente.

5. Posteriormente se instalan los elementos seleccionados, dejando al final la instalacin del controlador. NOTA: Es de suma importancia tomar en cuenta que antes de la instalacin del lector de huella digital, este se debe de tener desconectado y de preferencia desinstalar el software y controladores que venan con l de fbrica para evitar conflictos durante la actual instalacin. 6. Ahora aparece una pantalla para seleccionar el idioma de la instalacin del controlador, de igual manera se elige el que ms convenga. 7. Despus aparece la pantalla de bienvenida...

... aqu se da clic en Siguiente o Next. 8. Se aceptan los trminos de la licencia y se da clic en Siguiente un par de veces. 9. Posteriormente presionamos el botn de Instalar o Install para que se realice la instalacin de los controladores del lector. 10. Al terminar el proceso se da clic en el botn de Siguiente y posteriormente en Finalizar para terminar la instalacin del controlador. 11. Una vez hecho esto se sigue con la pantalla del proceso de instalacin general...

... y se da clic en Siguiente o Next.

12. Al final se da clic en el botn Done para culminar. Una vez terminada la instalacin del API se puede conectar el lector para terminar su instalacin. Conectar el lector de huella digital: Ahora continuemos con lo siguiente: 1. Se conecta el lector de huella digital. 2. Aparece el Asistente para Nuevo Hardware de Windows. 3. Se selecciona No por el momento y se da clic en Siguiente. 4. Despus se elige Instalar automticamente el software recomendado y se da clic en siguiente. 5. Se espera a que termine la instalacin, el asistente debe de reconocerlo e instalar los controladores que previamente hemos agregado junto con el API. 6. Se da clic en Finalizar para terminar la instalacin.

Programando el lector de huella digital en Java

Parte 2.
Continuando con la programacin de un lector de huella digital en Java procederemos en este caso ya directamente con el cdigo, la entrega anterior se refiri meramente a la preparacin del entorno para el desarrollo, si no la has ledo te recomiendo verificarla, entenderla y realizarla primero antes de proceder con esto ya que de lo contrario no funcionar la aplicacin.

Comenzando con las indicaciones, haremos lo siguiente:

1.

Creamos

un proyecto en NetBeans con

el

nombre EjemploLectorHuellas.

2. Dentro del proyecto crear un paquete de nombre procedimientos y otro de nombre interfaz. 3. Dentro de procedimientos crear una clase (Java Class) llamada Util.

4. En la definicin de la clase util agregar implements IStatusEventListener, IImageEventListener, IFingerEventListener y sus correspondientes imports...

import import import import

com.griaule.grfingerjava.FingerprintImage; com.griaule.grfingerjava.IFingerEventListener; com.griaule.grfingerjava.IImageEventListener; com.griaule.grfingerjava.IStatusEventListener;

public

class

Util

implements

IStatusEventListener, IFingerEventListener{

IImageEventListener,

5. Al implementar dichas interfaces nos pedirn implementar todos sus mtodos abstractos, lo hacemos dando un clic en el foco que aparece del lado izquierdo y seleccionando "Implement all abstract methods" lo cual generar la implementacin de 5 mtodos (modifica el nombre de los argumentos para mejor referencia):

public void onSensorPlug(String idSensor) // evento que se genera al conectar el lector de huella

public void onSensorUnplug(String idSensor) // evento que se genera al desconectar el lector de huella

public void onImageAcquired(String idSensor, FingerprintImage huellaDigital) // evento que se genera al obtener una imagen de la huella

public void onFingerDown(String idSensor) // evento que se genera al colocar un dedo en el lector

public void onFingerUp(String idSensor) al levantar el dedo del lector

// evento que se genera

Cabe mencionar que no utilizaremos todos los eventos en este ejemplo pero se deben de implementar para que el compilador no marque errores ya que provienen de una interface.

6. Modificamos los mtodos onSensorPlug y onSensorUnplug para que queden de la siguiente manera:

public void onSensorPlug(String idSensor) { try { GrFingerJava.startCapture(idSensor, this, this); } catch (GrFingerJavaException e) { e.printStackTrace(); } }

public void onSensorUnplug(String idSensor) { try { GrFingerJava.stopCapture(idSensor); } catch (GrFingerJavaException e) { e.printStackTrace(); } }

Lo anterior es para evitar problemas en la captura al momento de conectar y desconectar el lector, para que el compilador no marque errores debemos importar las

clases GrFingerJavay GrFingerJavaException...

import com.griaule.grfingerjava.GrFingerJava; import com.griaule.grfingerjava.GrFingerJavaException;

Los dems mtodos que se implementaron deben de quedar vacos (por el momento).

7. Ahora creamos un mtodo esttico que nos permita establecer el directorio de las libreras del SDK

/** * Establece el directorio donde se ubican las libreras nativas del SDK */ public static void setFingerprintSDKNativeDirectory(String directorio) { File directory = new File(directorio);

try { GrFingerJava.setNativeLibrariesDirectory(directory); GrFingerJava.setLicenseDirectory(directory); } catch (GrFingerJavaException e) { e.printStackTrace(); } }

y el import de la clase File correspondiente:

import java.io.File;

8. Posteriormente agregamos los siguientes objetos y variables inmediatamente despus de la definicin de la clase:

/**Contexto utilizado para la captura, extraccin y coincidencia de huellas digitales */ private MatchingContext fingerprintSDK;

/**Interfaz de usuario donde se muestra la imagen de la huella*/ private PantallaPrincipal ui;

/** Indica si la plantilla o template debe ser extrada automticamente*/ private boolean autoExtract = true;

/** Contiene localmente los datos de la huella capturada */ private ByteArrayInputStream fingerprintData;

/**Contiene la longitud del dato de la huella*/ private int fingerprintDataLength;

/** La imagen de la ltima huella digital capturada. */ private FingerprintImage fingerprint;

/** La plantilla de la ltima imagen de huella capturada */

public Template template;

... con sus correspondientes imports ...

import com.griaule.grfingerjava.MatchingContext; import interfaz.PantallaPrincipal; import java.io.ByteArrayInputStream;

Nota: se debe agregar 'import interfaz.PantallaPrincipal;' an cuando no existe actualmente ya que se crear en los pasos siguientes.

9. Ahora crearemos la interfaz de usuario, para ello damos clic derecho en el paquete interfaz y seleccionamos New -> JFrame Form, le damos por nombre 'PantallaPrincipal'.

10. Agregamos dos paneles (Huella Digital y Acciones, como se muestra en la imagen) y 4 botones (Verificar, Identificar, Guardar y Salir) de manera que queden parecido a lo siguiente:

11. Nombramos los botones tal cual su etiqueta pero anteponiendo las letras btn, es decirbtnVerificar, btnIdentificar y as sucesivamente, el panel de Huella Digital lo nombramos 'panelContenedor'.

12. Establecemos el panelContenedor con un BorderLayout dando un clic derecho sobre l -> Set Layout -> Border Layout

12. Ya que tenemos lo anterior nos vamos a la vista de cdigo y agregamos los siguientes objetos...

//objeto usado para realizar todas las operaciones relacionadas al Fingerprint-SDK private Util procedimientosSDK;

//Panel para mostrar la huella digital

private JPanel fingerprintViewPanel = null;

//Imagen de la huella actual private BufferedImage fingerprintImage = null;

... con sus correspondientes imports ...

import java.awt.image.BufferedImage; import javax.swing.JPanel; import procedimientos.Util;

... los objetos deben ir dentro de la clase pero fuera de cualquier mtodo.

13. Nuevamente modificamos la clase Util agregando un constructor sobrecargado que reciba un objeto de tipo PantallaPrincipal de la siguiente manera:

public Util(PantallaPrincipal ui) { this.ui = ui; }

14. Por ltimo en la clase Util (por el momento) agregamos un mtodo que nos permita inicializar la captura de las huellas, deber de quedar as:

/** * Inicializa el Fingerprint SDK y habilita la captura de huellas. */ public void inicializarCaptura() { try { fingerprintSDK = new MatchingContext(); //Inicializa la captura de huella digital. GrFingerJava.initializeCapture(this); } catch (Exception e) { //Si ocurre un error se cierra la aplicacin. e.printStackTrace(); System.exit(1);

} }

15. Ahora trabajaremos con la clase PantallaPrincipal, lo que haremos es crear un mtodo para inicializar la forma, estableciendo el estilo visual y creando una instancia de la clase Util. Deber quedar de la siguiente manera:

/** * Se establece el estilo visual de la aplicacin y se realiza la inicializacin de la clase * que contiene los procedimientos principales. **/ public void inicializar() {

try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelC lassName()); } catch (Exception e) { System.err.println("No se pudo aplicar el estilo visual"); }

//Crea una instancia de Util this.procedimientosSDK = new Util(this); }

... y su import correspondiente:

import javax.swing.UIManager;

16. Agregamos una llamada al mtodo inicializar() dentro del constructor de la clase y antes del mtodo initComponents() de tal manera que quede as:

/* Crea una nueva forma de

PantallaPrincipal */

public PantallaPrincipal() { inicializar();

initComponents(); }

17. Ahora hacemos un mtodo para crear el contenedor de la imagen de la huella digital, en los comentarios se va explicando las funciones de cada lnea...

/** * Crea el panel que contendr la imagen de la huella digital */ private JComponent crearPanelHuella() { //Crea un panel nuevo para mostrar la huella fingerprintViewPanel = new JPanel(){

//Se sobreescribe el mtodo paintComponent //para habilitar la muestra de la imagen de la huella public void paintComponent(Graphics g) { super.paintComponent(g);

//Si hay una imagen para ser mostrada if (fingerprintImage!=null) { //Calcula el tamao y posicin de la imagen para ser pintada //el tamao es ajustado para que ocupe todo el tamao del panel Insets insets = getInsets(); int transX = insets.left; int transY = insets.top; int width getInsets().left; int height = getHeight() - getInsets().bottom getInsets().top; = getWidth() - getInsets().right -

//Se dibuja la imagen g.drawImage(fingerprintImage, transX, transY, width, height, null);

};

//Se agrega un borde alrededor del panel fingerprintViewPanel.setBorder(new CompoundBorder ( new EmptyBorder (2,2,2,2), new BevelBorder(BevelBorder.LOWERED)));

//si no hay existe el panel de la huella no devuelve nada... if(fingerprintViewPanel==null) { return null; }else{ // de lo contrario devuelve el panel mismo

return fingerprintViewPanel; }

... y se agregan los imports correspondientes para evitar errores ...

import java.awt.Graphics; import java.awt.Insets; import javax.swing.JComponent; import javax.swing.border.BevelBorder; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder;

18. Una vez hecho esto nos vamos a la vista de diseo de la clase PantallaPrincipal, sin seleccionar ningn elemento damos clic derecho sobre el JFrame y posteriormente seleccionamos Events -> Window -> WindowActivated ...

... lo cual nos llevar a la vista de cdigo de la clase, dentro del mtodo form Window Activated, ah agregamos el cdigo de manera que quede de la siguiente forma:

private void formWindowActivated(java.awt.event.WindowEvent evt) { this.panelContenedor.add(crearPanelHuella()); }

19. Ahora creamos el mtodo showImage que nos permitir mostrar la imagen capturada por el lector en el panel correspondiente. El mtodo debe quedar de la siguiente manera:

/** * Mtodo utilizado para mostrar la imagen de la huella * en el panel correspondiente. */ public void showImage(BufferedImage image) { //Utiliza el imageProducer para crear una imagen de la huella digital fingerprintImage = image; //Se dibuja la nueva imagen repaint();

20. Una vez hecho esto vamos a la clase Util y agregamos el cdigo correspondiente al mtodo onImageAcquired que se ha creado al implementar las interfaces, el mtodo debe quedar as:

/** * Este mtodo es llamado cada vez que la imagen de una huella ha sido capturada. */ public void onImageAcquired(String idSensor, FingerprintImage huellaDigital) { //Almacena la imagen de la huella this.fingerprint=huellaDigital;

//Muestra la imagen obtenida ui.showImage(huellaDigital);

21. Ahora en el constructor de la clase Pantalla Principal agregamos las siguientes 3 lneas:

/*Inicializa la captura de huellas*/ procedimientosSDK.inicializarCaptura();

/*centra la ventana en la pantalla*/ setLocationRelativeTo(null);

/*hace visible la ventana*/ setVisible(true);

22. Agregamos el evento Action Performed del botn 'Salir' dando clic derecho sobre l en vista de diseo y seleccionando Events -> Action -> ActionPerformed y dentro del cdigo generado agregamos el mtodo dispose();

23. Para que nuestro programa pueda ejecutarse necesitamos mandarlo llamar desde la clase main, en este caso adems de llamar a la ventana se necesita establecer el directorio de las libreras, en conjunto, el mtodo main de la clase main debe quedar as:

public static void main(String[] args) { String grFingerNativeDirectory = new File(".").getAbsolutePath(); Util.setFingerprintSDKNativeDirectory(grFingerNativeDir ectory);

PantallaPrincipal p = new PantallaPrincipal(); }

Una vez hecho esto podemos correr la aplicacin con F6 y verificar que realmente funcione, si has realizado los pasos tal cual podrs, hasta este momento, activar el lector de huellas y obtener la lectura de la huella que se ha colocado en el lector, an nos falta especificar cmo verificar, identificar y guardar las huellas pero eso lo dejaremos para la prxima entrega.

Alguna duda o algo qu decir? Deja tu comentario. Saludox.

Programando el lector de huella digital en Java. Parte 3.


Siguiendo con el proyecto para la programacin de un lector de huellas en Java (si no has ledo la parte 1 y parte 2 te recomiendo hacerlo antes de proceder) en este caso explicar cmo almacenar los registros de las huellas en una base de datos en MySQL, anteriormente en la parte 1 hemos creado la base de datos con 3 columnas (el id, los datos de la huella y el nombre de la persona que la registr) ahora pasemos al cdigo. Recapitulando...
Se

tienen nicamente 3 clases en el proyecto: la clase ejemplolectorhuellas.Main, interfaz.PantallaPrincipal y procedimientos.Util, donde Main es a travs de la cual se arranca el programa, Pantalla Principal es la interfaz y Util es la clase que contiene los procedimientos.

Al realizar todos los procedimientos de la parte 2 del tutorial y ejecutar el programa se debe

de enceder el lector de huellas, al colocar el dedo sobre el lector debe de aparecer la imagen de la huella capturada. Hasta aqu todo bien? Si tu respuesta es afirmativa contina con los siguientes pasos, de lo contrario regresa a las partes anteriores y verifca que no tengas errores en la codificacin. Agregar los objetos para las consultas en procedimientos.Util::

Abrimos la clase Procedimientos.Util y agregamos al inicio de la misma los siguientes objetos:


/**Conexin a la base de datos*/ private Connection dbConnection; /**Consultas preparadas**/ private PreparedStatement guardarStmt; private PreparedStatement identificarStmt; private PreparedStatement verificarStmt; Los objetos anteriores se utilizarn para crear la conexin a la base de datos y realizar consultas en la misma, para poder realizar lo anterior debemos de crear un par de mtodos como se muestran a continuacin: /** * Inicializa la conexin a la base de datos y prepara las operaciones para insertar, * eliminar y modificar los datos */ private void initDB() { try { //Carga el driver ODBC Class.forName("com.mysql.jdbc.Driver"); //Se conecta a la bd dbConnection = DriverManager.getConnection("jdbc:mysql://servidor:3306/huellas","usua rio", "contrasena"); Statement stm = dbConnection.createStatement(); //Prepara las consultas/sentencias que se utilizarn guardarStmt = dbConnection.prepareStatement("INSERT INTO somhue(id, huenombre, huehuella) values(?,?,?)"); identificarStmt = dbConnection.prepareStatement("SELECT huehuella FROM somhue"); verificarStmt = dbConnection.prepareStatement("SELECT huehuella FROM somhue WHERE huenombre=?"); } catch (Exception e) { e.printStackTrace(); } } /** * Cierra la conexin a la base de datos y libera los recursos empleados.

*/ private void destroyDB() { try { //Se cierran todas las sentencias guardarStmt.close(); identificarStmt.close(); //Cierra la conexin a la base dbConnection.close(); } catch (Exception e) { e.printStackTrace(); } }

Las partes en rojo deben ser remplazadas por aquellas que correspondan a tu configuracin del servidor MySQL. Una vez que tenemos la conexin a la base de datos debemos hacer que el programa se conecte al inicializar la clase procedimientos.Util, para ello debemos de agregar una llamada al mtodo initDB() dentro del constructor de la misma para que al final quede de la siguiente manera:

public Util(PantallaPrincipal ui) { this.ui = ui; //Inicializa la conexin a la BD. initDB(); }

Antes de poder guardar la huella (o la informacin de la huella) en la base de datos debemos de extraer el llamado Template o plantilla de la huella que es una representacin matemtica de un mapa de la huella, es importante aclarar que no vamos a guardar la imagen de la huella sino este mapa a partir del cual se pueden comparar varias huellas o verificar a quin pertenece, existe la manera de guardar la imagen pero no se realizar dicho proceso en este tutorial debido a las siguiente razones: 1. No es seguro tener la imagen de una huella capturada. 2. Una imagen ocupa muchsimo ms espacio en la base de datos, si se plantea utilizar para corroborar una considerable cantidad de huellas el proceso se vuelve inoperable. 3. No es necesario tener la imagen de la huella para compararla con otra, basta con la plantilla que se extraer. Una vez aclarado el punto anterior procedamos a extraer la plantilla de la huella capturada agregando el mtodo extract() a la clase procedimientos.Util de la manera siguiente:

/** * Extrae la plantilla de la imagen de la huella actual. */ public void extract() { try { //Extrae la plantilla de la imagen. template = fingerprintSDK.extract(fingerprint); //Muestra la plantilla en la imagen

ui.showImage(GrFingerJava.getBiometricImage(template,finger print)); } catch (GrFingerJavaException e) { e.printStackTrace(); } } Ya que hemos creado el mtodo extract() basta con mandarlo llamar desde el mtodo onImageAcquired() para que este ltimo quede de la siguiente manera: public void onImageAcquired(String idSensor, FingerprintImage huellaDigital) { //Almacena la imagen de la huella this.fingerprint=huellaDigital; //Muestra la imagen obtenida ui.showImage(huellaDigital); //Muestra la plantilla en la imagen actual extract(); }

Una vez hecho lo anterior podemos correr el programa y capturar una huella, notaremos que se dibujan algunas lneas verdes sobre la misma, dichas lneas son la representacin de la plantilla que hemos extrado. Ahora viene la parte donde guardamos la plantilla de la huella en la base de datos. Lo primero que hacemos es agregar el mtodo guardarHuella() a procedimientos.Util de tal forma que quede de la siguiente manera:
/* * Guarda los datos de la huella digital actual en la base de datos */ public void guardarHuella(){

//Obtiene los datos del template de la huella actual fingerprintData = new ByteArrayInputStream(template.getData()); fingerprintDataLength = template.getData().length; //Pregunta el nombre de la persona a la cual corresponde dicha huella String nombre = JOptionPane.showInputDialog("Nombre:"); try { //Establece los valores para la sentencia SQL guardarStmt.setString(1,"default"); guardarStmt.setString(2,nombre); guardarStmt.setBinaryStream(3, fingerprintData, fingerprintDataLength); //Ejecuta la sentencia guardarStmt.execute();

} catch (SQLException ex) { //Si ocurre un error lo indica en la consola System.err.println("Error al guardar los datos de la huella."); ex.printStackTrace(); } }

Tras realizar lo anterior debemos de realizar import correspondiente a la clase JOptionPane: import javax.swing.JOptionPane Lo nico que resta por hacer es mandar llamar el mtodo guardarHuella() por medio del botn Guardar que aparece en la pantalla principal, para ello nos situamos en la pantalla principal y damos doble clic sobre el botn Guardar lo cual automticamente nos crea el mtodo que se efecta al presionar el botn, ahora solo basta mandar llamar el mtodo de la siguiente manera:

private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) { procedimientosSDK.guardarHuella(); } Tras realizar lo anterior, al ejecutar el programa, capturar una huella y presionar el botn Guardar podremos almacenar los datos de la huella digital en la base de datos y, posteriormente, podremos realizar operaciones de comparacin y verificacin de identidades, pero esto lo dejaremos para la siguiente entrega. Alguna duda o algo qu decir? Deja tu comentario. Saludox.

Programando el lector de huella digital en Java. Parte 4.


Anteriormente hemos visto cmo capturar y guardar huellas digitales en una base de datos en MySQL (si no sabes a lo que me refiero lee las partes Uno, Dos y Tres de este tutorial) ahora toca el turno a la verificacin de una identidad por medio de la huella e identificacin de una persona. Antes de continuar cabe aclarar(y diferenciar) a lo que me refiero con verificacin e identificacin:
Verificacin: Es el corroborar la identidad de una persona por medio de un dato

previamente dado (como el nombre, una credencial, CURP, etc) y su huella digital, por ejemplo: yo digo que soy Juan Prez y lo confirmo con mi huella digital. Identificacin: Es el corroborar la identidad de una persona utilizando solamente su huella digital, por ejemplo: coloco mi huella digital y el sistema automticamente sabe que soy Juan Prez. Una vez aclarado lo anterior, procedamos pues a analizarlo en base al cdigo que hemos agregado para las consultas en la parte 3 del tutorial.

Anteriormente agregamos un mtodo de nombre initDB() que es por medio del cual se inicializa la conexin y se preparan las consultas a la base de datos, dicho mtodo tiene, entre otras cosas, las siguientes lneas:

identificarStmt = dbConnection.prepareStatement("SELECT * FROM somhue"); verificarStmt = dbConnection.prepareStatement("SELECT huehuella FROM somhue WHERE huenombre=?");

Nota: anteriormente en la sentencia identificarStmt se tena huella en lugar de *, para fines de esta aplicacin debemos de cambiarlo para que quede tal cual se muestra en las lneas anteriores. Aqu diferenciamos claramente que al momento de identificar una huella seleccionamos todas las huellas de la base de datos (que posteriormente compararemos una por una con la que tenemos actualmente para identificar a quin pertenece dicha huella), pero al momento de verificar solamente tomamos un registro de huella filtrando con el nombre de la persona a quien pertenece. Todo perfectamente claro? Ok. Sigamos con el cdigo que va a realizar la primera funcin: Verificar.

/** * Verifica la huella digital actual contra otra en la base de datos */ public void verify(String nom) { try { //Obtiene la plantilla correspondiente a la persona indicada verificarStmt.setString(1,nom); ResultSet rs = verificarStmt.executeQuery(); //Si se encuentra el nombre en la base de datos if (rs.next()){ //Lee la plantilla de la base de datos byte templateBuffer[] = rs.getBytes("huehuella"); //Crea una nueva plantilla Template referenceTemplate = new Template(templateBuffer); //compara las plantilas (actual vs bd) boolean coinciden = fingerprintSDK.verify(template,referenceTemplate); //Si corresponden, dibuja el mapa de correspondencia y lo indica con un mensaje if (coinciden){ ui.showImage(GrFingerJava.getBiometricImage(templat e, fingerprint, fingerprintSDK)); JOptionPane.showMessageDialog(ui, "Las huellas s coinciden"); } else { //De no ser as lo indica con un mensaje JOptionPane.showMessageDialog(ui, "No corresponde la huella con "+nom, "Error", JOptionPane.ERROR_MESSAGE); }

//Si no encuentra alguna huella correspondiente //al nombre lo indica con un mensaje } else { JOptionPane.showMessageDialog(ui, "No existe el registro de "+nom, "Error", JOptionPane.ERROR_MESSAGE); } } catch (SQLException e) { e.printStackTrace(); } catch (GrFingerJavaException e) { e.printStackTrace(); } } Al realizar lo anterior es posible que necesites importar algunas clases como java.sql.ResultSet para que todo funcione correctamente. Ahora solo se debe de agregar una llamada al mtodo verificar() desde el botn de Verificar en la clase interfaz.PantallaPrincipal, para realizarlo correctamente se debe dar doble clic sobre el botn y posteriormente agregar el cdigo dentro del mtodo creado de tal manera que quede as... private void btnVerificarActionPerformed(java.awt.event.ActionEvent evt) { String nombre = JOptionPane.showInputDialog("Nombre a verificar:"); procedimientosSDK.verify(nombre); }

Si corremos la aplicacin tras realizar lo anterior podremos verificar la huella capturada actualmente contra otra en la base de datos y el sistema nos indicar si la huella coincide o no... Hasta aqu le dejamos en esta parte, si le has entendido correctamente a la lgica del cdigo no te ser difcil crear el mtodo de identificar(), si lo deseas, puedes esperar a la prxima entrega en la cual lo explicar paso a paso.

Programando el lector de huella digital en Java. Parte 5.


Despus de una larga espera seguimos con el tutorial en su quinta parte (si no has ledo las partes uno, dos, tres y cuatro te recomiendo que lo hagas antes de continuar). En este caso toca el turno a la identificacin de personas por medio de su huella digital. Hasta el momento ya tenemos resueltas las funciones para guardar y verificar as que falta poco para culminar con las funciones bsicas. Recordemos que todos los procedimientos los estamos realizando en la clase procedimientos.Util as que vayamos a dicha clase y creamos un mtodo de nombre identificarPersona() que no recibe argumentos de ningn tipo, en un principo quedar de la siguiente manera: ?

/** * Identifica a una persona registrada por medio de su huella digital

2 3 4 5 6

*/ public void identificarPersona(){ }

Ya que tenemos la definicin del mtodo debemos de brindarle un comportamiento pero para decirle qu hacer primero debemos entenderlo. Para identificar una persona se necesita tomar una muestra de la huella digital y posteriormente compararla con todas aquellas entre las cuales se encuentra la persona, en este caso, entre todas las huellas registradas, si encontramos un registro que coincida entonces tenemos a la persona que buscamos. En cdigo se traduce a lo siguiente: Primero obtenemos todas las huellas de la base de datos... ?

ResultSet rsIdentificar = identificarStmt.executeQuery();

...posteriormente iteramos a travs de todos los resultados... ?

while(rsIdentificar.next()){

...en cada iteracin obtenemos la plantilla de la huella almacenada... ?

byte templateBuffer[] = rsIdentificar.getBytes("huehuella");

...y la creamos para posteriormente utilizarla... ?

Template referenceTemplate = new Template(templateBuffer);

...ya que tenemos la plantilla de la base de datos la comparamos con la actual almacenando el resultado de la comparacin en una variable... ?

boolean coinciden = fingerprintSDK.verify(template,referenceTemplate);

...si coinciden hacemos lo pertinente y rompemos el ciclo de iteracin y lo cerramos...

1 2 3 4 5 6 7

if (coinciden){ ui.showImage(GrFingerJava.getBiometricImage(template, fingerprint, fingerprintSDK)); JOptionPane.showMessageDialog(ui, "La huella es de "+rsIdentificar.getString("huenombre")); return; } }

? ...si hemos buscado en todas las huellas y no se encuentra se lo indicamos al usuario... ?

JOptionPane.showMessageDialog(ui, "No existe ningn registro que coincida con la huella.");

...y listo! Al finalizar debemos de encerrar el cdigo entre algunos try-catch para evitar errores al momento de compilar, el mtodo completo queda as: ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

/** * verifica la huella digital actual contra otra en la base de datos */ public void identificarPersona() { try { //Obtiene todas las huellas de la bd ResultSet rsIdentificar = identificarStmt.executeQuery(); //Si se encuentra el nombre en la base de datos while(rsIdentificar.next()){ //Lee la plantilla de la base de datos byte templateBuffer[] = rsIdentificar.getBytes("huehuella"); //Crea una nueva plantilla Template referenceTemplate = new Template(templateBuffer); //compara las plantilas (actual vs bd) boolean coinciden = fingerprintSDK.verify(template,referenceTemplate);

//Si encuentra correspondencia dibuja el mapa //e indica el nombre de la persona que coincidi. if (coinciden){ ui.showImage(GrFingerJava.getBiometricImage(template, fingerprint, fingerpri JOptionPane.showMessageDialog(ui, "La huella es de "+rsIdentificar.getString return; } }

24 25 26 27 28 29 30 31 32 33 34 35 36 37

//Si no encuentra alguna huella que coincida lo indica con un mensaje JOptionPane.showMessageDialog(ui, "No existe ningn registro que coincida con la hue } catch (SQLException e) { e.printStackTrace(); } catch (GrFingerJavaException e) { e.printStackTrace(); } }

Posteriormente lo nico que debemos hacer es mandarlo llamar desde el botn de 'Identificar' y listo! hemos terminado con las 3 funciones principales de un sistema de identificacin de huellas digitales, solo necesitas adaptar estos mtodos a tu aplicacin y tendrs funcionalidad total. Este proyecto se seguir implementando en el transcurso de los das y tambin bajo la supervisin del docente encargado del curso. Gracias

Вам также может понравиться