Griaule Biometrics

Home » Forums » FINGERPRINT SDK » Other Programming Languages » Javascript / PHP - Internet Explorer Crash during the enrollment
19 replies [Last post]
thisisweb
Offline
Joined: 2011-05-11
Rate this post:
0
No votes yet
Javascript / PHP - Internet Explorer Crash during the enrollment

Hi,

I am testing the demo application supplied with the Javascript/PHP SDK, but I have an issue with Internet Explorer 8: when the enrollment finishes, IE crashes. In the debug console the following javascript error is reported : 'ok' is not defined in eval on line 93 of Grfinger.js.

The application is being tested on a local Windows 7 environment with Wampserver (Apache 2.2.11, PHP 5.2.9-2, MySQL 5.1.36).

 

m.svol
Offline
Joined: 2010-09-02
Rate this post:
0
No votes yet

Dear customer,

Please, try to take a look on this post: http://www.griaulebiometrics.com/page/en-us/forum/use-phpmysql-page-scan-fingerprints
There is a video where we explain how to run the JavaScript/PHP sample.
It should work for you.

Best regards,

 

--
Matheus Smythe Svolenski
Griaule Biometrics Support Team

moon
Offline
Joined: 2011-06-20
Rate this post:
0
No votes yet

sir i am student of bs(cs)8th semester,

 

sir i make a final project online voating system through fingerprint reader on php,i download java scripts sdk your's web site but problem is java script does'nt capture the images of finger when i press eroll butten,i make a dafualt pic in drive c:\\ ,

this pages cantain tha dafulat images but not cantain finger print

plz help me as soon as possible.

 

 

 

thank you sir

m.svol
Offline
Joined: 2010-09-02
Rate this post:
0
No votes yet

Dear customer,

 

Where exactly your're having this problem?
Did you install Fingerprint SDK 2009 correctly? This problem you're having is on your own application or it's on our sample code?
If it's on our code, could you please try to run any other sample available on our Download page: www.griaulebiometrics.com/en-us/downloads

Hope it helps you.
Best regards,

 

--
Matheus Smythe Svolenski
Griaule Biometrics Support Team

moon
Offline
Joined: 2011-06-20
Rate this post:
0
No votes yet

sir

 

   i work php/mysql  with microsoft fingerprint readers .problem is thumbs images is not insert in mysql database.

plz help

 

so i thankful u.

davi.st1
Offline
Joined: 2010-08-26
Rate this post:
0
No votes yet

Dear customer,

 

Did you change the path of GrFinger.js file (exemple: var url_server="http://localhost/GrFingerService/").

You have to put this sample inside your localhost folder (like xampp or wampServer folder).

 

If you have another doubt, don't hesitate to contact us.

 

Best regards,

 

Davi Stuart Zilli

Griaule Support Team

manunit
Offline
Joined: 2012-04-03
Rate this post:
0
No votes yet

Saludos.

 

Ojala puedan ayudarnos con el siguiente problema.

 

Estamos implementando el lector de huella extendiendo el ejemplo de PHP-javascript con los activeX de IE que se encuentra en la sección de ejemplos, y tenemos las siguientes dificultades al  realizar la identificación es decir identify y CallIdentify(rawImg, w, h, res).

 

Este es nuestro código html de la página

identify.html 

 

[...]

<SCRIPT FOR="GrFingerX" EVENT="ImageAcquired(id, w, h, rawImg, res)" LANGUAGE="javascript">
GrFingerX.CapSaveRawImageToFile(rawImg, w, h, "C:\\xampp\\htdocs\\GrFingerService\\img\\teste.bmp", 501);
Start();
if(document.getElementById('img').style.display == 'none')
document.getElementById('img').style.display = 'block';
CallIdentify(rawImg, w, h, res);
</SCRIPT>

<input type = "button" value = "Identify" onclick = "Initialize()" />

<br />

<IMG id="img" style="display: none;" name="refresh">
<SCRIPT language="JavaScript" type="text/javascript">
<!--
function Start() {
document.getElementById("img").src = "img/teste.bmp?ts" + encodeURIComponent( new Date().toString() );
}
// -->
</SCRIPT>

<br />

<textarea name="log" id = "log" rows = "15" cols = "75" ></textarea>

[...]
 

 ________________________________________________________________________________________________________

 

y en documento GrFinger.js

 

en el método CallIdentify() tenemos el siguiente código.

 

[...]

 

function CallIdentify(rawImg, w, h, res){
try
{
alert(rawImg);
var tpt = new Array(1000);
var tpt_size =GrFingerX.GR_MAX_SIZE_TEMPLATE;
   var result = GrFingerX.Extract(rawImg, w, h, res, rawImg, tpt_size ,0);
alert(result);
//var result = GrFingerX.Extract(rawImg, w, h, res, GrFingerX.GR_DEFAULT_CONTEXT,GrFingerX.GR_FORMAT_DEFAULT);
var Objret = eval('(' + result + ')'); //Adaptate the return to an Object form
var ret = GrFingerX.FreeJSON(result);

if(Objret.ret < 0){
document.getElementById('log').value = document.getElementById('log').value + "Extract Error = " + Objret.ret + "\n";
document.getElementById('log').scrollTop = document.getElementById('log').scrollHeight;
}
else
{
post(Objret.tpt,0,2);
}
}
catch(e)
{
alert("error = "+e);
}

 

[...] 

 

El problema que tenemos se localiza en el método   GrFingerX.Extract() el cual tiene la siguiente firma según su API

 

int Extract (ref object RawImage, int width, int height, int res, ref byte[] tpt, ref int tptSize, int context)

 

[in] rawImage   --  A raw grayscale fingerprint image.
[in] width          --  [in] Fingerprint image width in pixels.
[in] height         --  Fingerprint image height in pixels.
[in] res              --  Fingerprint image resolution in DPI.
[out] tpt            --  The byte array in which the fingerprint template will be stored.
[in,out] tptSize  --   [in] The maximum size in bytes of the byte array supplied. [out] The size in bytes of the extracted template.  

[in] context       --   Context in which the extraction will be performed. 

 

al ejecutar nuestro código en la sección de identify nos arroja el error -114

esto ocurre en la línea

 

var result = GrFingerX.Extract(rawImg, w, h, res, rawImg, tpt_size ,0);
alert(result);

en la cual solicitamos la extracción y la impresión con un alert con lo que nos devuelve el error -114 y según su API significa esto:

GR_ERROR_NOT_ENOUGH_SPACE    -114    Supplied template buffer is too small to hold the template 

Lo cual no nos queda muy claro ya que en primer lugar la firma del método indica que  el 5 parametro que es tpt es un arreglo de bytes

 

[out] tpt -- The byte array in which the fingerprint template will be stored. 

 

Pero no hayamos el error ya que en nuestro código indicamos que el 5 parametro es un arreglo en javascript y aun así no funciona el ejemplo. 

 

var tpt = new Array(1000);
var tpt_size =GrFingerX.GR_MAX_SIZE_TEMPLATE;
var result = GrFingerX.Extract(rawImg, w, h, res, rawImg, tpt_size ,0); 

 

Queremos saber si estamos aplicando bien el método  Extract()

 

en el foro encontramos esto

I solved the problem, the cause is that the method "GrFinger.ExtractJSON" does not exist, the correct methods are

GrFingerX.ExtractEx ​​(rawImg, w, h, respectively, rawImg, tptSize, 0, 1);
GrFingerX.Extract (rawImg, w, h, respectively, rawImg, tptSize, 0);

Run these methods and the execution was successful

Por que razon parece dos veces el parametro rawImg????

 

que según el programador coloca rawImage en el 5to parametro y asegura que le funciono correctamente pero en nuestro código no funciona!!!

 

Nuestra principal  duda se localiza en el 5 parametro del método extract y si lo estamos aplicando correctamente  

 

Saludos y esperamos su respuesta. 

 

JB
Offline
Joined: 2010-09-15
Rate this post:
0
No votes yet

Estimado cliente,

 

Usted debe usar la función ExtractJSON, dicha función está en la última actualización de FP SDK 2009, favor de descargar y probar.

 

Jan

manunit
Offline
Joined: 2012-04-03
Rate this post:
0
No votes yet

Gracias eso ya me funciono!!!!

 

Pero tenemos otro problema.

 

En que formato guarda las huella en la base de datos el script php del ejemplo, ya que tenemos problemas al recuperarla y compararla en el apartado de identify.

Además queremos guardar la huella en jpg pero no sabemos como las guarda griaule en la base de datos, es decir, si hace un Base64 o unicamente escapa los caracteres que entran en conflicto con la base de datos como es el caso de usar los metodos

mysql_escape_string()  y  addslashes()

 

En la sección de enroll

public function enroll($tpt)
{
// Insert the template into database
mysql_query("INSERT INTO somhue (huehuella) VALUES ('".$tpt."')",$this->db);
//return sqlite_last_insert_rowid ($this->db);
return mysql_insert_id($this->db);

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

y en la sección de identify tenemos esto

 

// Identify a fingerprint
public function identify ($rcvtpt)
{
// Starting identification process

$ret = $this->GrFingerX->IdentifyPrepareBase64($rcvtpt, $this->GR_DEFAULT_CONTEXT); 

Estamos utilizando  

if($ret!=$this->GR_OK)
return $ret;
// Getting enrolled templates from database
$query = mysql_query("SELECT * FROM huellas",$this->db);
$score = 0;
while ($row = mysql_fetch_array($query, MYSQL_ASSOC))
{
// Comparing the current template and the given one
$ret = $this->GrFingerX->IdentifyBase64($row["huella"],$score,$this->GR_DEFAULT_CONTEXT);
if( $ret == $this->GR_MATCH)
return $row["id_usu"];
}
return 0;

 

Gracias y ojala puedan auxiliarnos. 

 

JB
Offline
Joined: 2010-09-15
Rate this post:
0
No votes yet

Estimado cliente,

 

El template se guarda en un string de base 64.

Las imágenes se almacenan como BMP temporalmente en la ruta c:

 

Jan

manunit
Offline
Joined: 2012-04-03
Rate this post:
0
No votes yet

Saludos Gracias por su pronta repuesta.

 

Ya probamos su ejemplo de comparación en la sección identify y en la de enroll y todo funciona correctamente, la dificultad que tenemos es que necesitamos vincular el sistema con una base que contiene huellas en formato bmp, es decir, subimos huellas bmp (que es el formato por default que utiliza la aplicación)  a la base mysql  utilizando base64_encode() a cada huella,  pero al momento de realizar la comparación en identify devuelve Not Found.

Creemos que esto sucede por que la codificación de la imagen bmp con base64_encode() no es compatible con la forma en la que la aplicación realiza en el enroll y por lo tanto con la que realiza el identify

 

En identify existen dos metodos:

IdentifyPrepareBase64() e IdentifyBase64()

Que son utilizados para realizar la comparación con la huella almacenada en la base da datos a través del enroll, pero entonces es aquí donde requerimos un apoyo ya que entra en conflicto con las huellas que agregamos de forma externa en formato bmp codificadas con base64_encode(), por ende, que trato o manipulación requere ese tipo de imagenes para que se puedan almacenar en un formato que "entienda" identify.

 

Gracias y espero sus comentarios.

 

JB
Offline
Joined: 2010-09-15
Rate this post:
0
No votes yet

Estimado cliente,

 

Por lo que entiendo en su último post es que usted tiene ya un repositorio de huellas en formato bmp.

Usted ha extraido el template de dichas huellas con nuestra librería?

 

Jan

manunit
Offline
Joined: 2012-04-03
Rate this post:
0
No votes yet

Saludos Gracias por responder tan rapido.

 

EL contexto que tenemos es el siguiente, aplicamos y extendimos el ejemplo de php-javascript que viene en la página y ya funciona el enroll y el identify pero unicamente con las imagenes o huellas que son ingresadas desdes el método enroll() lo cual ya es un gran avance pero ahora tenemos el problema de que tenemos huellas en formato bmp almacedas en una carpeta y que deseamos agregarlas a la base de la aplicación, es decir subir imagenes bmp (*) a la base y después aplicarles el identify para ver si funciona correctamente la comparación de la huella fesca con las almacenadas en la base. 

Para subir las imagenes creamos un script en php que carga imagenes a la base mysql  y que utiliza el método base64_encode() de php cuya firma es

string base64_encode ( string $data )-->  http://php.net/manual/es/function.base64-encode.php 

 

Pero ya en la aplicación el método identify() no reconoce esas huellas.

 

Requerimos aplicar algún método de la SDK que permita obtener el template de una imagen bmp para poder codificarla en el formato correcto? 

Si es el caso que método (os) de la libreria SDK 2009 debemos aplicarles a las imagenes antes de ser almacenadas para que sean compatibles con la aplicación y sean reconocidos por los métodos identify() y verify(). 

 

El siguiente es un pedazo del código en php que utilizamos para subir las imagenes bmp a la base de datos-

 

$i=1;
while ($archivo = $directorio->read()){
if($archivo!="." AND $archivo!=".."){
$file = $path."\\".$archivo;
$gestor=fopen($file,"rb"); <-- abrimos el archivo 
echo("Archivo = $file ".filesize($file)."<br>");
$contenido = base64_encode(fread($gestor, filesize($file)));   <--  línea que codifica la huella a almacenar y que deseamos usar en identify
[...]
mysql_query($qryInsert) or die("ERROR");
}

 

(*) La imagenes son huellas del personal que tenemos almacenadas en formato bmp y que deseamos agregarlas a la base de la palicación. 

 

Gracias y esperamos su respuesta. 

manunit
Offline
Joined: 2012-04-03
Rate this post:
0
No votes yet

Saludos Jan. Espero que aun puedas apoyarnos a resolver ese problema que tenemos.

Gracias estamos en contacto. 

JB
Offline
Joined: 2010-09-15
Rate this post:
0
No votes yet

Estimado cliente,

 

Entendemos que usted tiene otro flujo de trabajo para su aplicación.

Está cargando imágenes BMP con esta variable $file?

Corrobore que realmente esta cargando correctamente las imágenes de la BD para que pueda usar la función ExtractJSON que extrae las características de la huella osea el template. Con eso usted va poder hacer usar las funciones IdentifyPrepareBase64/IdentifyBase64 y VerifyBase64 segun sea el caso.

 

Jan

manunit
Offline
Joined: 2012-04-03
Rate this post:
0
No votes yet

Gracias por respondernos, nos han servido de mucha ayuda.

 

Estos dias hemos estado estudiando el codigo  del ejemplo en php que compara una huella con otra, el ejemplo es este:

 

public function identify ($rcvtpt)
{
// Starting identification process
$ret = $this->GrFingerX->IdentifyPrepareBase64($rcvtpt, $this->GR_DEFAULT_CONTEXT);
if($ret!=$this->GR_OK)
return $ret;
// Getting enrolled templates from database
$query = mysql_query("SELECT * FROM huellas",$this->db);
//$query = mysql_query("SELECT * FROM somhue",$this->db);
$score = 0;
while ($row = mysql_fetch_array($query, MYSQL_ASSOC))
{
// Comparing the current template and the given one
//$ret = $this->GrFingerX->IdentifyBase64($row["huella"],$score,$this->GR_DEFAULT_CONTEXT);
$ret = $this->GrFingerX->IdentifyBase64($row["huella"],$score,$this->GR_DEFAULT_CONTEXT);

if( $ret == $this->GR_MATCH)
return $row["id_usu"];
//return $row["id"];
}
return 0;

 

La duda que tenemos es como se compara la huella fresca obtenida  del lector,  con las que ya estan almacenadas en la base de datos. 

hemos tratado de ver el funcionamiento de las funciones   IdentifyPrepareBase64() ,  IdentifyBase64() y VerifyBase64() para el sdk2009  en el api de ayuda que ustedes proporcionan, para ver que significa cada una y ver que significan sus parametros, pero no las hemos encontrado. Por eso tenemos duda de como implementarlas correctamente. Nos seria de gran ayuda, que si es posible, nos proporcionen un link hacia el api de ayuda de estas funciones o si no, que nos envien la especificacion de estas funciones.

 

ATTE Jaquelin Enriquez

 

 

 

 

manunit
Offline
Joined: 2012-04-03
Rate this post:
0
No votes yet

Saludos Jan.

 

Se nos olvido preguntar lo siguiente.

 

Tenemos un conjunto de huellas en formato wsq como archivos y requerimos subir a la base de datos para después compararlas usando los métodos de la sdk2009 con el lector. Pero no hemos logrado crear un objeto WSQ para poder llamar a los métodos LoadFromFile(), RawImageToHandle() y Wsq2Raw() de la libreria. Así la primera pregunta es, cómo creamos un objeto de la clase WSQ?

 

 por ejemplo para crear un objeto de la clase GrFinger de la libreria SDK 2009 tiene la siguiente estructura:

$this->GrFingerX = new COM('GrFingerX.GrFingerXCtrl.1') or die ('Could not initialise object.');
com_load_typelib('{A9995C7C-77BF-4E27-B581-A4B5BBD90E50}');

 

Pero en la api de wsq no se ve como crear el objeto wsq por lo cual nos ayudarías en saber como hacerlo.

 

Segunda duda, cuando el lector captura la huella usando la función enroll y almacena el "tpt" que es lo que en realidad esta almacenando la aplicación es decir, esta almacenando el template de la huella, o la imagen de la huella en algún formato como bmp, jpg o en  wsq  y por último "esa cosa" que guarda es encriptada usando algún metodo? por ejemplo 

 

DecodeBase64
EncodeBase64
InstallLicense
IsBase64Encoding

 

de la libreria   Fingerprint SDK 2009. 

 

Gracias y esperamos una respuesta.

 

JB
Offline
Joined: 2010-09-15
Rate this post:
0
No votes yet

Estimado cliente,

 

En el archivo identify.html se tiene:

<SCRIPT FOR="GrFingerX" EVENT="ImageAcquired(id, w, h, rawImg, res)" LANGUAGE="javascript">

GrFingerX.CapSaveRawImageToFile(rawImg, w, h, "C:\\teste.bmp", 501);

Start();

if(document.getElementById('img').style.display == 'none')

document.getElementById('img').style.display = 'block';

CallIdentify(rawImg, w, h, res);

</SCRIPT>

 

Esa función que está en negrita llama al js.

 

function CallIdentify(rawImg, w, h, res){

try

{

var result = GrFingerX.ExtractJSON(rawImg, w, h, res, GrFingerX.GR_DEFAULT_CONTEXT,GrFingerX.GR_FORMAT_DEFAULT);

var Objret = eval('(' + result + ')');//Adaptate the return to an Object form

var ret = GrFingerX.FreeJSON(result);

if(Objret.ret < 0){

document.getElementById('log').value = document.getElementById('log').value + "Extract Error = " + Objret.ret + "\n";

document.getElementById('log').scrollTop = document.getElementById('log').scrollHeight;

}

else

{

post(Objret.tpt,0,2);

}

}

catch(e)

{

alert(e);

}

}

 

ExtractJSON: Extrae las características de la huella (template), está función es igual al Extract del FP SDK, sólo que devuelve un template preparado para ser envíado en la web.

post: Es la que envía el template preparado al PHP.

 

Todas las funciones que tienen "base64" tiene el mismo comportamiento, sólo que trabajan con aquel template preparado para la web, por ejemplo el identifyBase64 es el identify, el primero trabaja con base64 y el otro con binario.

 

--------------

 

Con respecto a trabajar con archivos WSQ el código GriauleAfisWsqX.GrAfisWsq es {C76BCBC0-106E-4719-B1D9-66F020CBCD3D}

 

Jan

 

 
manunit
Offline
Joined: 2012-04-03
Rate this post:
0
No votes yet

Saludos Jan.

Gracias por responder pero ahora tenemos un problema.

Queremos usar el método  LoadFromFile() de la libreria Griaule WSQ Para ello creamos un objeto WSQ usando 

 

$GrFingerWSQ = new COM('GriauleAfisWsqX.GrAfisWsq') or die('Could not initialise object WSQ.');
com_load_typelib('{C76BCBC0-106E-4719-B1D9-66F020CBCD3D}'); 

 

Y aplicamos la siguiente instrucción

 

  1  $t = new Template($nomArch); 
  2  $t->verValores(); 

  3  $rawImgCode = $GrFingerWSQ->LoadFromFile($t->file, $t->rawImg, $t->width, $t->height, $t->ResX, $t->ResY); 

 

Para ello basandonos en los ejemplos de las firmas de los métodos creamos una clase en PHP que crea un objeto template es decir $t = new Template($file) que recibe como parametro la ruta del archivo a cargar.

 

El código de la clase Template() es:

 

<?php class Template{
var $file;
var $rawImg;
var $width;
var $height;
var $ResX;
var $ResY;

function __construct($f){
$this->file = $f;
$this->rawImg = array();
$this->width = 210;
$this->height = 200;
$this->ResX = -1;
$this->ResY = -1;
}

function verValores(){
echo "file = $this->file<br>";
echo "rawImg = $this->rawImg<br>";
echo "width = $this->width<br>";
echo "height = $this->height<br>";
echo "ResX = $this->ResX<br>";
echo "ResY = $this->ResY<br>";
}
}
?> 

 

 Pero al correr la línea 3 es decir: $rawImgCode = $GrFingerWSQ->LoadFromFile($t->file, $t->rawImg, $t->width, $t->height, $t->ResX, $t->ResY); que hace uso del objeto $t que es una instancia de Template() devuelve el siguiente error:

 

'Parameter 1: Los tipos no coinciden. ' in C:\xampp\htdocs\GrFingerService\subir_huellasv2.php:44 Stack trace: #0 C:\xampp\htdocs\GrFingerService\subir_huellasv2.php(44): com->LoadFromFile('C:\xampp\htdocs...', Object(variant), 210, 200, -1, -1) #1 C:\xampp\htdocs\GrFingerService\subir_huellasv2.php(83): grabaArchivos('C:\xampp\htdocs...') #2 {main} 

 

Lo cual indica que los parametros no coinciden con los requeridos por la firma.

Nuestra duda es saber si estamos ingresando parametros correctos y si el método que estamos utilizando es el adecuado.

Gracias y esperamos tu respuesta. 

 

JB
Offline
Joined: 2010-09-15
Rate this post:
0
No votes yet

Estimado cliente,

 

Revise el siguiente link:

 

http://www.griaulebiometrics.com/en-us/manual/wsq-sdk/programming-reference-guide/activex/loadfromfile

 

Hay parámetros que se pasan por referencia, $t->file no es un template sino una imagen.

$GrFingerWSQ->LoadFromFile($t->file, &$t->rawImg, &$t->width, &$t->height, &$t->ResX, &$t->ResY)

 

Jan