Programación de un lector de huella digital en Java. Parte 4.

Anteriormente hemos visto cómo capturar y guardar huellas digitales en una base de datos en MySQL (si no sabes a lo que me refiero lee las partes UnoDos  y Tres  de este tutorial) ahora toca el turno a la verificación de una identidad por medio de la huella e identificación de una persona.

Antes de continuar cabe aclarar(y diferenciar) a lo que me refiero con verificación identificación:

  • Verificación: 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 Pérez y lo confirmo con mi huella digital.
  • Identificación: Es el corroborar la identidad de una persona utilizando solamente su huella digital, por ejemplo: coloco mi huella digital y el sistema automáticamente sabe que soy Juan Pérez.

Una vez aclarado lo anterior, procedamos pues a analizarlo en base al código que hemos agregado para las consultas en la parte 3 del tutorial

Anteriormente agregamos un método de nombre initDB() que es por medio del cual se inicializa la conexión y se preparan las consultas a la base de datos, dicho método tiene, entre otras cosas, las siguientes líneas:
                  
           identificarStmt   = dbConnection.prepareStatement("SELECT * FROM somhue");
           verificarStmt     = dbConnection.prepareStatement("SELECT huehuella FROM somhue WHERE huenombre=?");

Nota: anteriormente en la sentencia identificarStmt se tenía huehuella en lugar de *, para fines de esta aplicación debemos de cambiarlo para que quede tal cual se muestra en las líneas 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 quién 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 código que va a realizar la primer función: 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(template, 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 método verificar() desde el botón de Verificar en la clase interfaz.PantallaPrincipal, para realizarlo correctamente se debe dar doble clic sobre el botón y posteriormente agregar el código dentro del método 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 aplicación 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 lógica del código no te será difícil crear el método de identificar(), si lo deseas, puedes esperar a la próxima entrega en la cual lo explicaré paso a paso.

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

****Actualización (08/08/2012)****
A petición de todos les dejo la lista de todos los artículos de este tutorial.

16 comentarios:

  1. Anónimo dijo...:

    buenos dias eh estado siguiendo estos tutoriales para incluir un lector de huella digital por otra parte yo tengo poco programando en java y me gustaria saber cuadno publicas la parte donde hace la identificacion de l ahuella digital

  1. Anónimo dijo...:

    Hola, he seguido los pasos, pero me sale el siguiente error:

    License not found or read error


    esto paso despues que tuve que formatear el equipo, probe en otro pc y pasó lo mismo.

    Desde ya muchas gracias

  1. Monillo007 dijo...:

    Qué tal,

    El error que mencionas es por que la licencia del sdk de griaule no está colocada en el directorio correcto, te sugiero que lo cheques y verifiques que se encuentre donde se menciona en la primera parte del tutorial.

    saludox

  1. Anónimo dijo...:

    Muchas gracias por tu respuesta, con respecto al tema, sigo con el mismo problema, he seguido al pie de la letra la primera parte del tutorial.

    Saludos

  1. JORAM dijo...:
    Este comentario ha sido eliminado por el autor.
  1. Anónimo dijo...:

    Hola Monillo007,
    Estoy leyedo todo el tutorial antes de empezar y queria consultarte, como es que se comportaria la busqueda si no se coloca el identificador previo de la persona? y hay 300,000 posibilidades? Cuanto podria demorar la busqueda?

    Gracias por tu respuesta y el aporte,

    Rocio.

  1. Monillo007 dijo...:

    Qué tal Rocio,

    Te comento que de acuerdo a la información que Griaule proporciona, el SDK puede realizar hasta 35,000 comparaciones por segundo, por lo tanto, una búsqueda como la que comentas tardaría aproximadamente 8.5 segundos.

    Recuerda que mucho tiene que ver el ancho de banda de la red (en caso de que se maneje de esta manera) y la velocidad del motor de base de datos.

    Espero haberte ayudado. Saludox.

  1. rjpunisher dijo...:

    hola amigo que mas como estas espero que bien, la verda tu ejemplo me ha servido de mucho y he hecho maravillas con eso, solamente tengo una duda, como puedo hacer para que se haga una identificacion? que apenas la persona coloque el dedo lo busque en la base de datos?

  1. Anónimo dijo...:

    Te felicito y agradezco tan simple y completo tutorial


    Julio Berrios CHILE

  1. Anónimo dijo...:

    Oye carnal yo tengo un proyecto que realizar pero la verdad ni se como empezarlo tambien es sobre el chequeo de entradas y salidas pero de docentes por medio de huella dactilar te agradeceria si me pasas el codigo para ver como empesarlo como veo que manejas java pues ojala me hagas ese favor de verdad te lo agradeceria mi mail es miclo1103@yahoo.com

  1. Ppillo dijo...:

    Para la comparación que menciona Rocio, que sugieres hacer? una aplicación en la parte del servidor que este corriendo y cuando llegue un template lo compare¿? obvio es ilogico mandar el arreglo de 300 mil templates, por ancho de banda y la seguridad. Tienes algun desarrollo en la parte del server?

    Saludos pp

  1. Monillo007 dijo...:

    Ppillo,

    Justamente la solución tendría que ver con lo que mencionas, en mi caso, desarrollé un webservice que se encargara de realizar todo el trabajo pesado y solamente retornara si la huella coincide con la que busco o no. Como te imaginarás, mediante esta técnica se mejora considerablemente el rendimiento de la aplicación.

    Saludox.

  1. Anónimo dijo...:

    Hola Luis, sabras cuales son los eventos del lector?? esque no quiero crear un boton "identificar", quiero que el lector despues de haber tomado mi huella llame al metodo identificarPersona();

  1. Luis Navarro dijo...:

    Qué tal,

    Para mayor referencia puedes consultar la documentación del SDK en la carpeta de instalación (...\Griaule\Fingerprint SDK Java 2007\doc\javadoc). De cualquier manera te digo que los métodos que te sirven son onFingerDown() y onFingerUp() para detectar cuando se coloca y retira un dedo del lector respectivamente.

    Saludos.

  1. Anónimo dijo...:

    Luis creo que ya encontre la solución para no crear un boton "identificar", mira hice lo siguiente:

    public void onFingerUp(String idSensor) // evento que se genera al levantar el dedo del lector
    {
    identificarPersona();
    }

    en el metodo onFingerUp(String idsensor) mando llamar a identificarPersona();
    no me ha mostrado ningun error hasta ahora. Saludos.

  1. Anónimo dijo...:

    Saludos !!!!!
    estoy utilizando un lector de huella SUPREMA, en esta linea me da error:

    import com.suprema.ufe33.BioMiniJniSDK;

    donde puedo conseguir este paquete??? porq no lo tengo instalado..

    Agradezco su ayuda.!

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

 
Monillo007 © 2010 | Designed by Trucks, Manual Bookmarking | Elegant Themes