Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-02-2008
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 313
Poder: 15
fredo Va por buen camino
Manejo Biometrico con Verifinger Sdk v4.2 Standard

bueno, hace ya tempo que no ocupo estos componentes que desarrolle para algunas aplicaciones de huellas digitales.

Las desarrolle debido a que el uso de un lector biometrico es medio engorroso y las funciones son siempre las mismas, por ello tam,bien invito a mejorar el codigo, debido que aunque se POO el desarrollo aun se puede mejorar, espero que esas mejoras tambien sean posteadas.

Las unit faltantes vienen todas con las SDK's

Slds desde chile

PD:ojalá les sea de utilidad.



Código Delphi [-]
unit BioLector;

interface

uses
  SysUtils, Classes,VFImage,VFControls,VFOptions,VFFeatures,VFinger,ScanMan,UIDHuella,Dialogs,DB;

type
  TOn_Captura = procedure(ScannerID: string; Width,Height: Integer; Image: PByte; Resolution: Integer)of object;
  TON_CambioEstado = procedure(ScannerID: string; State: LongWord) of object;

  TBioLector = class(TComponent)
  private
    { Private declarations }
        FActive:Boolean;
        FN_Scaner:Integer;
        FIds:TStringList;
        FImage,FImageAfter:TVFImage;
        FResolucion:Integer;
        FScannerID: string;
        FFingerID: string;
        FView:TVFView;
        FOn_Captura:TOn_Captura;
        FON_CambioEstado:TON_CambioEstado;
        Features:TVFFeatures;
        FTipo_Scaner:String;
        procedure SetActive(Estado:Boolean);
        procedure SetIDScaner(Scaner:Integer);
        procedure SetTipoScaner(Tipo:String);
  protected
    { Protected declarations }
  public
    { Public declarations }
        property Active:Boolean read FActive write SetActive;
        property Huella:TVFFeatures read Features;
        constructor Create(AOwner: TComponent);override;
        destructor Destroy;override;
        procedure OnScannerImage(ScannerID: string; Width,Height: Integer; Image: PByte; Resolution: Integer);
        procedure OnScannerState(ScannerID: string; State: LongWord);
        procedure AsignaHuella(var PHuella:TVFFeatures);
        function comparar(huella_externa:TVFFeatures):boolean;
        function Buscar_en_DataSet(Dataset:TDataSet;campo:String;buscado:TVFFeatures):boolean;
        function Asignar_a_Blob(var campo:TBlobFIeld):boolean;
  published
    { Published declarations }
       property N_Scaner:Integer read FN_Scaner write SetIDScaner;
       property View:TVFView read fView write FView;
       property On_Captura:TOn_Captura read FOn_Captura write FOn_Captura;
       property ON_CambioEstado:TON_CambioEstado read FON_CambioEstado write FON_CambioEstado;
       property TipoScaner:String read FTipo_Scaner write SetTipoScaner;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('BioPack', [TBioLector]);
end;

procedure TBioLector.SetTipoScaner(Tipo:String);
Begin
     if uppercase(Tipo) <> FTipo_Scaner
     then
     begin
          if Tipo = 'GENERICO'
          then  VFSetParameter(VFP_MODE, LongWord(VF_MODE_GENERAL),nil)
          else
          if Tipo = 'U.ARE.U'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_DIGITALPERSONA_URU),nil)
          else
          if Tipo = 'BIOMETRIKAFX2000'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_BIOMETRIKA_FX2000),nil)
          else
          if Tipo = 'KEYTRONIC_SECUREDESKTOP'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_KEYTRONIC_SECUREDESKTOP),nil)
          else
          if Tipo = 'IDENTIX_TOUCHVIEW'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_IDENTIX_TOUCHVIEW),nil)
          else
          if Tipo = 'PRECISEBIOMETRICS_100CS'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_PRECISEBIOMETRICS_100CS),nil)
          else
          if Tipo = 'STMICROELECTRONICS_TOUCHCHIP'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_STMICROELECTRONICS_TOUCHCHIP),nil)
          else
          if Tipo = 'IDENTICATORTECHNOLOGY_DF90'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_IDENTICATORTECHNOLOGY_DF90),nil)
          else
          if Tipo = 'AUTHENTEC_AFS2'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_AUTHENTEC_AFS2),nil)
          else
          if Tipo = 'AUTHENTEC_AES4000'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_AUTHENTEC_AES4000),nil)
          else
          if Tipo = 'ATMEL_FINGERCHIP'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_ATMEL_FINGERCHIP),nil)
          else
          if Tipo = 'BMF_BLP100'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_BMF_BLP100),nil)
          else
          if Tipo = 'SECUGEN_HAMSTER'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_SECUGEN_HAMSTER),nil)
          else
          if Tipo = 'ETHENTICA'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_ETHENTICA),nil)
          else
          if Tipo = 'CROSSMATCH_VERIFIER300'
          Then VFSetParameter(VFP_MODE, LongWord(VF_MODE_CROSSMATCH_VERIFIER300),nil)
          else VFSetParameter(VFP_MODE, LongWord(VF_MODE_GENERAL),nil);

          FTipo_Scaner:=Tipo;

     end;

end;

function TBioLector.Buscar_en_DataSet(Dataset:TDataSet;campo:String;buscado:TVFFeatures):boolean;
var encontrado:Boolean;
    MD: TVFMatchDetails;
    Stream: TStream;
    PLEIDO,PBUSCADO:array[0..VF_MAX_FEATURES_SIZE] of Byte;
    size,resultado:Integer;

Begin
     encontrado:=false;
     if buscado <> nil
     then
     Begin
          buscado.GetData(@PBUSCADO[0]);
     end
        else Features.GetData(@PBUSCADO[0]);
     MD.Size := SizeOf(MD);
     Dataset.First;
     while (not Dataset.Eof) and (Not encontrado) do
     Begin
          TRY
             Stream:=dataset.CreateBlobStream(dataset.Fieldbyname(campo), bmRead);
             Size := Stream.Read(PLeido[0], VF_MAX_FEATURES_SIZE);
             resultado:=VFVerify(@PLeido[0],@PBUSCADO[0], @MD, nil);
             if  VFSucceeded(Resultado) or (Resultado = VFE_FAILED)
             then
             begin
                  if Resultado <> VFE_FAILED
                  then
                  Begin
                       encontrado:=true;
                  end;
             end;
           FINALLY
                  Stream.Free;
           END;
           if not encontrado then Dataset.Next;
     end;
     result:=encontrado;
end;

function TBioLector.Asignar_a_Blob(var campo:TBlobFIeld):boolean;
var  Stream: TStream;
     x:array[0..VF_MAX_FEATURES_SIZE] of Byte;

Begin
     result:=false;
     if (campo.DataSet.State = dsInsert) or (campo.DataSet.State = dsEdit)
     then
     Begin
          try
             stream:=campo.DataSet.CreateBlobStream(campo,bmWrite);
             Features.GetData(@x[0]);
             Stream.Write(x, Sizeof(x));
             result:=true;
          finally
             Stream.Free;
          end;
     end;
end;
//****************************************

procedure SMImageProc(const ScannerID: PAnsiChar; Width, Height: Integer;
  const Image: PByte; Resolution: Integer; Param: Pointer); stdcall;
begin
     TBioLector(Param).OnScannerImage(ScannerID, Width, Height, Image, Resolution);
end;

procedure SMStateProc(const ScannerID: PAnsiChar; State: LongWord; Param: Pointer); stdcall;
begin
     TBioLector(Param).OnScannerState(ScannerID, State);
end;

//****************************************

function TBioLector.comparar(huella_externa:TVFFeatures):boolean;
var MD: TVFMatchDetails;
    uno,dos:array[0..VF_MAX_FEATURES_SIZE] of Byte;
    resultado:Integer;
Begin
     try
     MD.Size := SizeOf(MD);
     Features.GetData(@dos[0]);
     huella_externa.GetData(@uno[0]);
     resultado:=VFVerify(@uno[0],@dos[0], @MD, nil);
     if  VFSucceeded(Resultado) or (Resultado = VFE_FAILED)
     then
     begin
          Result:= (Resultado <> VFE_FAILED);
     end
        else Result:=false;
     except
           showmessage('Datos a comparar Vacios!');
           Result:=false;
     end;
end;

//****************************************

procedure TBioLector.OnScannerState(ScannerID: string; State: LongWord);
begin
     if Assigned(ON_CambioEstado)
     then ON_CambioEstado(ScannerID,State);
end;


procedure TBioLector.OnScannerImage(ScannerID: string; Width,
  Height: Integer; Image: PByte; Resolution: Integer);
var huella:array[0..VF_MAX_FEATURES_SIZE] of Byte;
    FFeaturesSize: LongWord;

