Java - Lectura huella digital zk4000

   
Vista:

Lectura huella digital zk4000

Publicado por cristian (2 intervenciones) el 10/06/2015 21:21:50
Estimados,

En la empresa donde trabajo esta implementado un lector de huella digital "Hamster Plus" en la cual la empresa secugen provee de la sdk y la implementacion java para la lectura y obtencion de la minucia y la imagen, el tema es que me pasaron un lector nuevo el ZK-4000 el cual trae una SDk pero no una implementacion en java y ningun jar para acceder al dispositivo. Tras ver los ejmeplos en Visual C++ intento replicar las rutinas necesarias para la lectura pudiendo conectarme al ActiveX biokey.ocx donde esta las funciones de control con JACOB, el tema es que he podido crear una imagen .jsp o .bmp pero no la minucia osea el algoritmo de la lectura y ademas setearle el soporte starndar ISO/IEC 19794, de hecho no se como puedo determinar que template usa el nuevo dispositivo solo aparece en la documentacion que en un string en base 64.

Por lo que he leido en las especificaciones de los 2 dispositivos su DPI son distintos asi como tambien las areas de sensibilidad, no se si podre implementar la lectura y poder obtener el detalle de la imagen al igual que con el dispositivo que ya usdan aca o debo hacer una nueva implementacion para este nuevo dispositivo.

Si alguien esta en la etapa de leer el biokey.ocx lo puedo ayudar a accesder a los metodos de esta y generar una imagen en disco.

Bueno si alguien ha tenido ya experiencia en esta misma problematica seria muy buena.
Muchas Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Lectura huella digital zk4000

Publicado por Mariana (2 intervenciones) el 02/07/2015 00:58:21
Hola Cristian.

Tu ya lograste leer el biokey.ocx desde java?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lectura huella digital zk4000

Publicado por cristian (2 intervenciones) el 02/07/2015 15:37:25
Claro que si, eso se logra con Jacob. Primero debes registrar el biokey con regsvr32 a traves de comandos cmd y despues buscar el clsid en el regedit buscando biokey.ocx, te muestro el codigo que tengo. ahjora te cuento que pude leer el archivo ejecutar acciones con el dispositivo pero no logro obtener la minusia del lector y los templates asi que no he podido implementarlo de forma exitosa.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import com.jacob.activeX.ActiveXComponent;
import com.jacob.activeX.ActiveXDispatchEvents;
import com.jacob.com.*;
 
 
public class Main {
 
	ActiveXComponent xl1 = new ActiveXComponent("clsid:{CA69969C-2F27-41D3-954D-A48B941C3BA7}");
 
	 Dispatch ob = xl1.getObject();
 
	private SensorEvents se;
 
