Proyecto Huella Digital en Java con SDK DigitalPersona

Buen día queridos lectores, como les prometi hace unos días, hoy les hago entrega del proeycto Huella Digital en Java utilizando el SDK de DigitalPersona, cabe recordar que éste SDK es gratuito y puede ser descargado directamente en la web del proveedor.

La base de datos utilizada es mySQL Server 5.1 y pueden utilizar el mismo diseño que utilizamos con el proyecto de Huella Digital con el SDK de Griaule Biometrics presentado en días pasados.

Archivo ConexionBD.java

/**
* @package: BD
* @class: ConexionBD
* @author: Napster2011
* @version: 1.0
*/
package BD;
/**
* @librerias importadas
* @author: Napster2011
*/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class ConexionBD {
/**
*    @atributos
*    @author: Napster2011
*  @access: public
*/
public  String puerto=”3306″;
public  String nomservidor=”localhost”;
public  String db=”huellas”;
public  String user=”root”;
public  String pass=”1nn0v4c10N.”;
Connection conn=null;

/**
*    @function: conectar
*    @author: Napster2011
*  @description: esta funcion se encarga de conectar la base de datos con el servidor
*  @access: public
*  @return
*/
public Connection conectar(){
try{
String ruta=”jdbc:mysql://”;
String servidor=nomservidor+”:”+puerto+”/”;
Class.forName(“com.mysql.jdbc.Driver”);
conn = DriverManager.getConnection(ruta+servidor+db,user,pass);
if (conn!=null){
System.out.println(“Conección a base de datos listo…”);
}
else if (conn==null){
throw new SQLException();
}
}
catch(SQLException e){
JOptionPane.showMessageDialog(null, e.getMessage());
}
catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(null, “Se produjo el siguiente error: “+e.getMessage());
}
catch (NullPointerException e){
JOptionPane.showMessageDialog(null, “Se produjo el siguiente error: “+e.getMessage());
}
finally{
return conn;
}
}

/**
*    @function: desconectar
*    @author: Napster2011
*  @description: esta funcion se encarga de realizar la desconexion de la base de datos con el servidor
*  @access: public
*  @return
*/
public void desconectar(){
conn = null;
System.out.println(“Desconexion a base de datos listo…”);
}
}

Archivo CapturaHuella.java

/**
* @package: Formularios
* @class: CapturaHuella
* @author: Napster2011
* @version: 1.0
*/
package Formularios;
/**
* @librerias importadas
* @author: Napster2011
*/
import BD.ConexionBD;
import com.digitalpersona.onetouch.*;
import com.digitalpersona.onetouch.capture.DPFPCapture;
import com.digitalpersona.onetouch.capture.event.*;
import com.digitalpersona.onetouch.processing.DPFPEnrollment;
import com.digitalpersona.onetouch.processing.DPFPFeatureExtraction;
import com.digitalpersona.onetouch.processing.DPFPImageQualityException;
import com.digitalpersona.onetouch.verification.DPFPVerification;
import com.digitalpersona.onetouch.verification.DPFPVerificationResult;
import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

public class CapturaHuella extends javax.swing.JDialog {
/**
*    @function: CapturaHuella
*    @author: Napster2011
*  @description: funcion constructora de la clase
*  @access: public
*  @return
*/
public CapturaHuella() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
JOptionPane.showMessageDialog(null, “Imposible modificar el tema visual”, “Lookandfeel inválido.”,
JOptionPane.ERROR_MESSAGE);
}
initComponents();
txtArea.setEditable(false);
}
/**
*    @function:
*    @author: Napster2011
*  @description: Funciones privadas de la clase, generadas automaticamente por el sistema
*  @access: public
*  @return
*/

@SuppressWarnings(“unchecked”)
// <editor-fold defaultstate=”collapsed” desc=”Generated Code”>
private void initComponents() {

panHuellas = new javax.swing.JPanel();
jPanel1 = new javax.swing.JPanel();
lblImagenHuella = new javax.swing.JLabel();
panBtns = new javax.swing.JPanel();
jPanel2 = new javax.swing.JPanel();
btnSalir = new javax.swing.JButton();
btnIdentificar = new javax.swing.JButton();
btnGuardar = new javax.swing.JButton();
jPanel4 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
txtArea = new javax.swing.JTextArea();
jPanel3 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle(“Huellas Dactilares “);
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});

panHuellas.setBorder(javax.swing.BorderFactory.createTitledBorder(null, “Huella Digital Capturada”, javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION));
panHuellas.setPreferredSize(new java.awt.Dimension(400, 270));
panHuellas.setLayout(new java.awt.BorderLayout());

jPanel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
jPanel1.setLayout(new java.awt.BorderLayout());
jPanel1.add(lblImagenHuella, java.awt.BorderLayout.CENTER);

panHuellas.add(jPanel1, java.awt.BorderLayout.CENTER);

getContentPane().add(panHuellas, java.awt.BorderLayout.NORTH);

panBtns.setBorder(javax.swing.BorderFactory.createTitledBorder(null, “Acciones”, javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION));
panBtns.setPreferredSize(new java.awt.Dimension(400, 190));
panBtns.setLayout(new java.awt.BorderLayout());

jPanel2.setPreferredSize(new java.awt.Dimension(366, 90));

btnSalir.setText(“Salir”);
btnSalir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnSalirActionPerformed(evt);
}
});

btnIdentificar.setText(“Identificar”);
btnIdentificar.setPreferredSize(new java.awt.Dimension(71, 23));
btnIdentificar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnIdentificarActionPerformed(evt);
}
});

btnGuardar.setText(“Guardar”);
btnGuardar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnGuardarActionPerformed(evt);
}
});

javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(61, 61, 61)
.addComponent(btnIdentificar, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(26, 26, 26)
.addComponent(btnGuardar, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel2Layout.createSequentialGroup()
.addGap(149, 149, 149)
.addComponent(btnSalir, javax.swing.GroupLayout.PREFERRED_SIZE, 128, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(77, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addGap(11, 11, 11)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(btnGuardar, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(btnIdentificar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(btnSalir, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

panBtns.add(jPanel2, java.awt.BorderLayout.NORTH);

jPanel4.setLayout(new java.awt.BorderLayout());

txtArea.setColumns(20);
txtArea.setFont(new java.awt.Font(“Lucida Sans”, 1, 10)); // NOI18N
txtArea.setRows(5);
jScrollPane1.setViewportView(txtArea);

jPanel4.add(jScrollPane1, java.awt.BorderLayout.CENTER);

panBtns.add(jPanel4, java.awt.BorderLayout.CENTER);

jPanel3.setPreferredSize(new java.awt.Dimension(366, 20));

jLabel1.setFont(new java.awt.Font(“Tahoma”, 3, 10)); // NOI18N
jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
jLabel1.setText(“Ingeniero Napster2011”);

javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
.addContainerGap(299, Short.MAX_VALUE)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addComponent(jLabel1)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);

panBtns.add(jPanel3, java.awt.BorderLayout.SOUTH);

getContentPane().add(panBtns, java.awt.BorderLayout.SOUTH);

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-459)/2, (screenSize.height-499)/2, 459, 499);
}// </editor-fold>

private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}

private void btnIdentificarActionPerformed(java.awt.event.ActionEvent evt) {
try {
identificarHuella();
Reclutador.clear();
} catch (IOException ex) {
Logger.getLogger(CapturaHuella.class.getName()).log(Level.SEVERE, null, ex);
}
}

private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {
guardarHuella();
Reclutador.clear();
lblImagenHuella.setIcon(null);
start();
}

private void formWindowOpened(java.awt.event.WindowEvent evt) {
Iniciar();
start();
EstadoHuellas();
btnGuardar.setEnabled(true);
btnIdentificar.setEnabled(true);
btnSalir.grabFocus();
}

private void formWindowClosing(java.awt.event.WindowEvent evt) {
stop();
}

/**
*    @atributos
*    @author: Napster2011
*  @access: public y private
*/
//Varible que permite iniciar el dispositivo de lector de huella conectado
// con sus distintos metodos.
private DPFPCapture Lector = DPFPGlobal.getCaptureFactory().createCapture();

//Varible que permite establecer las capturas de la huellas, para determina sus caracteristicas
// y poder estimar la creacion de un template de la huella para luego poder guardarla
private DPFPEnrollment Reclutador = DPFPGlobal.getEnrollmentFactory().createEnrollment();

//Esta variable tambien captura una huella del lector y crea sus caracteristcas para auntetificarla
// o verificarla con alguna guardada en la BD
private DPFPVerification Verificador = DPFPGlobal.getVerificationFactory().createVerification();

//Variable que para crear el template de la huella luego de que se hallan creado las caracteriticas
// necesarias de la huella si no ha ocurrido ningun problema
private DPFPTemplate template;
public static String TEMPLATE_PROPERTY = “template”;

/**
*    @function: Iniciar
*    @author: Napster2011
*  @description: funcion encargada de inicializar el formulario
*  @access: public
*  @return
*/
protected void Iniciar(){
Lector.addDataListener(new DPFPDataAdapter() {
@Override public void dataAcquired(final DPFPDataEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
EnviarTexto(“La Huella Digital ha sido Capturada”);
ProcesarCaptura(e.getSample());
}
});
}
});

Lector.addReaderStatusListener(new DPFPReaderStatusAdapter() {
@Override public void readerConnected(final DPFPReaderStatusEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
EnviarTexto(“El Sensor de Huella Digital esta Activado o Conectado”);
}
});
}

@Override public void readerDisconnected(final DPFPReaderStatusEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
EnviarTexto(“El Sensor de Huella Digital esta Desactivado o no Conectado”);
}
});
}
});

Lector.addSensorListener(new DPFPSensorAdapter() {
@Override public void fingerTouched(final DPFPSensorEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
EnviarTexto(“El dedo ha sido colocado sobre el Lector de Huella”);
}
});
}

@Override public void fingerGone(final DPFPSensorEvent e) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
EnviarTexto(“El dedo ha sido quitado del Lector de Huella”);
}
});
}
});

Lector.addErrorListener(new DPFPErrorAdapter(){
public void errorReader(final DPFPErrorEvent e){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
EnviarTexto(“Error: “+e.getError());
}
});
}
});
}

/**
*    @atributos
*    @author: Napster2011
*  @access: public
*/
public DPFPFeatureSet featuresinscripcion;
public DPFPFeatureSet featuresverificacion;

/**
*    @function: ProcesarCaptura
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public void ProcesarCaptura(DPFPSample sample){
// Procesar la muestra de la huella y crear un conjunto de características con el propósito de inscripción.
featuresinscripcion = extraerCaracteristicas(sample, DPFPDataPurpose.DATA_PURPOSE_ENROLLMENT);

// Procesar la muestra de la huella y crear un conjunto de características con el propósito de verificacion.
featuresverificacion = extraerCaracteristicas(sample, DPFPDataPurpose.DATA_PURPOSE_VERIFICATION);

// Comprobar la calidad de la muestra de la huella y lo añade a su reclutador si es bueno
if (featuresinscripcion != null){
try{
System.out.println(“Las Caracteristicas de la Huella han sido creada”);
Reclutador.addFeatures(featuresinscripcion);// Agregar las caracteristicas de la huella a la plantilla a crear

// Dibuja la huella dactilar capturada.
Image image=CrearImagenHuella(sample);
DibujarHuella(image);

btnIdentificar.setEnabled(true);
}
catch (DPFPImageQualityException ex) {
System.err.println(“Error: “+ex.getMessage());
}

finally {
//EstadoHuellas();

// Comprueba si la plantilla se ha creado.
switch(Reclutador.getTemplateStatus()){
case TEMPLATE_STATUS_READY:    // informe de éxito y detiene  la captura de huellas
stop();
setTemplate(Reclutador.getTemplate());
EnviarTexto(“La Plantilla de la Huella ha Sido Creada, ya puede Verificarla”);
btnIdentificar.setEnabled(true);
btnGuardar.setEnabled(true);
btnGuardar.grabFocus();
break;

case TEMPLATE_STATUS_FAILED: // informe de fallas y reiniciar la captura de huellas
Reclutador.clear();
stop();
//EstadoHuellas();
setTemplate(null);
JOptionPane.showMessageDialog(CapturaHuella.this, “La Plantilla de la Huella no pudo ser creada, Repita el Proceso”, “Inscripcion de Huellas Dactilares”, JOptionPane.ERROR_MESSAGE);
start();
break;
}
}
}
}

/**
*    @function: extraerCaracteristicas
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public DPFPFeatureSet extraerCaracteristicas(DPFPSample sample, DPFPDataPurpose purpose){
DPFPFeatureExtraction extractor = DPFPGlobal.getFeatureExtractionFactory().createFeatureExtraction();
try {
return extractor.createFeatureSet(sample, purpose);
}
catch (DPFPImageQualityException e) {
return null;
}
}

/**
*    @function: CrearImagenHuella
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public Image CrearImagenHuella(DPFPSample sample) {
return DPFPGlobal.getSampleConversionFactory().createImage(sample);
}

/**
*    @function: DibujarHuella
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public void DibujarHuella(Image image) {
lblImagenHuella.setIcon(new ImageIcon(
image.getScaledInstance(lblImagenHuella.getWidth(), lblImagenHuella.getHeight(), Image.SCALE_DEFAULT)));
repaint();
}

/**
*    @function: EstadoHuellas
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public  void EstadoHuellas(){
EnviarTexto(“Muestra de Huellas Necesarias para Guardar Template “+ Reclutador.getFeaturesNeeded());
}

/**
*    @function: EnviarTexto
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public void EnviarTexto(String string) {
txtArea.append(string + “\n”);
}

/**
*    @function: start
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public void start(){
Lector.startCapture();
EnviarTexto(“Utilizando el Lector de Huella Dactilar “);
}

/**
*    @function: stop
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public void stop(){
Lector.stopCapture();
EnviarTexto(“No se está usando el Lector de Huella Dactilar “);
}

/**
*    @function: getTemplate
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public DPFPTemplate getTemplate() {
return template;
}

/**
*    @function: setTemplate
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public void setTemplate(DPFPTemplate template) {
DPFPTemplate old = this.template;
this.template = template;
firePropertyChange(TEMPLATE_PROPERTY, old, template);
}

/**
*    @global
*    @author: Napster2011
*/
ConexionBD con=new ConexionBD();

/**
*    @function: guardarHuella
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public void guardarHuella(){
//Obtiene los datos del template de la huella actual
ByteArrayInputStream datosHuella = new ByteArrayInputStream(template.serialize());
Integer tamañoHuella=template.serialize().length;

//Capturamos los datos del usuario
String cedula = JOptionPane.showInputDialog(“No. Identificacion:”);
try {
//Establece los valores para la sentencia SQL
Connection c=con.conectar(); //establece la conexion con la BD
PreparedStatement verificaCedulaUsuario = c.prepareStatement(“select identificacion_usuario, huella1_usuario from huella where (identificacion_usuario=?)”);
verificaCedulaUsuario.setInt(1, Integer.parseInt(cedula));
ResultSet rs = verificaCedulaUsuario.executeQuery();

if(rs.next()){
//Lee la plantilla de la base de datos
byte templateBuffer[] = rs.getBytes(2);
//Crea una nueva plantilla a partir de la guardada en la base de datos
DPFPTemplate referenceTemplate = DPFPGlobal.getTemplateFactory().createTemplate(templateBuffer);
//Envia la plantilla creada al objeto contendor de Template del componente de huella digital
setTemplate(referenceTemplate);

// Compara las caracteriticas de la huella recientemente capturda con la
// plantilla guardada al usuario especifico en la base de datos
DPFPVerificationResult result = Verificador.verify(featuresverificacion, getTemplate());

//compara las plantilas (actual vs bd)
if (result.isVerified()){
JOptionPane.showMessageDialog(null, “La huella ya existe, coloque un dedo diferente”);
}
else{
PreparedStatement guardarStmt2 = c.prepareStatement(“update huella set huella2_usuario=? where (identificacion_usuario=?)”);
guardarStmt2.setBinaryStream(1, datosHuella,tamañoHuella);
guardarStmt2.setInt(2,Integer.parseInt(cedula));

//Ejecuta la sentencia
guardarStmt2.execute();
guardarStmt2.close();
JOptionPane.showMessageDialog(null,”Huella Guardada Correctamente”);
}
}
else if(!rs.next()){
String nombre = JOptionPane.showInputDialog(“Nombre y Apellidos:”);
PreparedStatement guardarStmt = c.prepareStatement(“INSERT INTO huella(identificacion_usuario, nombres_usuario, huella1_usuario, huella2_usuario) values(?,?,?,”)”);
guardarStmt.setInt(1,Integer.parseInt(cedula));
guardarStmt.setString(2,nombre);
guardarStmt.setBinaryStream(3, datosHuella,tamañoHuella);
//Ejecuta la sentencia
guardarStmt.execute();
guardarStmt.close();
JOptionPane.showMessageDialog(null,”Huella Guardada Correctamente”);
}

//con.desconectar();
//btnGuardar.setEnabled(false);

}
catch (SQLException ex) {
//Si ocurre un error lo indica en la consola
System.err.println(“Error al guardar los datos de la huella.”);
}
/*finally{
con.desconectar();
}*/
}

/**
*    @function: identificarHuella
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public void identificarHuella() throws IOException{
try{
//Establece los valores para la sentencia SQL
Connection c=con.conectar();

//Obtiene todas las huellas de la bd
PreparedStatement identificarStmt = c.prepareStatement(“SELECT nombres_usuario, huella1_usuario FROM huella UNION ALL SELECT nombres_usuario, huella2_usuario FROM huella”);
//Obtiene todas las huellas de la bd
ResultSet rsIdentificar = identificarStmt.executeQuery();

//Si se encuentra el nombre en la base de datos
//byte templateBuffer[] = null;
int i=0;
while(rsIdentificar.next()){
i++;
System.out.println(“SQL:”+rsIdentificar.getString(1)+”\n”);
System.out.println(“Contador:”+i+”\n”);

byte templateBuffer[] = rsIdentificar.getBytes(“huella1_usuario”);
//Crea una nueva plantilla a partir de la guardada en la base de datos
DPFPTemplate referenceTemplate = DPFPGlobal.getTemplateFactory().createTemplate(templateBuffer);
//Envia la plantilla creada al objeto contendor de Template del componente de huella digital
setTemplate(referenceTemplate);

// Compara las caracteriticas de la huella recientemente capturda con la
// alguna plantilla guardada en la base de datos que coincide con ese tipo
DPFPVerificationResult result = Verificador.verify(featuresverificacion, getTemplate());

//compara las plantilas (actual vs bd)
//Si encuentra correspondencia dibuja el mapa
//e indica el nombre de la persona que coincidió.
if (result.isVerified()){
//crea la imagen de los datos guardado de las huellas guardadas en la base de datos
JOptionPane.showMessageDialog(null, “Bienvenido “+rsIdentificar.getString(“nombres_usuario”));
return;
}
}
//Si no encuentra alguna huella que coincida lo indica con un mensaje
JOptionPane.showMessageDialog(null, “No existe ningún registro que coincida con la huella.”);
}
catch (SQLException e) {
System.out.println(“Se produjo el siguiente error: “+e.getMessage());
e.printStackTrace();
}
/*finally{
con.desconectar();
}*/
}

/**
*    @function: main
*    @author: Napster2011
*  @description:
*  @access: public
*  @return
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new CapturaHuella().setVisible(true);
}
});
}

/**
*    @atributos
*    @author: Napster2011
*  @access: public y private
*/
// Variables declaration – do not modify
private javax.swing.JButton btnGuardar;
private javax.swing.JButton btnIdentificar;
private javax.swing.JButton btnSalir;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JLabel lblImagenHuella;
private javax.swing.JPanel panBtns;
private javax.swing.JPanel panHuellas;
private javax.swing.JTextArea txtArea;
// End of variables declaration
}

Espero que este proyecto les sea de mucha utilidad, la proxima entrega de la serie de Biometría en Java, estaré publicando la integración del proyecto de Huella Digital con la captura de imágenes a través de una cámara web, para llevar un control del ingreso de personal a nuestras instalaciónes de trabajo.

Napster2011

Para desargar los archivos en .Net, Java y C/C++ dar clic en cada uno de los siguientes enlaces, los archivos tienen extension .rar pero para poder publicarse en el blog les puse extension .doc simplemente despues de descargados le cambian la extensión.

Importante: estos son ejemplos que vienen en el SDK DigitalPersona.

NETC  – Java

Anuncios

46 pensamientos en “Proyecto Huella Digital en Java con SDK DigitalPersona”

  1. Saludos, no he podido lograr que funcione mi lector, tengo un U.are.U 5160 y el formulario me arroja que El Sensor de Huella Digital esta Desactivado o no Conectado, me podrías ayudar a solucionar este problema !

  2. Hola Napster, estoy buscando el SDK de Digital Persona pero no lo e podido encontrar y debo de implementarlo en un sistema para el control de casinos, quisiera que me regalaras una copia del SDK para poderlo implementar, desarrollo en java

    mil gracias

    Att Carlos A Dominguez D

  3. una pregunta amigo me da error en import no uso netbean si no jcreator que puede ser o donde estan los jar para ponerlos y como esta estructurada la tabla para la base de datos

  4. Hola que tal me gustaria saber como hace java para comparar la huella que se introduce con la ya esta almacenada en la base de datos, es decir que es lo que compara codigo binario, patrones o que es he buscado por todas partes y no encuentro, necesito saber eso que es lo que compara como lo compara que informacion es la que captura java y que es lo que se guarda en la base de datos, te agradesco si respondes

  5. Napster muy bueno, quisiera saber como guardar la huella en un campo varchar2(4000) con formato ISO para biometria, aqui veo que todo queda en un ByteArrayInputStream y almacenado en un BLOB.

    Muchas gracias

  6. buenos dias lector de huella digital por favor que pedir necesita mostrar por esto
    * @package: Formularios
    * @class: CapturaHuella

    mi correo:raulitoserrano@gmail.com

    gracias

  7. buenas tardes me llamo raul y soy sordo por favor que necesitas me ayudar se necesita

    crear un sistema de validación y almacenamiento de
    huella digital con php y base de datos mysql.
    si es obligatorio el java,
    entonces que el formulario de java se muestre
    en la página web con php y html.

    que puede por esto todo es completo entregar mi correo: raulitoserrano@gmail.com

  8. Para esta aplicacion es necesario tener un lector de huellas conectado a la pc?, ya que lo que yo deseo es detectar las huellas con el lector de huellas q se encuentra en mi laptop y cuando hago correr el programa no me detecta la huella, por eso mi pregunta es si tengo que necesariamente tener conectado un lector de huellas de digitalpersonal? por favor si podrian ayudarme o como podria modificarlo

  9. hola,
    estas huellas que se almacenan en el campo blob, se pueden mostrar luego con php?
    es decir son imagenes guardadadas ? o son codigos generados de la huella?
    las podria mostrar como si fuera una imagen almacenada en la base de datos?

    hay alguna forma de mostrar la huella como imagen?

  10. Buen dia, alguien a intentado o sabe como saber que toma de las 4 que realiza la aplicacion son de la misma persona, por ejemplo si haces una toma de tres huellas de la misma y una que no es acepta y crea el template pero como saber cual de las tres son correctas no se si me explique? ….
    Saludos

  11. Hola amigo, que buen tutorial, cuando publicas el que adquiere la imagen de la camara web?

    saludos y en horabuenas por compartir el codigo, de hecho lo voy a utilizar en un proyecto real
    para un cliente que quiere exactamente esto, yo me dedico a desarrollar software, pero mas arientado a la automatizacion de edificios, contactate con migo, tal vez podriamos desarrollar proyectos interesantes.

    Saludos.

  12. NAPSTER2011, disculpa muy bueno el programa pero de casualidad me puedes pasar la base de datos por que tengo una montada y no me registra los datos lo que hace es leer las huellas le doy el
    id del usuario y me dice que se registro correctamente en la base de datos pero la reviso y ningún elemento ha sido ingresado. si puedes me lo envias bishoot@hotmail.com

  13. hola, quisiera saber alguna empresa ha desarrollado interfaces entre huelleros y SO Android, de manera que se pueda conectar el huellero en tablets o celulares, o si la esta desarrollando, gracias

  14. amigo buenas noches sera q me pasas el codigo sql de tu base de datos por favor para crearla exactamente igual necesito hace pruebas .! muy agradecido

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s