Olá pessoal,
Alguém tem um exemplo de como capturar os dados desta leitora ? Uso fwh + xhb.
Obrigado,

Moderador: Moderadores
Este FingerPrint não é por acaso M$ Fingerprint ?
#include "FiveWin.ch"
#include "Struct.ch"
//#include "adofw.ch"
#DEFINE GR_DEFAULT_CONTEXT 0
#DEFINE GR_NO_CONTEXT -1
STATIC DBFile, ConnectionString, connection
STATIC Raw, Template, DB
STATIC oActiveX, cMsg, oText, oWnd, cInfo, cEvents, GrFingerXCtrl1
STATIC oFoto, cFoto
FUNCTION Main()
LOCAL oGet, err, lRet
cEvents := ""
cFoto:="..\BITMAPS\cara1.bmp"
DEFINE DIALOG oWnd RESOURCE "Test"
//oActiveX = CreateOleObject("GrFingerX.GrFingerXCtrl.1") //Ctrl1")
//oActiveX := TOleAuto():New( "GrFingerX.GrFingerXCtrl.1" )
oActiveX := TActiveX():New( oWnd, "GrFingerX.GrFingerXCtrl.1" )
REDEFINE GET oGet VAR cEvents ID 102 OF oWnd MEMO UPDATE
REDEFINE BITMAP oFoto ID 103 OF oWnd RESOURCE "Speaker" UPDATE
oActiveX:bOnEvent = { | event, aParams | cEvents += EventInfo( event, aParams ) }
ACTIVATE DIALOG oWnd CENTERED ON INIT ( GrFingerInitialize() ) ;
VALID ( MemoEdit( cEvents ), .t. ) //oActiveX:Do( "GoHome" )
RETURN NIL
FUNCTION EventInfo( event, aParams )
//local cMsg := "Event: " + cValToChar( event ) + CRLF
local n
cMsg := "Event: " + cValToChar( event ) + CRLF
cInfo:=""
cMsg += "Params: "
for n = 1 to Len( aParams )
cMsg += cValToChar( aParams[ n ] ) + CRLF
cInfo += cValToChar( aParams[ n ] ) + CRLF
next
/*
* -----------------------------------------------------------------------------------
* GrFingerX events:
* A fingerprint reader was plugged on system
* -----------------------------------------------------------------------------------
*/
IF event=="SensorPlug" //(ByVal idSensor As String)
cMsg+="Sensor: " + CSTR(aParams[1]) + ". Event: Plugged."
IF aParams[2] != NIL .AND. aParams[2] != "File"
oActiveX:Do("CapStartCapture", aParams[2])
cMsg += "CapStartCapture "+CSTR(aParams[2])
ENDIF
ELSEIF event=="Plugged" //(ByVal idSensor As String)
cMsg+="Sensor: " + CSTR(aParams[1]) + ". Event: Plugged222."
// oActiveX:Do("CapStartCapture", aParams[1])
ELSEIF event=="SensorUnplug" //(ByVal idSensor As String) //' A fingerprint reader was unplugged from system
cMsg+="Sensor: " + aParams[2]+". Event: Unplugged."
oActiveX:Do("CapStopCapture", aParams[1])
ELSEIF event=="FingerDown" //(ByVal idSensor As String) //' A finger was placed on reader
cMsg+="Sensor: " + aParams[2] +". Event: Finger Placed."
ELSEIF event =="FingerUp" //(ByVal idSensor As String) //' A finger was removed from reader
cMsg += "Sensor: " + aParams[2] + ". Event: Finger removed."
ELSEIF event == "ImageAcquired" //(ByVal idSensor As String, ByVal width As Long, ByVal height As Long, rawImage As Variant, ByVal res As Long)
* An image was acquired from reader
* Copying aquired image
cMsg += "Sensor: " + CSTR(aParams[1])+" Width"+CSTR(aParams[2]) + ". Event: Image captured."
raw:img = aParams[ 9] //rawImage
raw:height = aParams[ 8] //height
raw:width = aParams[ 7] //width
raw:res = aParams[10] //res
* Signaling that an Image Event occurred.
/*
FOR n:=6 TO LEN(aParams)
Msginfo(aparams[n], VALTYPE(aParams[n]))
NEXT n
*/
// Msginfo(LEN(aparams[9]))
// msginfo(CSTR(aParams[2])+"|"+CSTR(aParams[3])+"|"+CSTR(aParams[4])+"|"+CSTR(aParams[5]))
// msginfo(CSTR(aParams[1])+"|"+CSTR(aParams[3])+"|"+CSTR(aParams[4])+"|"+CSTR(aParams[5]))
cMsg += "Sensor: " + CSTR(aParams[2]) + ". Event: Image captured."
* display fingerprint image
PrintBiometricDisplay(.F., GR_DEFAULT_CONTEXT)
/*
' now we have a fingerprint, so we can extract template
formMain.btExtract.Enabled = True
formMain.btEnroll.Enabled = False
formMain.btIdentify.Enabled = False
formMain.btVerify.Enabled = False
' extracting template from image
If formMain.ckBoxAutoExtract.Value Then Call formMain.btExtract_Click
' identify fingerprint
If formMain.ckBoxAutoIdentify.Value Then Call formMain.btIdentify_Click
*/
ENDIF
oWnd:Update()
return cMsg + CRLF
/*
' -----------------------------------------------------------------------------------
' Main functions for fingerprint recognition management
' -----------------------------------------------------------------------------------
*/
FUNCTION GrFingerInitialize()
LOCAL err, lRet:=.F.
STRUCT raw
MEMBER img As STRING LEN 2048
MEMBER width As LONG // Image width.
MEMBER height As LONG // Image height.
MEMBER res As LONG // Image resolution.
ENDSTRUCT
STRUCT Template
MEMBER tpt AS STRING LEN 1000
* Template size
MEMBER Size AS LONG
ENDSTRUCT
* Create a new Template
template:tpt := SPACE(1000)
* Create a new raw image
raw:width := 0
raw:height := 0
* Initializing library
err = oActiveX:Do("Initialize")
If err < 0
lRet:= err
RETURN NIL
EndIf
lRet := oActiveX:Do("CapInitialize")
RETURN lRet
FUNCTION FinalizeGrFinger()
* Finalizing libraries
oActiveX:Do("CapFinalize") //formMain.GrFingerXCtrl1.CapFinalize
oActiveX:Do("Finalize") //formMain.GrFingerXCtrl1.Finalize
RETURN NIL
FUNCTION PrintBiometricDisplay(biometricDisplay, context )
* Display fingerprint image on screen
LOCAL nRet, Handle
* handle to finger image
* Dim handle As IPictureDisp
*/
msginfo("printbio-1")
If biometricDisplay
msginfo("biometricdisplay")
*' get image with biometric info
//oActiveX:Do("biometricdisplay", template.tpt, raw.img, raw.width, raw.height, raw.res, formMain.hDC, handle, context)
//formMain.GrFingerXCtrl1.biometricDisplay template.tpt, raw.img, raw.width, raw.height, raw.res, formMain.hDC, handle, context
Else
*' get raw image
//oActiveX:Do("CapRawImageToHandle", raw:img, raw:width, raw:height, oWnd:hDC, @handle)
//formMain.GrFingerXCtrl1.CapRawImageToHandle raw.img, raw.width, raw.height, formMain.hDC, handle
ActXInvoke( ActXPdisp( oActiveX:hActiveX ), "CapRawImageToHandle", raw:img, raw:width, raw:height, oWnd:hDC, @handle)
msginfo(Handle)
End If
*' draw image on picture box
If !(handle ==NIL)
oFoto:Picture = handle
Msginfo()
oFoto:Update()
End If
RETURN NIL //End Sub
FUNCTION CSTR( string )
RETURN string
// Using Microsoft Excel ActiveX
#include "FiveWin.ch"
#include "Struct.ch"
#DEFINE GR_DEFAULT_CONTEXT 0
#DEFINE GR_NO_CONTEXT -1
STATIC DBFile, ConnectionString, connection
STATIC Raw, Template, DB
STATIC oActiveX, cMsg, oText, oWnd, cInfo, cEvents, GrFingerXCtrl1
STATIC oFoto, cFoto
function Main()
local oWnd
public oActiveX, oBitMap, oLbx, aFlds:={ "GRFinger for Fivewin..." }, nItem:=0
public cFile, MyContextID := "0"
DEFINE DIALOG oWnd RESOURCE "GRFingerX"
REDEFINE BITMAP oBitMap ID 100 OF oWnd FILENAME "GRFinger.bmp" //ADJUST
REDEFINE BUTTON ID 101 OF oWnd ACTION Enroll()
REDEFINE BUTTON ID 102 OF oWnd ACTION Verify()
REDEFINE BUTTON ID 103 OF oWnd ACTION Identify()
REDEFINE BUTTON ID 104 OF oWnd ACTION Extract()
REDEFINE BUTTON ID 105 OF oWnd ACTION fun()
REDEFINE BUTTON ID 106 OF oWnd ACTION oBitMap:LoadBMP(cFile:=cGetFile("Gráficos|*.bmp","Selecione um arquivo")); oBitMap:Refresh()
REDEFINE LISTBOX oLbx VAR nItem ;
ITEMS aFlds ;
ID 107 OF oWnd
ACTIVATE DIALOG oWnd CENTERED ON INIT InicializaControle() ;
VALID ( oActiveX:Finalize(), oActiveX:DestroyContext( MyContextID ), .T. )
return nil
FUNCTION InicializaControle()
if .not. IsActiveX( "GrFingerX.GrFingerXCtrl.1" )
oLbx:ADD("GRFingerX Activex nao instalado")
quit
endif
oActiveX := TOLEAUTO():New("GrFingerX.GrFingerXCtrl.1")
// Inicializa a captura do activex
oError := oActiveX:Initialize()
if oError <> 0
oLbx:ADD( "Erro de Inicializacao "+str(oError,3) )
endif
// Inicializa a captura do activex
oError := oActiveX:CapInitialize()
if oError <> 0
oLbx:ADD( "Erro de Captura "+str(oError,3) )
endif
// Cria contexto para o activex
oError := oActiveX:CreateContext( MyContextID )
if oError <> 0
oLbx:ADD( "Erro de Criacao do Contexto "+str(oError,3) )
endif
oError := oActiveX:CapLoadImageFromFile( "GRFingerX.bmp", 300 )
if oError <> 0
oLbx:ADD( "Erro de Carregamento de Imagem "+str(oError,3) )
endif
return nil
FUNCTION GrFingerFinalize(oActiveX)
oActiveX:Do( "CapFinalize" )
oActiveX:Do( "Finalize" )
RETURN NIL
FUNCTION GrFingerBiometricDisplay( template, RawImg, RawWidth, RawHeight, RawRes, hDC, handle, context )
oActiveX:Do( "biometricdisplay", template, RawImg, RawWidth, RawHeight, RawRes, hDC, handle, context )
msginfo("printbio-1")
If biometricDisplay
msginfo("biometricdisplay")
*' get image with biometric info
//oActiveX:Do("biometricdisplay", template.tpt, raw.img, raw.width, raw.height, raw.res, formMain.hDC, handle, context)
//formMain.GrFingerXCtrl1.biometricDisplay template.tpt, raw.img, raw.width, raw.height, raw.res, formMain.hDC, handle, context
Else
*' get raw image
//oActiveX:Do("CapRawImageToHandle", raw:img, raw:width, raw:height, oWnd:hDC, @handle)
//formMain.GrFingerXCtrl1.CapRawImageToHandle raw.img, raw.width, raw.height, formMain.hDC, handle
ActXInvoke( ActXPdisp( oActiveX:hActiveX ), "CapRawImageToHandle", raw:img, raw:width, raw:height, oWnd:hDC, @handle)
msginfo(Handle)
End If
*' draw image on picture box
If !(handle ==NIL)
oFoto:Picture = handle
Msginfo()
oFoto:Update()
End If
RETURN NIL //End Sub
FUNCTION GrFingerDestroyContext( MyContextID )
lRet := oActiveX:Do( "DestroyContext", MyContextID )
RETURN lRet
FUNCTION CSTR( string )
RETURN string
FUNCTION Enroll()
RETURN .t.
FUNCTION Verify()
RETURN .t.
FUNCTION Identify()
RETURN .t.
FUNCTION Extract()
LOCAL err, lRet:=.F.
STRUCT raw
MEMBER img As STRING LEN 2048
MEMBER width As LONG // Image width.
MEMBER height As LONG // Image height.
MEMBER res As LONG // Image resolution.
ENDSTRUCT
STRUCT Template
MEMBER tpt AS STRING LEN 1000
MEMBER Size AS LONG
ENDSTRUCT
template:tpt := SPACE(1000)
template:size:= 500
raw:img := oBitMap:hBitmap
raw:width := oBitMap:nWidth
raw:height := oBitMap:nHeight
oError := oActiveX:Extract( raw:img, raw:Width, raw:Height, 500, template:tpt, template:size, MyContextID )
if oError < 0
oLbx:ADD( "Erro de Extracao "+str(oError,3) )
endIf
RETURN .t.
FUNCTION fun()
RETURN .t.
toya escreveu:Baixem aqui um exemplo disponibilizado pelo nosso colega Giovany Vecchi no Forum Fivewin-Brasil...
http://www.toyanet.com.br/up/grfinger.zip
PS: A digitalização é em 3D. Logo, não vale imprimir a impressão num papel. Essa "técnica" só dá certo em filme. :)
Usuários vendo este fórum: Nenhum usuário registrado online e 13 visitantes