	    public void initTest()
	    {
	        Variant var = Dispatch.call(ob, "InitEngine");
	        if(var.getInt()==0)
	        {
	            Variant valid = Dispatch.get(ob, "EngineValid");
	            if(valid.getBoolean())
	            {
	                Variant sn = Dispatch.get(ob, "SensorSN");
	                System.out.println("SensorSN " + sn.toString());
 
	                se = new SensorEvents();
 
	                Dispatch.call(ob, "BeginEnroll");
 
 
	                Variant SensorCount = Dispatch.get(ob, "SensorCount");
	                System.out.println("SensorCount " + SensorCount.toInt());
 
 
	                Variant RegTplFileName1 = Dispatch.get(ob, "RegTplFileName");
	                System.out.println("RegTplFileName " + RegTplFileName1.toString());
 
	                boolean DongleIsExist = Dispatch.call(ob, "DongleIsExist").toBoolean();
	                System.out.println("DongleIsExist "+DongleIsExist);
 
	                int DongleUserID = Dispatch.call(ob, "DongleUserID").toInt();
	                System.out.println("DongleUserID "+DongleUserID);
 
	                String FPEngineVersionAS = Dispatch.call(ob, "FPEngineVersion").toString();
	                System.out.println("FPEngineVersionAS "+FPEngineVersionAS);
 
 
 
	                int ImageHeight = Dispatch.call(ob, "ImageHeight").toInt();
	                System.out.println("ImageHeight "+ImageHeight);
 
	                int ImageWidth = Dispatch.call(ob, "ImageWidth").toInt();
	                System.out.println("ImageWidth "+ImageWidth);
 
	                Variant IsRegister = Dispatch.call(ob, "IsRegister");
	                System.out.println("IsRegister "+IsRegister.getBoolean());
 
	                /*Variant OneToOneThreshold = Dispatch.call(ob, "OneToOneThreshold");
	                System.out.println("OneToOneThreshold "+OneToOneThreshold.getBoolean());*/
 
	                Variant RegTplFileName = Dispatch.call(ob, "RegTplFileName");
	                System.out.println("RegTplFileName "+RegTplFileName.getString());
 
	                Variant TemplateLen = Dispatch.call(ob, "TemplateLen");
	                System.out.println("TemplateLen "+TemplateLen.getInt());
 
	                Variant Threshold = Dispatch.call(ob, "Threshold");
	                System.out.println("Threshold "+Threshold.getInt());
 
 
 
	                Variant CreateFPCacheDB = Dispatch.call(ob, "CreateFPCacheDB");
	                System.out.println("CreateFPCacheDB "+CreateFPCacheDB);
 
	                Variant CreateFPCacheDBEx = Dispatch.call(ob, "CreateFPCacheDBEx");
	                System.out.println("CreateFPCacheDBEx "+CreateFPCacheDBEx);
 
	                Variant GetTemplateAsS= Dispatch.call(ob, "GetTemplateAsString");
	                System.out.println("GetTemplateAsS "+GetTemplateAsS.toString());
 
	                Variant ControlSensor = Dispatch.call(ob, "ControlSensor","12","0");
	                System.out.println("ControlSensor "+ControlSensor.getInt());
 
 
 
	                try {
	                    Thread.sleep(15000);
	                } catch (Exception e) {
	                }
 
 
	                Variant GetTemplateEx = Dispatch.call(ob, "GetTemplateEx",new SafeArray("9"));
	                System.out.println("GetTemplateEx "+GetTemplateEx);
 
	                Variant FPEngineVersion = Dispatch.call(ob, "FPEngineVersion");
	                System.out.println("FPEngineVersion "+FPEngineVersion);
 
 
 
	                //Variant GetTemplateEx = Dispatch.call(ob, "GetTemplateEx", sa); 
	                //System.out.println("GetTemplateEx "+GetTemplateEx);
 
	               // String OnCaptureToFile = Dispatch.call(ob, "OnCaptureToFile",new SafeArray("true")).toString();
	                //System.out.println("OnCaptureToFile "+OnCaptureToFile);
 
	                String VerTplFileName = Dispatch.call(ob, "VerTplFileName").toString();
	                System.out.println("VerTplFileName "+VerTplFileName);
 
 
	                //System.out.println("GetTemplateAsString " + Dispatch.get(ob, "GetTemplate"));
 
	                Variant GetTemplateAsString= Dispatch.call(ob, "GetTemplateAsString");
	                System.out.println("GetTemplateAsString "+GetTemplateAsString.toString());
 
	                Variant SaveTemplate = Dispatch.call(ob, "SaveTemplate","c:\\Fingerprint\\finger.tpl",Dispatch.call(ob, "GetTemplate").toString());
	                System.out.println("SaveTemplate "+SaveTemplate.getBoolean());
 
	                Dispatch.call(ob, "SaveJPG","c:\\Fingerprint\\finger.jpg");
 
 
	                Variant ControlSensor1 = Dispatch.call(ob, "ControlSensor","12","1");
	                System.out.println("ControlSensor "+ControlSensor1.getInt());
 
	                Dispatch.call(ob,"EndEngine");
	            }
 
	        }
 
	    }
 
	    public static void main(String[] args){
	    	Main test = new Main();
	        test.initTest();
	    }
 
 
 
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.jacob.com.VariantViaEvent;
 
public class SensorEvents {
 
 
    public void OnFingerTouching(Variant[] args) {
                System.out.println("OnFingerTouching"+args);
        }
        //ocx  OnFingerLeaving    
    public void OnFingerLeaving(Variant[] args) {
        System.out.println("OnFingerLeaving");
    }
 
    public Boolean OnEnroll(Variant[] args) {
        System.out.println("OnEnroll"+args.toString());
        return true;
    }
 
    public void OnFeatureInfo(Variant[] args) {
        System.out.println("OnFeatureInfo");
    }
 
 
    public void OnEnrollToFile(Variant[] args) {
        System.out.println("OnEnrollToFile");
    }
 
    public void OnCapture(Variant[] args) {
        System.out.println("OnCapture");
    }
 
 
    public void OnCaptureToFile(Variant[] args) {
        System.out.println("OnCaptureToFile");
    }
 
 
    public void GetTemplate(Variant[] args) {
        System.out.println("GetTemplate"+args);
    }
 
    public void GetTemplateAsStringEx(Variant[] args) {
        System.out.println("GetTemplateAsStringEx");
    }
    public void OnImageReceived(Variant[] args2) {
        System.out.println("OnImageReceived " + args2[0]);
 
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lectura huella digital zk4000

Publicado por Mariana (2 intervenciones) el 09/07/2015 19:53:35
Hola Christian muchas gracias por responder, voy a revisarlo y te cuento..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Lectura huella digital zk4000

Publicado por Martin Graglia martin@bebopweb.com.ar (1 intervención) el 21/11/2015 17:35:40
Hola Cristian:
Recién llego a tu post, después de toda una noche de pelea con Jacob, Java, Netbeans & cia, jajaja.

Te consulto lo siguiente, si bien no es específico al tema de tu post, por ahi tenés idea: logré conectar la clase en java con el biokey.ocx mediante jacob. Pero cuando llamo a la función initEngine() del BioKey siempre me devueve el valor 2 ("no se conectó el lector" según el manual). Sin embargo, probando el demo que vino con el aparato (es un ZK7500, creo que es el más básico), me dice que logra conectarse.

Te pasó algo similar? tendrías idea de que puede estar pasando?
Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar