Poryecto Biometrico

Programación de un lector de huella digital en Java. Parte 1. Como ya lo he mencionado anteriormente, en la actualidad

Views 69 Downloads 0 File size 333KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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

Como ya lo he mencionado anteriormente, en la actualidad la seguridad en las transacciones electrónicas se ha vuelto una parte indispensable para los programadores de sistemas, la identificación para el acceso a los registros y demás 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 biometría juega un papel sumamente interesante (más información sobre la biometría en éste artículo) así que dedicaré una serie de artículos a tratar de explicar cómo programar un lector de huella digital en Java utilizando algunas herramientas y API's que nos permitirán realizar todos los procedimientos sin ningún problema. Primeramente hablaré de lo que necesitamos para poder empezar a programar un sistema completo de registro y verificación de identidades por medio de la huella digital:  

  

El JRE (Java Runtime Environment) más reciente, al momento de la publicación de este artículo es la 1.6.7. IDE de programación NetBeans en su versión más reciente, al momento de publicar este artículo es la 6.1. Cabe mencionar que el vínculo 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 programación 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 instalación del API de programación de Griaule (asumo que el NetBeans y el servidor MySQL ya están instalados y funcionando sin problemas). Instalación del API de programación de Griaule:: Una vez que hemos descargado el API tendremos un archivo llamado Fingerprint_SDK_Java_2007_Installer.jar, para comenzar la instalación 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 términos 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. Después de la ruta de instalación se debe elegir los elementos que se instalarán, de igual manera se deja todo marcado y se da clic en Siguiente.

5. Posteriormente se instalan los elementos seleccionados, dejando al final la instalación del controlador. NOTA: Es de suma importancia tomar en cuenta que antes de la instalación del lector de huella digital, este se debe de tener desconectado y de preferencia desinstalar el software y controladores que venían con él de fábrica para evitar conflictos durante la actual instalación. 6. Ahora aparece una pantalla para seleccionar el idioma de la instalación del controlador, de igual manera se elige el que más convenga. 7. Después aparece la pantalla de bienvenida...

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

... y se da clic en Siguiente o Next. 12. Al final se da clic en el botón Done para culminar. Una vez terminada la instalación del API se puede conectar el lector para terminar su instalación. Conectar el lector de huella digital:: Ahora continuemos con lo siguiente: 1. 2. 3. 4.

Se conecta el lector de huella digital. Aparece el Asistente para Nuevo Hardware de Windows. Se selecciona No por el momento y se da clic en Siguiente. Después se elige Instalar automáticamente el software recomendado y se da clic en siguiente. 5. Se espera a que termine la instalación, 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 instalación. Preparación de las librerías y archivos necesarios:: Una vez que se tiene todo lo anterior correctamente instalado y configurado se deben de preparar las librerías y los archivos colocándolos en los directorios que deben de estar, para ello se realiza lo siguiente: 1. Se abre la carpeta de las librerías del API, si se ha dejado por defecto aparecerá en C:\Archivos de programa\Griaule\Fingerprint SDK Java 2007\bin 2. Se copia el archivo grfingerjava.jar hacia las carpetas C:\Archivos de programa\Java\ jdk*\jre\lib\ext (donde jdk* es la versión que tienes instalada, si tienes varias se puede colocar en todas) y en la carpeta C:\Archivos de programa\Java\ jre*\lib\ext (donde jre* es la versión más reciente).

3. Se seleccionan y se copian todos los archivos .dll que se encuentran en la carpeta de las librerías del API y se pegan en C:\Windows\System32 Preparación de la base de datos:: Ya realizados los pasos anteriores únicamente nos falta crear una base de datos que almacene los registros de las huellas, en este caso prepararemos dentro de dicha base una tabla sencilla que contenga únicamente 3 datos, un ID, el nombre de la persona y la huella registrada. Para efectos de este ejemplo usaremos una base de datos de nombre huellas y una tabla dentro de dicha base de nombre somhue que contendrá los datos descritos a continuación: 1. Nombre de campo: ID , tipo: INT (autoincrement) 2. Nombre de campo: huenombre , tipo: VARCHAR(100) 3. Nombre de campo: huehuella , tipo: BLOB Ya tenemos todo para comenzar a programar nuestra aplicación de reconocimiento de huella digital pero eso lo dejaremos para la siguiente parte. ¿Alguna duda o algo qué decir? Deja tu comentario. ****Actualización (08/08/2012)**** A petición de todos les dejo la lista de todos los artículos de este tutorial.     

Parte 1: http://monillo007.blogspot.com/2008/08/programacin-de-un-lector-dehuella.html Parte 2: http://monillo007.blogspot.com/2008/08/programacin-de-un-lector-dehuella_20.html Parte 3: http://monillo007.blogspot.com/2008/09/programacin-de-un-lector-dehuella.html Parte 4: http://monillo007.blogspot.com/2008/09/programacin-de-un-lector-dehuella_03.html Parte 5: http://monillo007.blogspot.com/2008/10/programacin-de-un-lector-dehuella.html

Ligas de descarga: JRE - http://www.java.com/en/download/manual.jsp Griaule - http://www.griaulebiometrics.com/page/en-us/downloads NetBeans - http://download.netbeans.org/netbeans/6.1/final/ MySQL - http://dev.mysql.com/downloads/mysql/5.1.html

Programación de un lector de huella digital en Java. Parte 2. Continuando con la programación de un lector de huella digital en Java procederemos en este caso ya directamente con el código, la entrega anterior se refirió meramente a la preparación del entorno para el desarrollo, si no la has leído te recomiendo verificarla, entenderla y realizarla primero antes de proceder con esto ya que de lo contrario no funcionará la aplicación.

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 definición 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, IImageEventListener, IFingerEventListener{ . .

5. Al implementar dichas interfaces nos pedirán implementar todos sus métodos abstractos, lo hacemos dando un clic en el foco que aparece del lado izquierdo y seleccionando "Implement all abstract methods" lo cual generará la implementación de 5 métodos (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) genera al levantar el dedo del lector

// evento que se

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 métodos 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 GrFingerJava y GrFingerJavaException... import com.griaule.grfingerjava.GrFingerJava; import com.griaule.grfingerjava.GrFingerJavaException; Los demás métodos que se implementaron deben de quedar vacíos (por el momento). 7. Ahora creamos un método estático que nos permita establecer el directorio de las librerías del SDK /** * Establece el directorio donde se ubican las librerías 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 después de la definición de la clase: /**Contexto utilizado para la captura, extracción 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 extraída automáticamente*/ 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;' aún 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 decir btnVerificar, 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 código 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 método. 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 método 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 aplicación. e.printStackTrace(); System.exit(1); } } 15. Ahora trabajaremos con la clase PantallaPrincipal, lo que haremos es crear un método 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 aplicación y se realiza la inicialización de la clase * que contiene los procedimientos principales. **/ public void inicializar() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClas sName()); } 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 método inicializar() dentro del constructor de la clase y antes del método initComponents() de tal manera que quede así: /* Crea una nueva forma de PantallaPrincipal */ public PantallaPrincipal() { inicializar(); initComponents(); }

17. Ahora hacemos un método para crear el contenedor de la imagen de la huella digital, en los comentarios se va explicando las funciones de cada línea... /** * 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 método 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 tamaño y posición de la imagen para ser pintada //el tamaño es ajustado para que ocupe todo el tamaño del panel Insets insets = getInsets(); int transX = insets.left; int transY = insets.top; int width = getWidth() getInsets().right - getInsets().left; int height = getHeight() getInsets().bottom - getInsets().top; //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 import import import import import

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

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

... lo cual nos llevará a la vista de código de la clase, dentro del método formWindowActivated, ahí agregamos el código de manera que quede de la siguiente forma: private void formWindowActivated(java.awt.event.WindowEvent evt) { this.panelContenedor.add(crearPanelHuella()); } 19. Ahora creamos el método showImage que nos permitirá mostrar la imagen capturada por el lector en el panel correspondiente. El método debe quedar de la siguiente manera: /** * Método 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 código correspondiente al método onImageAcquired que se ha creado al implementar las interfaces, el método debe quedar así:

/** * Este método 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 PantallaPrincipal agregamos las siguientes 3 líneas: /*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 ActionPerformed del botón 'Salir' dando clic derecho sobre él en vista de diseño y seleccionando Events -> Action -> ActionPerformed y dentro del código generado agregamos el método dispose(); 23. Para que nuestro programa pueda ejecutarse necesitamos mandarlo llamar desde la clase main, en este caso además de llamar a la ventana se necesita establecer el directorio de las librerías, en conjunto, el método main de la clase main debe quedar así: public static void main(String[] args) { String grFingerNativeDirectory = new File(".").getAbsolutePath(); Util.setFingerprintSDKNativeDirectory(grFingerNativeDirecto ry); PantallaPrincipal p = new PantallaPrincipal(); } Una vez hecho esto podemos correr la aplicación con F6 y verificar que realmente funcione, si has realizado los pasos tal cual podrás, hasta este momento, activar el lector de huellas y obtener la lectura de la huella que se ha colocado en el lector, aún nos falta especificar cómo verificar, identificar y guardar las huellas pero eso lo dejaremos para la próxima entrega.

¿Alguna duda o algo qué decir? Deja tu comentario. ****Actualización (08/08/2012)**** A petición de todos les dejo la lista de todos los artículos de este tutorial.     

Parte 1: http://monillo007.blogspot.com/2008/08/programacin-de-un-lector-dehuella.html Parte 2: http://monillo007.blogspot.com/2008/08/programacin-de-un-lector-dehuella_20.html Parte 3: http://monillo007.blogspot.com/2008/09/programacin-de-un-lector-dehuella.html Parte 4: http://monillo007.blogspot.com/2008/09/programacin-de-un-lector-dehuella_03.html Parte 5: http://monillo007.blogspot.com/2008/10/programacin-de-un-lector-dehuella.html

ENTRART http://monillo007.blogspot.com/2008/08/programacin-de-unlector-de-huella_20.html LINK http://monillo007.blogspot.com/2008/08/programacin-de-un-lector-de-huella.html