Slider Image

  • Google Chrome

    Tips, extensiones y trucos para aprovechar al máximo tu navegador Chrome

  • HTML5

    Conoce la nueva versión del lenguaje de programación web por excelencia

  • Java

    Aprende a programar en Java con tutoriales paso a paso, cubriendo desde lo más básico hasta lo más especializado

  • NetBeans

    Conoce este completo IDE para desarrollar en diversos lenguajes, aprende trucos y conceptos que te facilitarán la codificación de cualquier tipo de software

  • Linux

    ¿Eres linuxero o deseas serlo? Hay una sección especialmente para ti.

  • Ahora Mis Ojos Te Ven

    Echa un vistazo a mi nuevo blog 'Ahora Mis Ojos Te Ven' y no dudes en dejarme tu opinión.

Divertidas frases geek

Algunas divertidas frases geek que he encontrado en CodigoGeek.com, si logras entender más de una seguramente tienes algo de geek en la sangre...
  • "La caja decia "Requiere Win95 o superior. Asi que instale Linux."
  • "La gente dice que si pones un CD de WinXP al reves, escuchas voces satanicas. Pero eso no es nada! Si lo pones normal, te instala Windows."
  • "Nunca te burles de los Geeks. Un dia seran tus jefes."
  • "Si no sabes como hacer algo, entonces tampoco sabes como hacerlo en una computadora."
  • "Me gustaria cambiar el mundo pero lamentablemente, no me dieron el codigo fuente."
  • "El fracaso no es una opcion. Viene embedido en Windows."
  • "Use lo mejor… Linux para Servidores, Mac para graficos, Palm para Mobilidad y Windows para Solitario"
  • "Windows ha detectado que no tiene conectado un teclado. Presione F9 para continuar…"

¿Algo qué decir? Deja tu comentario. Saludox.

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.

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


Siguiendo con el tutorial para la programación de un lector de huellas en Java (si no has leído la parte 1 y parte 2 te recomiendo hacerlo antes de proceder) en este caso explicaré cómo 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 código.

Recapitulando...

  • Se tienen únicamente 3 clases en el proyecto: la clase ejemplolectorhuellas.Maininterfaz.PantallaPrincipal procedimientos.Util, donde Main es a través de la cual se arranca el programa, PantallaPrincipal 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 continúa con los siguientes pasos, de lo contrario regresa a las partes anteriores y verifíca que no tengas errores en la codificación.

Agregar los objetos para las consultas en procedimientos.Util::

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

   /**Conexión a la base de datos*/
   private Connection dbConnection;
   
   /**Consultas preparadas**/
   private PreparedStatement guardarStmt;
   private PreparedStatement identificarStmt;
   private PreparedStatement verificarStmt;

Los objetos anteriores se utilizarán para crear la conexión a la base de datos y realizar consultas en la misma, para poder realizar lo anterior debemos de crear un par de métodos como se muestran a continuación:

   /**
    * Inicializa la conexión 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","usuario", "contrasena");

           Statement stm = dbConnection.createStatement();
           
           //Prepara las consultas/sentencias que se utilizarán
           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 conexión 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 conexión a la  base
           dbConnection.close();
           
       } catch (Exception e) {
           e.printStackTrace();
       }        
   }

Las partes en rojo deben ser remplazadas por aquellas que correspondan a tu configuración del servidor MySQL. Una vez que tenemos la conexión 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 método 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 conexión a la BD.
       initDB();
       
}

Antes de poder guardar la huella (o la información de la huella) en la base de datos debemos de extraer el llamado Template o plantilla de la huella que es una representación matemática 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 quién 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 muchísimo más 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 método 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,fingerprint));            
       } catch (GrFingerJavaException e) {
           e.printStackTrace();
       }
       
   }

Ya que hemos creado el método extract() basta con mandarlo llamar desde el método 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 líneas verdes sobre la misma, dichas líneas son la representación de la plantilla que hemos extraído.

Ahora viene la parte donde guardamos la plantilla de la huella en la base de datos. Lo primero que hacemos es agregar el método guardarHuella() 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 método guardarHuella() por medio del botón Guardar que aparece en la pantalla principal, para ello nos situamos en la pantalla principal y damos doble clic sobre el botón Guardar lo cual automáticamente nos crea el método que se efectúa al presionar el botón, ahora solo basta mandar llamar el método 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 botón Guardar podremos almacenar los datos de la huella digital en la base de datos y, posteriormente, podremos realizar operaciones de comparación y verificación de identidades, pero esto lo dejaremos para la siguiente entrega.

¿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.

Estadísticas Agosto '08

Un poquito tarde pero aquí están las estadísticas de Agosto '08...

Totales::
Total de Páginas vistas: 11,344 (-5.15%)
Visitas únicas: 7,446
 (-7.65%)
Visitas de usuarios nuevos: 6,563

Visitas de usuarios recurrentes: 883
 

El más::
Día con más visitas: 19 de Agosto con 319 visitas

Artículo más leído: Temas (skins) gratis para Motorota Z3 RIZR visto 
2,230 veces
Máximo número de usuarios On-Line
8 usuarios el 5, 18, 29 de Agosto 

Top 
Paíces::
1. México con 
2,380 visitas
2. 
España con 835
 visitas
3. Colombia 
con 791 
visitas

Top 
Navegadores::
1. Internet Explorer con 4,503
  visitas
2. 
Firefox con 
2,699 visitas
3. 
Opera con 130
 visitas

Fuentes de las visitas::
1.- Motores de búsqueda 
83.70
% (6,232 visitas)
2.- 
Referido por otros sitios  
9.58
% (713 visitas)
3.- 
Tráfico directo 
6.73% (501 visitas)


Algo que decir? Deja tu comentario. Saludox.


Fuente | 
GoogleAnalytics


Google Chrome listo para su descarga



Google Chrome, el nuevo, potente y ágil navegador de Google (que además es de código abierto) está listo para su descarga. Veremos de qué es capaz. Algunos dicen que se parece visualmente a Safari, pero bueno, hay que probar para opinar.

Liga de descarga: http://www.google.com/chrome/eula.html

¿Algo qué decir? Deja tu comentario.

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