begin
     FScannerID := ScannerID;
     FResolucion := Resolution;
     FFingerID := EmptyStr;
     FImage.Assign(Width, Height, Image);

     VFExtract(FImage.Width, FImage.Height,FImage.bits,Resolution,@huella[0],FFeaturesSize, nil);
     if Features = nil
     then Features:=TVFFeatures.CreateFromData(@huella[0])
     else Features.SetData(@huella[0]);

     if Assigned(FView)
     then
     BEGIN
          FView.Resolution:=Resolution;

          if FView.Features <> nil
          then FView.Features.SetData(@huella[0])
          else FView.Features:=Features;

          if FView.Image = nil
          then FView.Image:=TVFImage.Create;
          FView.Image.Assign(FImage);
          FView.UpdateImage;
     END;

     if Assigned(On_Captura)
     then On_Captura(ScannerID,Width,Height,Image,Resolution);
end;

procedure TBioLector.SetActive(Estado:Boolean);
Begin
     if fActive <> Estado then
     Begin
          fActive:=Estado;
          if (fActive) and (FN_Scaner > 0)
          then
          Begin
               VFCheckResult(VFInitialize);
               SMCheckResult(SMInitialize);
               SMGetScannerIds(FIds);
               try
                  SMStartCapturing(FIDs[FN_Scaner-1], SMImageProc, SMStateProc,Self);
               except
                     SMCheckResult(SMFinalize);
                     VFCheckResult(VFFinalize);
               end;
          end
             else
          Begin
               SMCheckResult(SMFinalize);
               VFCheckResult(VFFinalize);
          end;
     end;
end;

procedure TBioLector.SetIDScaner(Scaner:Integer);
Begin
     if (Scaner <> FN_Scaner) and (Scaner >= 0) and (Scaner < 3)
     then
     Begin
          FN_Scaner:=Scaner;
     end;
end;

//***************************************************

procedure TBioLector.AsignaHuella(var PHuella:TVFFeatures);
var Dato:array[0..VF_MAX_FEATURES_SIZE] of Byte;
Begin
     Features.GetData(@Dato[0]);
     if PHuella = nil
     then PHuella:=TVFFeatures.CreateFromData(@Dato[0]);
end;

//***************************************************


constructor TBioLector.Create(AOwner: TComponent);
Begin
     inherited;
     FIds:=TStringList.Create;
     fActive:=false;
     FImage:=TVFImage.Create;
     Features:=TVFFeatures.Create;
     FTipo_Scaner:='GENERICO';
end;

destructor TBioLector.Destroy;
Begin
     FIds.Free;
     FImage.Free;
     FImageAfter.Free;
     if FActive
     then
     Begin
          Active:=false;
     end;
     inherited;
end;


end.



Responder Con Cita
  #2  
Antiguo 14-03-2008
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 313
Poder: 15
fredo Va por buen camino
varios me han preguntado por que no les funciona estas rutina, en el fondo este componente hace de interfase entre el el lector y el programa, la respuesta es sencilla, actualicen los drivers de su lector y eso basta, lo primero a hacer es compilar la demo que trae el SDK, si funciona ok entonces no tocar nada, si no, pueden bajar la demo de la pagina oficial de veryfinguer, para obtener la ultima version de verifinguer y asi poder utilizarlo, lo que pasa es que desde que actualizaron a servipack 2, que hay que actualizar el driver...

eso. yo tengo este componente andando en delphi 7, solo hay que hacerle un pequeño cambio en donde marca el error.

Sld2 y suerte!!!!
Responder Con Cita
  #3  
Antiguo 21-03-2008
federicorl federicorl is offline
Miembro
 
Registrado: may 2006
Posts: 31
Poder: 0
federicorl Va por buen camino
Cual es el pequeño cambio donde marca el error?
Responder Con Cita
  #4  
Antiguo 24-03-2008
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 313
Poder: 15
fredo Va por buen camino
Es solo cambiar el nombre de la unit en el IF... debes poner el nombre que tiene esa unidad en delphi 7, ese codigo no lo puedo publicar por que no es de mi propiedad.

sl2
Responder Con Cita
  #5  
Antiguo 24-03-2008
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 313
Poder: 15
fredo Va por buen camino
Es solo cambiar el nombre de la unit en el IF... debes poner el nombre que tiene esa unidad en delphi 7, ese codigo no lo puedo publicar por que no es de mi propiedad.

sl2
Responder Con Cita
  #6  
Antiguo 24-04-2013
marinaAv marinaAv is offline
Miembro
 
Registrado: ago 2011
Posts: 15
Poder: 0
marinaAv Va por buen camino
Smile

hola buen dia estoy haciendo un reloj checador y buscando me encontre con este codigo pero mi pregunta es: seria copiar todo asi como esta o tengo que hacer alguna modificacion.. yo tengo DelphiXe2 en windows 8 ... y aun no encuentro la manera de guardar mi huella digital
espero su respuesta gracias
oo espero no eestar haciendo dos preguntas a la ves
Responder Con Cita
  #7  
Antiguo 25-04-2013
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.104
Poder: 13
rretamar Va camino a la fama
Hace un tiempo (alrededor de cuatro años) estuve involucrado en un prototipo de software de reconocimiento de personas por huella dactilar. Al final no se llegó a implementar (aunque el prototipo funcionaba muy bien). En las pruebas evalué varios sensores (me quedé con el U-Are-U de Digital Persona) y un par de SDKs. De estos últimos el que mejor funcionó es el de Neurotechnologies, que si bien era muy preciso y soportaba sensores de varias marcas, el costo era elevadísimo (y prohibitivo). Como conclusión sacamos que no es algo que convenga desarrollar para pocas unidades, porque los costos son importantes, sobre todo el de la licencia del SDK. Además ya venían relojes chequeadores basado en huella dactilar, por lo que fue casi reinventar la rueda para algo que ya existía en el mercado.

En aquel entonces la huella la guardábamos en una base de datos, se generaba un "HASH" en forma de cadena de texto alfanumérica. El mismo SDK la generaba y luego hacía las comparaciones. Recuerdo que era tan bueno que se podía girar el dedo incluso 180 grados o colocarlo inclinado, y a la huella la detectaba igual. El problema que también encontramos (en aquel entonces era importante, supongo que hoy en día será más problemático aún, por la cuesta abajo en popularidad que tiene Delphi) es que no todos los SDK soportaban Delphi directamente.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.

Última edición por rretamar fecha: 25-04-2013 a las 15:01:12.
Responder Con Cita
  #8  
Antiguo 25-04-2013
marinaAv marinaAv is offline
Miembro
 
Registrado: ago 2011
Posts: 15
Poder: 0
marinaAv Va por buen camino
si pues existen ya los checadores pero a mi me toco hacer uno y pues estoy haciendo todo lo que puedo solo que pues la huella digital me esta dando problemas porqe jamas lo he hecho y no tengo ni la menor idea de como hacerlo
Responder Con Cita
  #9  
Antiguo 12-02-2016
genyus00 genyus00 is offline
Miembro
 
Registrado: jun 2010
Posts: 25
Poder: 0
genyus00 Va por buen camino
Smile Manejo Biometrico con Verifinger Sdk v4.2 Standard

Buenas, recién encuentro con este tema, el cual estaré probando y verificando funcionamiento, recientemente he desarrollado una aplicación con el SDK FREE de Neurotechnology basándome en el demo que incluyen para Delphi; Mi duda al respecto es relacionada al tema de licencia, dado que he creado mi aplicación con el SDK que viene como DEMO y solo permite el registro de 10 personas y una huella por cada uno, la verdad es que para mi caso el SDK FREE me sirve sin problemas, ahora para el tema de la empresa que utilice el software, requieren comprar el SDK completo? siendo que solo con la funcionalidad del SDK Free le vale para lo que necesitan?

Aun cuando no he probado funcionamiento de estos componentes, pienso que la solución es muy buena y si funcionan como espero, procederé a completarlos incluyendo mis rutinas actuales. Gracias.
Responder Con Cita
  #10  
Antiguo 12-02-2016
genyus00 genyus00 is offline
Miembro
 
Registrado: jun 2010
Posts: 25
Poder: 0
genyus00 Va por buen camino
Manejo Biometrico con Verifinger Sdk v4.2 Standard

Buenas, donde se pueden encontrar las siguiente unidades o como se pueden reemplazar, ya que sin estas la solución realmente no es una solución, solo un código mas
sin ningún funcionamiento. Gracias.

VFImage,VFControls,VFOptions,VFFeatures,VFinger,ScanMan,UIDHuella
Responder Con Cita
  #11  
Antiguo 23-03-2016
Avatar de fredo
fredo fredo is offline
Miembro
 
Registrado: oct 2003
Ubicación: Chile, Valparaiso
Posts: 313
Poder: 15
fredo Va por buen camino
vienen en la demo que trae vfinguer
__________________
^_^

http://stna.cl
Responder Con Cita
Respuesta


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


La franja horaria es GMT +2. Ahora son las 13:57:16.


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