Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Bibliotecas de código fuente
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-09-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Componentes lectores DigitalPersona

Saludos

Para aquel que lo recuerde, en este tema habia solicitado un poco de ayuda referente a los lectores de huella digital. Bueno, al fin y al cabo me he decidido por un lector de los U.Are.U (DigitalPersona)

En concreto el que cayo en mis manos es un DigitalPersona U.are.U 4000B

Para lograr comunicarme con el desde Delphi hago uso de SDK "DigitalPersona One Touch for Windows"

Cuestion, es andar metiendose con controles ActiveX, OLE, Variants.. ese tipo de cosas que cuando uno esta programando y apreta . o control + espacio y no sale nada, son todas llamadas a metodos "misteriosos"

En fin, luego de estudiar un poco, decidi crearme un componente wrapper para poder manejar facilmente el lector. Creo que esta lejos de ser perfecto, asi que bienvenidas sean las criticas/sugerencias. Al parecer cumple bien, será cuestion de probarlo en produccion

Lo tengo alojado en un repositorio en GitLab. Esta liberado bajo la licencia BSD (la de 3 cláusulas). Asi que basicamente pueden usarlo a su antojo como si fuera suyo

El funcionamiento es bastante similar al GRFingerPrint que publico Al Gonzalez hace algun tiempo. Es decir, este componente lo unico que hace es facilitarle la vida al programador delphi; el verdadero trabajo lo hace el SDK. De hecho es requisito que se importen las librerias ActiveX de DigitalPersona (estan en el repo para que la instalacion sea click and run)

Trate de hacerlo mas sencillo posible, asi que minimize todo a dos componentes:

1. TDPFingerPrintEnroll --> Usado para registrar huellas digitales, mediante el tipico proceso de 4 lecturas de un dedo. Hace uso del control ActiveX que se provee en el SDK. Funciona estilo "TxxDialog", es decir, tiene su metodo Execute

Para los Delphinianos: La verdad no se me ocurrio mejor idea que crear una instancia del control ActiveX y luego meterle como Parent un TForm. El form se visualiza con ShowModal al llamar a Execute y se proveen 2 botones (mrOk y mrCancel). Sencillisimo

Hay 3 eventos posibles:
- AfterExecute: Creo que su nombre lo dice todo. Basicamente se dispara cuando se cierra el TForm que comentaba antes. Provee bastante informacion util, como por ejemplo cada dedo con su huella capturada. Para ello cree unos tipos de datos para identificar facilmente a cada dedo (usando enumerativos y set, y helpers para que sea aun mas facil)

- OnFigerEnroll: Se dispara al registrar una nueva huella. Devuelve el dedo en cuestion y el template generado en string

- OnFingerPrintDeleted: Se dispara al eliminar una de las huellas registradas. Para eliminar una huella registrada en el control ActiveX, se debe hacer click sobre uno de los dedos que estan como registrados (color verde).

Solo publica una propiedad: MaxFingerPrintsAllowed, la cual indica la cantidad maxima de huellas que se puede registrar

2. TDPFingerPrintReader --> Representa nuestro lector, en estado de "capturando". Es decir, si esta activo, cada vez que se apoye el dedo en el lector, nuestra aplicacion en cuestion se entera a traves de los eventos.

Creo que el mas importante de los eventos de este componente es el OnCaptured, que se va a disparar cuando se capture una lectura exitosa (de calidad optima para verificacion). Este evento es importante porque nos provee una referencia a una interface de tipo IFingerComparer

IFingerComparer es una interface que viene "cargada" con el template de la huella capturada y lista para comparar contra las que tenemos almacenadas en nuestro soporte externo (en el 99.99% de los casos una BD :))

Para ello, emplearemos el metodo CompareTo

Asi de sencillo:

Verificacion:

Código Delphi [-]
procedure TFMain.DPFingerPrintReader1Captured(Reader: TDPFingerPrintReader; FingerComparer: IFingerComparer);
begin
  while not XXX.Eof do
  begin
    if FingerComparer.CompareTo(XXX.FieldByName('Huella').AsString) then
    begin
      ShowMessage('Encontrado!');
      Break;
    end;

    XXX.Next;
  end;
end;

Registracion:

Código Delphi [-]
procedure TFMain.DPFingerPrintEnroll1AfterExecute(Sender: TDPFingerPrintEnroll; 
const FingerPrints: TFingerPrints;  EnrolledFingers: TFingerSet; const Result: Boolean);
var
  LFinger: TFinger;
  FingerPrint: string;
begin
  XXX.SQL.Text := ' INSERT INTO Huellas (IdPersona, Dedo, Huella) VALUES (:IdPersona, :Dedo, :Huella) ';
  XXX.ParamByName('IdPersona').DataType:= ftInteger;
  XXX.ParamByName('Dedo').DataType:= ftInteger;
  XXX.ParamByName('Huella').DataType:= ftString;
  XXX.Prepare;

  for LFinger := Low(TFinger) to High(TFinger) do
  begin
    if not LFinger in EnrolledFingers then
      Continue;
  
    XXX.ParamByName('IdPersona').AsInteger := AlgunId;
    XXX.ParamByName('Dedo').AsInteger := LFinger;
    XXX.ParamByName('Huella').AsString:= Huella;
    XXX.Execute;
  end;
end;

Instalacion: https://gitlab.com/ortuagustin/TDPFi...ster/README.md

Proximamente en Español, pero deberia entenderse ya que el propio Delphi esta en Ingles.

PD: Si bien es interesante el tema de crear componentes en Delphi, esta es mi primera experiencia. Lo digo para que los mas veteranos no me maten :D

Última edición por AgustinOrtu fecha: 02-09-2015 a las 06:17:41.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda Lector de Huellas DigitalPersona KingOfDragons Varios 34 12-11-2018 08:48:32
Lectores Biometricos Zk Y Uau hackpro Varios 7 26-02-2014 23:43:24
Ayuda con lectores de barras dape Varios 6 30-04-2010 13:59:11
DigitalPersona One Touch SDK mmusashi OOP 2 23-02-2010 05:33:23
Para los lectores del club eduarcol Humor 6 17-05-2005 19:11:16


La franja horaria es GMT +2. Ahora son las 01:24:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi