jueves 27 de agosto de 2009

Utilizar lector de huellas en nuestras aplicaciones .net - Segunda parte

En esta entrada le mostraré la forma en la que pueden implementar el lector de huellas digitales (o dactilares) en nuestras aplicaciones .net.


El ejemplo esta hecho en C# con VS 2010, MySQL y la librería de Griaulle (fingerpint SDK 2009); si no recuerdan de donde obtener la librería, pueden consultarlo aquí. Se utilizó, también, el connector/net para enlazar a MySQL con C#.





Lo primero que debemos hacer es instalar el Griaulle Fingerprint SDK 2009, este ejemplo está hecho con la versión 2009 del SDK. Es importante recordar la ruta de la instalación.

Como segundo paso debemos configurar nuestra base de datos, ya que la información se almacenará en dicha base de datos, en el ejemplo realizado tenemos una base de datos llamada “finger” y una tabla llamada “data”, la tabla tiene 5 campos:
Id (int)
texto_asociado (text): en este campo almacenaremos un texto de referencia para identificar el registro
template (mediumblob): aquí almacenaremos el template extraído de la huella.
Imagen (mediumblob): este campo no se utiliza en este ejemplo
Calidad_template (int): sirve para almacenar la calidad del template extraido y almacenado en el campo “template”.


Una vez creado el proyecto en VS, el primer paso es agregar la referencia de la librería de Griaulle a nuestro proyecto, eso lo hacemos con un clic con el botón derecho en el explorador de soluciones (Solution Explorer), en la sección de referencias (references), del menú emergente seleccionamos: Agregar referencia (Add reference), posteriormente seleccionamos la pestaña Examinar (Browse) y tenemos que elegir el directorio de instalación del SDK (en este caso: C:\Program Files\Griaule\Fingerprint SDK 2009\bin\GriauleFingerprintLibrary.dll); realizamos los mismo pasos para el connector/net que nos servirá para la Base de Datos (la dirección en este caso es: C:\Program Files\MySQL\MySQL Connector Net 6.0.4\Assemblies\MySql.Data.dll). Ya que hemos agregado las referencias, podemos iniciar con nuestro proyecto.

En el ejemplo mostrado, hemos diseñado un formulario con 2 opciones:
Registrar: Inserta la información de la huella recién adquirida en la base de datos, junto con el texto asociado.

Identificar: Identifica la huella, comparando la huella recién extraida contra cada una de las huellas almacenadas en la base de datos.

Hace falta una opción importante: Verificar, pero es muy fácil de implementar.
Si no recuerdan lo que significa Identificar, Verificar o algún otro concepto, este es el momento perfecto para consultarlo en este articulo.


Al momento de utilizar el fingerprint SDK, lo que debemos hacer es declarar e inicializar un objeto del tipo FingerprintCore:
GriauleFingerprintLibrary.FingerprintCore core = New GriauleFingerprintLibrary.FingerprintCore();

Después, declaramos los manejadores de los eventos onStatus (se dispara cada vez que un lector de huellas es conectado o desconectado) y onImage (se dispara cada vez que una imagen es adquirida por algún lector):

core.onStatus += new GriauleFingerprintLibrary.StatusEventHandler(core_onStatus);
core.onImage += new GriauleFingerprintLibrary.ImageEventHandler(core_onImage);

Uno de los requisitos para poder utilizar la libreria es “inicializarla”, es decir, indicar que vamos a iniciar el uso de la librería:

core.Initialize();

Hecho esto, podemos indicar al lector que vamos a hacer uso de la captura de huellas:

core.CaptureInitialize();

--------------------------------
Texto agregado el 18/12/2009: Personalmente he optado por declarar los eventos y realizar las inicializaciones correspondientes en el evento load del formulario.
--------------------------------

Hasta este punto hemos iniciado la captura de huellas con nuestro lector y hemos definido la función que se ejecutará cada vez que una huella se adquiere del lector (con el evento onImage) y la función que se ejecuta cuando un lector es conectado o desconectado en nuestro equipo (con el evento onStatus).

En la función que se ejecuta cuando el lector es conectado al equipo, debemos indicarle a la librería que debe iniciar la captura de huellas con ese lector, esto lo hacemos de la siguiente manera:


void core_onStatus(object source, GriauleFingerprintLibrary.Events.StatusEventArgs se)
{
if (se.StatusEventType == GriauleFingerprintLibrary.Events.StatusEventType.SENSOR_PLUG)
{
core.StartCapture(source);
}
}

/*--------Añadido el 09 de Marzo del 2010------------*/

La función onImage que utilizamos en el ejemplo hace una comprobación de la calidad de la imagen obtenida del lector, si es de mala calidad se debe volver a capturar una huella, si es de calidad media se pregunta al usuario si desea continuar y si es de buena calidad se continúa sin ningún problem:

        void core_onImage(object source, GriauleFingerprintLibrary.Events.ImageEventArgs ie)
        {
            buttonOK.Enabled = groupBox1.Enabled = false;

            try
            {
                imagenHuella = ie.RawImage;
                core.Extract(imagenHuella, ref templateHuella); //  extraemos la informacion de la huella y almacenamos esa informacion en templateHuella (se tiene que pasar como referencia a la funcion)
               
                switch(templateHuella.Quality)
                {
                    case 0:     // en caso de que la huella sea de mala calidad, se tiene que volver a extraer la huella
                        labelCalidad.Text = "La huella es de mala calidad, vuelva a intentar";
                        return;
                   
                    case 1:     // si la huella es de calidad media, preguntamos si desean volver a extraerla
                        labelCalidad.Text = "Calidad media";
                        if (MessageBox.Show("la huella es de una calidad media, desea continuar?", "", MessageBoxButtons.YesNo) == DialogResult.Yes)
                            break;
                        return;                    

                    case 2:     // si la huella es de buena calidá, se procede con el programa
                        labelCalidad.Text = "Huella con buena calidad";
                        break;
                }

                buttonOK.Enabled = groupBox1.Enabled = true;
               
            }
            catch (System.Exception exc)
            {
                MessageBox.Show(exc.Message);
            }
        }

/*-----------------Aquí termina lo añadido el 09 de Marzo del 2010----------------*/




La condición if() es para verificar que se ha conectado un lector (recuerden que también se ejecuta el evento onStatus cuando se desconecta un lector)

La instrucción core.StartCapture(source); inicia la captura con el lector recién conectado mediante el objeto source, que contiene los identificadores del lector conectado.

En este momento, si colocamos una huella en el lector, se disparará también el evento onImage, para poder manejar la huella, debemos extraer el template y almacenarlo en memoria para poder insertarlo en la base de datos, eso lo hacemos con la función Extract(…)

GriauleFingerprintLibrary.DataTypes.FingerprintRawImage imagenHuella;
imagenHuella = ie.RawImage;
core.Extract(imagenHuella, ref templateHuella);

en la función Extract(…), el parámetro imagenHuella es la imagen original de la huella adquirida y el parámetro templateHuella es el objeto donde se almacenará el template que se extraiga a partir de imagenHuella.

Ya que tenemos el template, estamos listos para insertar el registro en la base de datos, es importante que sea mediante parámetros, en el ejemplo hemos usado nuestra propia librería, por lo que la instrucción que usamos es la siguiente:

bd.InsertarRegistroParametrizado("INSERT INTO data (texto_asociado,template,calidad_template,imagen) VALUES('"
+ txtBxRegistrar.Text + "',@template," + templateHuella.Quality.ToString() + ",'')",
"@template", (object)templateHuella.Buffer);


Como requirimiento minimo se debe insertar el template de la huella y la calidad que tiene dicho template (se obtiene con la propiedad templateHuella.Quality

En el código disponible se puede observar cómo insertar registros con parámetros.

Hasta este momento tenemos tenemos al menos un registro en la base de datos, ahora podemos iniciar el proceso de identificación.

Para llevar a cabo el proceso de identificación es necesario recuperar cada uno de los registros existentes en nuestra base de datos para poder compararlos uno por uno. Para poder ir almacenando temporalmente los registros de la base de datos, debemos crear un objeto donde almacenemos el template

string consulta;
byte[] dataTemp; //nos permitirá almacenar temporalmente el template de la B.D.
GriauleFingerprintLibrary.DataTypes.FingerprintTemplate templateTemp;
int precision,calidad;

consulta = "select texto_asociado, template, calidad_template from data where 1=1";
MySql.Data.MySqlClient.MySqlDataReader rdr = bd.EjecutarConsulta(consulta);
//debemos preparar la libreria para la identificacion de huellas
core.IdentifyPrepare(templateHuella);

while (rdr.Read())
{
dataTemp = (byte[])rdr["template"]; //extraemos el template desde la B.D.
calidad = (int)rdr["calidad_template"]; //extraemos la calidad de ese template

/* Creamos un nuevo objeto del tipo temporal "FingerprintTemplate" y asignamos las propiedades del template que acabamos de extraer de la B.D.*/
templateTemp = new GriauleFingerprintLibrary.DataTypes.FingerprintTemplate();
templateTemp.Buffer = dataTemp;
templateTemp.Size = dataTemp.Length;
templateTemp.Quality = calidad;
if ((core.Identify(templateTemp, out precision))==1) //si el template cumple con los requisitos de presición
{
MessageBox.Show(rdr["texto_asociado"].ToString());
break;
}
}

En el código anterior, con el ciclo while(rdr.Read()){…} se va obteniendo cada uno de los registros de la base de datos uno por uno, dentro del ciclo asignamos la información del template en un arreglo de bytes, con la condición if(…) determinamos si el template de la base de datos coincide con el template recién extraido.

Cualquier duda, comentario o sugerencia (en especial sugerencias) sobre el código, no duden en dejar su comentario.
Tal ves les interese cómo detectar rostros en sus aplicaciones

88 comentarios:

  1. Gracias por la explicacion, me parece muy util, aunque hay lugares donde no se dice donde va el codigo (o al menos yo en lo particular no me ubico tal vez)

    El enlace de la descarga del codigo fuente que has explicado no funciona.

    Si pudieras subirlo a otro lugar de descargas se agradece.

    Saludos.

    ResponderSuprimir
  2. hola sas que llegue a tu blog porque buscaba info para poder programar con un fingerprint y veo que tu tienes un codigo namas que el link para descargar el codigo ejemplo no jala, lo podrias subir de nuevo please?? xD

    ResponderSuprimir
  3. Este último enlace si funcionó correctamente, pero con el fin de ayudar a todos a la vez, decidi quitar el enlace al código fuente, por lo que si tienen alguna duda pueden dejarla como comentario y con gusto les ayudaré, con esto todod podrán ver los avances.

    ResponderSuprimir
  4. los manejadores de los eventos en donde van, he empleado otra libreria y solo he llegado a insertar la template en la BD pero ahora no se como sacarla para comparla, encontre este blog y aunque es diferente la libreria me gustaria implementarla, pero me he topado con que no salen estos manejadores, si pudieran ayudarme seria les agradeceria muchisimo

    ResponderSuprimir
  5. Maribel:

    Los eventos personalmente los he declarado en el evento load del formulario.

    El evento onStatus se dispara cuando conectamos o desconectamos un lector
    y el evento onImage es cuando se adquiere una imagen

    ResponderSuprimir
  6. Por favor necesito tu ayuda al momento de colocar los eventos en el load del formulario me da un error en: core.onStatus += new GriauleFingerprintLibrary.StatusEventHandler(core_onStatus); porque no estoy declaranado el core_onStatus, mi pregunta como es que tu le declaraste o a que estas haciendo referencia?... gracias

    ResponderSuprimir
  7. anonimo:

    Te explico la que significa esto:
    core.onStatus += new GriauleFingerprintLibrary.StatusEventHandler(core_onStatus);

    "core" es el nombre de un objeto de tipo FingerprintCore, para hacer eso tienes que agregar la referencia de la libreria de Griaule a tu proyecto.
    "core.onStatus" indica que vamos a manejar el evento onStatus del objeto core y que la funcion que va a manejar ese evento es "core_onStatus", si estas desarrollando con Visual Studio puedes hacer ese codigo de forma automatica.

    tu funcion core_onStatus debe ser de tipo vacia y debe de aceptar un parametro de tipo "object" y otro de tipo "StatusEventArgs"

    void core_onStatus(object source, GriauleFingerprintLibrary.Events.StatusEventArgs se)
    {
    }

    ResponderSuprimir
  8. Que ta amigo, oie , la line esta :

    bd.InsertarRegistroParametrizado("INSERT INTO data (texto_asociado,template,calidad_template,imagen) VALUES('"
    + txtBxRegistrar.Text + "',@template," + templateHuella.Quality.ToString() + ",'')",
    "@template", (object)templateHuella.Buffer);


    tendras el codigo de InsertarRegistroParametrizado ? tengo problemas al intertar ya el registro, solo me agrega System.Byte[].


    saludos atte Edgar V.

    ResponderSuprimir
  9. anonimo:

    de casualidad encontre el codigo de la funcion:

    public int InsertarRegistroParametrizado(string sql,string nombreParametro, object parametro)
    {
    MySqlCommand comando = new MySqlCommand(sql, this.conexion);
    comando.Parameters.Add(new MySqlParameter(nombreParametro, parametro));
    int id = comando.ExecuteNonQuery();

    return id;
    }


    necesitas tener una conexion abierta con el servidor.

    ResponderSuprimir
  10. Gracias... Muy bueno el tutorial...
    justo en necesitamos en mi empresa implementar el manejo de huella..

    Lo unico que no encuentro el link para bajar el codigo...

    cual es la url?

    ResponderSuprimir
  11. Este comentario ha sido eliminado por un administrador del blog.

    ResponderSuprimir
  12. gmemo:

    Ademas de que perdi el dominio donde mantenia el codigo fuente, la idea es que las dudas que tengas las puedas comentar por este medio.

    Probablemente alguien mas tenga las mismas dudas.

    ;-)

    ResponderSuprimir
  13. Hola

    Estoy desarrollando un sistema de huella digital para mi recidencia profesional pero en el momento en que corro el programa me sale un error en la libreria griauleFringerprintLibrery dice que es invalida.....quiciera saber si me podria ayudar o si tienes esta libreria que me la pueda pasar....


    de ante mano te lo agradesco mucho...:D.....

    ResponderSuprimir
  14. Hola
    esta muy padre tu explicacion yo anteriormente habia descargado tu proyecto y esop me ayudado mucho para desarrollar mi proyecto de recidencia, pero tengo un error, no se si podrias ayudarme dice que la licencia del graulefingerprintLibrery no es valida no se si pudieras ayudarme o pasarme esa libreria.....

    de ante mano te lo agradesco mucho....:d

    ResponderSuprimir
  15. Anonimo:

    La licencia es la de prueba que ofrece Griaulle en su página, si pudieras poner un poco mas de información sobre el error sería más fácil ayudarte.

    ResponderSuprimir
  16. El error que me sale es el siguiente:

    No se puede cargar el archivo o ensamblado 'GrialueFingerprintLibrary', Version = 1.1.0.2,Culture=neutral,PublicKeyToken=0cd8a94f71f97144' ni una de sus dependencias. El sistema no puede hallar el archivo especificado.


    Ya descargue de la pag de Graule la version de prueba y renombre esa libreria pero no me la acepto...

    Agradesco tu ayuda.....y espero tu respuesta

    ResponderSuprimir
  17. en mi blog: http://nomejodasporfavor.blogspot.com/ tengo un ejemplo con lector de huellas un poco parecido, pero con la versión 2007, tal vez puedan solucionar algunas de sus dudas.

    ResponderSuprimir
  18. De antemano le doy gracias por el tiempo y por la disposición suya para enseñar, pero tengo una inquietud así usted ya lo halla aclarado en un comentario anterior pero no me quedo claro core_Onimage ya que no me deja avanzar

    ResponderSuprimir
  19. analisis de objetos:

    conla libreria y con el lector de huellas microsoft puedes "controlar" el evento que se dispara al colocar un dedo y el lector obtiene una imagen (a ese evento se le llama onImage), lo declaras asi:

    GriauleFingerprintLibrary.ImageEventHandler(core_onImage);

    y cada vez que el lector obtenga una huella se va a ejecutar la funcion core_onImage, la cual contiene el código necesario. He actualizado la entrada y agregué esa función.

    ResponderSuprimir
  20. Pueden poner el codigo completo, la verdad no me valida las huellas, algunas cosas esta muy ambiguas.

    gracias.

    ResponderSuprimir
  21. SE VE QUE ESTA BIEN EL CODIGO , YO ESTOY IMPLEMENTANDO UN APLICATIVO DE LECTOR DE HUELLA, HE IMPLEMENTE EL CODIGO EN C# PERO LO QUE NO COMPRENDO EL PORQUE NO ENTRA A LOS EVENTOS CUANDO CONECTO EL LECTOR.. PORFA ALGUIEN ME PUEDE AYUDAR DE ANTEMANO SE LO AGRADESCO ...
    -----------DE JOSE

    ResponderSuprimir
  22. hola oie soy cris yo tambien tengo que hacer el lector de huellas y tengo algunas dudas me puedes ayudar a entenderle?

    ResponderSuprimir
  23. Anthony:
    Prueba los ejemplos que incluye el sdk, si los ejemplos funcionan bien entonces copia todas las librerias .dll del ejemplo en tu carpeta "bin/debug" o "bin/release".

    Cris:
    Con gusto podemos ayudarte, te recomiendo que leas la primera y la segunda parte del articulo, despues nos dices cuales son tus dudas y con gusto te ayudamos.

    ResponderSuprimir
  24. Hola!!,estoy comenzando con esto y necesitaria hacer una aplicacion, para el control de ingreso de los empleados de varias sucursales, y lo que no me queda claro, es si la aplicacion tiene que estar instalada en cada sucursal(en la PC donde esta el lector) o puedo hacer una aplicacion centralizada para la captura de la informacion, no se que tipo de dato deja el lector, como veran estoy un poco perdida.

    Desde ya muchas gracias por la ayuda que me puedan brindar.
    Saludos,
    Noemi.

    ResponderSuprimir
  25. Hola buen día.

    Primeramente un agradecimiento por el gran aporte que haces con este tutorial.

    Al igual que el compañero de arriba me aparece este error:

    No se puede cargar el archivo o ensamblado 'GriauleFingerprintLibrary, Version=1.1.0.2, Culture=neutral, PublicKeyToken=0cd8a94f71f97144' ni una de sus dependencias. Se ha intentado cargar un programa con un formato incorrecto.

    Ya busque muchas maneras de solucionarlo y no encuentro el porqué. Hasta he llegado a suponer que tal vez la libreria sea para x86 y estoy programando bajo un SO de x64, pero en verdad lo dudo. Espero que nos puedas ayudar.

    Nuevamente muchas gracias!

    ResponderSuprimir
  26. Hace un momento publiqué una entrada en el blog acerca de un error común del otro compañero. (No se puede cargar el archivo o ensamblado 'GriauleFingerprintLibrary, Version=1.1.0.2, Culture=neutral, PublicKeyToken=0cd8a94f71f97144' ni una de sus dependencias. Se ha intentado cargar un programa con un formato incorrecto.)

    Como lo supuse, el problema era la plataforma de desarrollo que toma por defecto Visual Studio; Como la librería de Griaule está diseñada específicamente para x86, Visual Studio no puede generar proyectos para ambas plataformas, por tal motivo, uno debe indicarle al compilador que la aplicación será únicamente para x86. Explico:

    Nos vamos a las propiedades del proyecto, y en la ficha Generar (Build), en el apartado Destino de la plataforma (Platform target) seleccionamos x86.

    Con ésto, podemos utilizar la librería de Griaule.

    Espero que sirva. Muchas gracias!

    ResponderSuprimir
  27. fernalx:

    -Muchas gracias por el aporte, muchos lo aprovecharán.

    Noemi:
    -Tal como lo veo puedes hacerlo de las dos formas, tener una aplicacion en la que captures la informacion de forma centralizada o aplicaciones cliente que te permitan registrar nuevos usuarios y sus respectivos datos, lo que tendrias que hacer en el último caso es mandar la informacion de las huellas que obtiene la libreria a tu servidor de base de datos (lo que obtienes es un arreglo de bytes, por eso se debe almacenar como dato binario en nuestra base de datos).

    Pd. Cualquier duda que tengas, no dudes en preguntar.

    ResponderSuprimir
  28. hola. oie las funciones void core_onStatus(
    core_onimage(

    en que parte del formulario las colocaste? me marca error en VOID.

    de hecho ya las puse afuera, adentro..y no mas no. jaja..

    gracias°

    ResponderSuprimir
  29. -Cris:

    Si pudieras poner el error seria mas facil, sin embargo en el evento load (doble click en el formulario) tienes que agregar las siguientes lineas:

    core.onStatus += new GriauleFingerprintLibrary.StatusEventHandler(core_onStatus);
    core.onImage += new GriauleFingerprintLibrary.ImageEventHandler(core_onImage);

    Pon atencion a que los nombres de las funciones son: core_onStatus y core_onImage. Si presionas la tecla tab el Visual Studio te va generando automaticamente el codigo, incluida la declaracion de la fucion.

    ResponderSuprimir
  30. Alfonso muchas gracias por tu respuesta.
    Una pregunta mas: cuando una persona pasa el dedo por el lector, como se ejecuta la aplicacion para que el mismo vaya a buscar a la base de dato, hay que hacer una aplicacion residente para que lea esta informacion,y se ejecutan los eventos que mencionas en la explicacion??

    Muchas gracias por tu valiosa ayuda
    Noemi.

    ResponderSuprimir
  31. -Noemi:

    No entiendo mucho tu pregunta, pero supongo que:

    Cuando pasas el dedo sobre el lector se ejecutan los eventos y las respectivas funciones, ya que obtienes el template (en dichas funciones) esa misma funcion puede leer la informacion desde la base de datos y comparar la informacion obtenida, no es necesaria otra aplicacion, a la misma aplicacion le puedes agregar la funcionalidad necesaria.

    Espero que te refieras a eso :D

    ResponderSuprimir
  32. Gracias por la aportación, esá muy bien la explicacion para saber por donde tirar.

    Estoy echando un vistazo al manual de la SDK y me ha surgido una duda, no se si tú me puedes ayudar a aclararla: la SDK usa el FingerCap Driver USB q sustituye a los drivers de los propios dispositivos, y q es compatible con ciertos dispositivos. La duda es en los dispositivos soportados por la SKD hay algunos que sin embargo no son compatibles con el FingerCap USB, entonces no funcionarán las aplicaciones ocn esos dispositivos, o se puede implementar de la misma forma y usará los drivers del fabricante??

    un saludo y gracias!

    ResponderSuprimir
  33. Miriam:

    Realmente los unicos lectores que he usado son los Microsoft, pero supongo que en ese caso se utilizan los drivers del propio fabricante. Si lo averiguas nos dices, jeje.

    ResponderSuprimir
  34. Valentin CabralApr 30, 2010 05:47 PM

    Buenas tardes Alfonso, Baje el sdk de prueba y otro que disque esta listo para usarce, ya tengo todo el codigo, pero creo que la libreria no esta trabajando como dice, Ya que tengo entendido que el Procedimientos onStatus se genera cada vez que el Lector cambia de status, sea conectado o desconectado y el onImage cuando pones el dedo para ser escaneado.

    Ninguno de los eventos me los dispara, y ya tengo los procedimientos depurados, no me marca errores excepto cuando quiero inicializar el Lector, me dice que No Valid License Found. te comento donde puse cada uno de los codigos.

    la dclaracion del objeto core, la hice de forma general en el proyecto.

    declare las funciones de core_onStatus y core_onImage.

    los core.onStatus y core.onImage los declare en el load de la forma

    el core.CaptureInitialize() lo declare dentro de un boton

    el core.Initialize() en el boton2

    que me estara fallando? espero me puedas ayudar, necesito ayuda por fa.

    ResponderSuprimir
  35. Hola que tal, la verdad esta explicacion me parece bastante bien y te quiero agradecer por tu aporte, tengo una pregunta yo tengo un lector de huella digital microsoft es ocmpatible con la libreria o que lectores son compatibles con esta libreria de grauilee.

    Muchas gracias.

    ResponderSuprimir
  36. Francisco:

    no has intentado hacer la prueba de agregar la referencia a las librerias que se instalan con los ejemplos? tampoco has intentado ejecutar los ejemplos?.

    Yo tuve el mismo problema pero con la version anterior de la libreria, lo solucione hasta que consegui una licencia. Estas usando la version mas reciente?

    Under:
    si, el lector microsoft es compatible con esa libreria, tiene soporte para un gran numero de lectores. Puedes encontrar la lista de lectores compatibles en la pagina web (son muchos, no los conozcon todos, jeje)

    ResponderSuprimir
  37. hola tengo un error en la siguiente linea estoy perdido y quisiera ver si puedes ayudarme gracias

    core.Extract(imagenHuella, ref Convert.templateHuella); // extraemos la informacion de la huella y almacenamos esa informacion en templateHuella (se tiene que pasar como referencia a la funcion)

    switch (templateHuella.Quality)

    ResponderSuprimir
  38. ¿Los tipos de datos de MySQL mediumblob en MS SQL Server cuál sería?

    ResponderSuprimir
  39. ALFREDO:
    con esas lineas extraemos la informacion que realmente nos interesa de la huella que obtuvimos, despues (con el switch) intentamos determinar si la calidad de la huella es buena, regular o mala. Si no pones un poco mas de informacion sobre tu error seria mas facil ayudarte.


    fernalx:
    me parece que es binary.

    ResponderSuprimir
  40. core.Extract(imagenHuella, ref templateHuella);

    mi problema es qu eme sale un error en templateHuella me lo subraya con rojo y el error dice lo siguiente:

    "the name templateHuella does not exist in the current context"

    y a causa de este error me marca errores en todas las lineas en donde aparece templateHuella gracias por responder

    ResponderSuprimir
  41. ALFREDO:

    El error se puede traducir como "el nombre templateHuella no existe en este contexto" y es que Visual Studio no sabe de donde sacaste esa palabra, lo mas comun es que no este declarado el objeto o que este declarado con otro nombre.

    intenta declararlo, si ya esta declarado, comprueba que el nombre de ambos objetos es el mismo, me parece que lo debes declarar como FingerprintTemplate.

    ResponderSuprimir
  42. alfonso me pareces una persona muy capacitada y es por eso que acudo a ti para ver si me puedes ayudar,
    esque en la universidad necesito realizar un software que mediante un lector de huellas digitales reconozca y almacene estas y es por eso que te pido que si te es facil brindarme algunos tutoriales o algo de ayuda te estaria sumanete agradecido

    ResponderSuprimir
  43. vagos:

    Claro que podemos ayudarte, en este mismo blog tengo dos publicaciones que hablan de eso, la duda que tengas, pregunta y con gusto te respondemos.

    ResponderSuprimir
  44. hola mi nombre es Manuel Velasco, he intentado probar este codigo en visual 2005, agregue las referencias, ya hice mi tabla en mysql, pero no me corre nada y en la funcion core_onStatus siempre me marca conectado el lector de huellas, aunque este desconectado, ayudame porfa quiza este haciendo algo mal

    ResponderSuprimir
  45. hola soy manuel otra vez, ya me funciono, ya he podido insertar huellas en la base de datos, lo malo es que revisando la informacion en image todas son iguales y no se si esta bien pero todas son de 13 bytes, porfa echame la mano con esto

    ResponderSuprimir
  46. manuel:

    perdon por contestar hasta ahorita, te comento:

    a mi me paso algo parecido, pero mi error era que no estaba insertando en la base de datos el arreglo de bytes que tiene la informacion de la huella, si no el objeto al que pertenecia ese arreglo, es decir:

    la proiedad Buffer de nuestro objeto templateHuella mantiene el arreglo de bytes y yo insertaba en la base de datos el objeto templateHuella, tienes que insertar de la siguiente forma:
    (object)templateHuella.Buffer y tiene que ser con parametros.

    Si no se soluciona, podrias ponernos el texto que se inserta? los 13 caracteres.

    ResponderSuprimir
  47. BUEN DIA ALFONSO, OYE NO ENTIENDO QUE QUIERES DECIR CON ESO DE PARAMETROS, EXPLICAME PORFAS

    ResponderSuprimir
  48. hola,estuve debugueando la aplicacion y ps encontre que lo que me esta insertando en la base es esto:

    Insert into huella (descripcion, imagen, calidadtemplate) values ('','System.Byte[]','1'), por eso eso es que son 13 bytes

    esto es lo que mando en mi codigo:

    query = "Insert into huella " +
    "(descripcion, imagen, calidadtemplate) values (" +
    "'" + textBox1.Text + "','" + (object)templateHuella.Buffer + "'," +
    "'" + templateHuella.Quality.ToString() + "')";

    porfas algo se me esta escapando, echame una mano

    ResponderSuprimir
  49. Que tal,tambien ando con la aplicacion de huellas, pero cosa rara primera vez que veo que mandan a llamar esa libreria, puesto que en los ejemplo el que se agrega es el ActiveX GrFingerX.dll, de echo con este me ha dado algunos problemas, lo deja de reconocer el VS, o corre en mi maquina pero cuando lo instalo en una maquina para probar no extrae el template de la huella, otro problema es que se queda colgado el programa cuando se incia la libreria y salta el logo de trial de griaule.
    Crees que solo sea problema del ActiveX???
    mientras tanto probare con tu ejemplo...gracias :D

    ResponderSuprimir
  50. Hola, tu aplicacion me es muy interesante, sin embargo aun no logro que corra debidamente. Quizas puedas enviarme el codigo fuente completo a mi correo, si no fuera mucha molestia, te agradeceria bastante.
    franja173@hotmail.com
    (Francisco Perez)

    ResponderSuprimir
  51. manuel: tienes que utilizar 'parametros' puedes consultar la documentacion de mysql para usar 'comandos con parametros'

    kabra: no intentaste ejecutar los ejemplos?? ademas del activeX hay otra libreria que puedes utilizar, pero funciona un poco distinto.

    ResponderSuprimir
  52. Hola, estoy realizando una aplicacion de control de huellas

    talves puedas ayudarme enviandome el codigo de tu sistema ,
    ya tengo el SDK FingerPrint 2009 de Griaule, mi vida depende d ello,POR FEVOR S.O.S S.O.S
    necesito guardar y verificar datos de huellas digitales
    ESTOY DESESPERADO Y NO SE QUE HACER
    TU BLOG ES UN OASIS EN EL DESIERTO,
    BUENO GRACIAS
    Y ESPERO TU RESPUESTA

    mi correo es: amigo.unico@hotmail.com

    ResponderSuprimir
  53. HOLA ESCRIBO PARA AGRADECERTE LA AYUDA PRESTADA ME SIRVIO MUCHO, YA LOGRE QUE FUNCIONE, LO HICE CON PARAMETROS, AUNQUE SERIA BUENO AGREGAR EL CODIGO PARA RESOLVER TODAS LAS DUDAS, MUCHAS GRACIAS

    ResponderSuprimir
  54. buenas, si en lugar del lector de huella digital de microsoft utilizo el U. are U. 4000b, podra ser reconocido por el Griaule? Gracias de antemano

    ResponderSuprimir
  55. Oye disculpa no tendras el codigo de EjecutarConsulta, y si pudieras colocar el codigo completo de como te quedo, gracias por compartir tus conocimientos.

    ResponderSuprimir
  56. Que tal, estoy utilizando un lector de huellas zk6000 y el sdk de griule. Mi problemas es que a la hora de crear el objeto

    GriauleFinger.FingerprintCore core = new GriauleFinger.printLibrary()

    Me marca un error, de que se esperaba una declarion.

    Solicito tu ayuda, gracias..

    ResponderSuprimir
  57. necesito ayuda para crear el objeto de
    GriauleFingerprintLibrary.FingerprintCore objcore = New GriauleFingerprintLibrary.FingerprintCore()

    me marca un error de que se esperaba una declaracion

    ResponderSuprimir
  58. Disculpa soy nuevo en esto de los biometricos y no le ntiendeo muy bien, podrias enviarme el proyecto para poder revisarlo? trabajo con un lector ZK6000. Gracias de antemano si accedes te dejo mi correo.

    jesus.santos.c@gmail.com

    ResponderSuprimir
  59. Hola que tal alfonso tengo escasos dos dias para entregar un proyecto de logeo por huella digital espero nos podamos poner en contacto para que me puedas apoyar...
    mi correo hromeroes25@gmail.com
    De antemano Gracias!!!

    ResponderSuprimir
  60. Oye solo una duda general como puedo publicar la imagen de templateHuella que es byte[] en un picturebox?

    ResponderSuprimir
  61. mira queria rogarte de favor y me puedas mandar el ejemplito de la aplicacion den visual basic .net pork ya llevo tiempo intentando conectar el lector de huellas y no lo e conseguidoo te lo agradeceria bastante.. mi correo es: picxel0@gmail.com

    gracias de antemano

    ResponderSuprimir
  62. hola una pregunta como declaro el nombre core me muestra como error que no se a declarado el nombre 'core'... gracias de antemano

    ResponderSuprimir
  63. que funcionalidad tiene el object en
    public int InsertarRegistroParametrizado(string sql,string nombreParametro, object parametro)
    {
    MySqlCommand comando = new MySqlCommand(sql, this.conexion);
    comando.Parameters.Add(new MySqlParameter(nombreParametro, parametro));
    int id = comando.ExecuteNonQuery();

    return id;
    }

    ResponderSuprimir
  64. Hola Gracias a este Blog me Funciono tenia que realizar una aplicacion para el control de entrada/salida de empleados y gracias a este post lo realice!!!
    cualquier pregunta
    juandavidosoriolegarda@gmail.com

    ResponderSuprimir
  65. Hola, gracias por la explicación, la verdad muy útil, pero pudieras ayudarme a desarrollar un activex de reconocimiento es que necesito que vaya dentro de otra aplicación que no es visual basic aunque el desarrollo si es en visual basic 6. Por favor, ayudame. mi correo es gloria_tifany@hotmail.com, de antemano muchas gracias.

    ResponderSuprimir
  66. Alfonso, tengo un problema aquí:
    core.Extract(imagenHuella, ref templateHuella);
    me dice que ref no se ha declarado, qué debo hacer?

    ResponderSuprimir
  67. Hola ALfonso, tengo problemas en la siguiente parte:

    core.Extract(imagenHuella, ref templateHuella)
    sale un emnsaje que dice que ref no ha sido declarado, me peudes explicar qué hace ref?
    muchas gracias por tu ayuda

    ResponderSuprimir
  68. Buenas, amigo, pueden publicar el link del codigo fuente o me lo pueden enviar por correo por favor contrerg@gmail.com

    ResponderSuprimir
  69. Hola como estas, podrias colocar la url para bajarme el demo.. porfavor, gracias

    ResponderSuprimir
  70. olle me podrias mandar el programa completo porfavor mi correo el alejandro.ce.aguilar@gmail.com

    ResponderSuprimir
  71. podrias mandarme el programa completo

    ResponderSuprimir
  72. Buen Dia Alfonso Jesus Flores Alvarado soy Jonathan Montaña de Bogota, Colombia y estoy realizando un programa para acoplarlo a un lector de huella, y me urge de tu ayuda, por que mi problema es que no tengo C# y no se como cambiar el codigo a .NET. Agradezco tu ayuda me urge de verdad....

    ResponderSuprimir
  73. Ah! mi mail es jonathanyankee@hotmail.com.... gracias amigo!

    ResponderSuprimir
  74. Man porfa tengo una confusion super grande me podrias ayudar que tipos de objetos son los que manejas en templateHuella y el de imagenHuella le mando con un picturebox pero me manda error en el caso de templateHuella y en el caso e imaenHuella le mando GriauleFingerprintLibrary.DataTypes.FingerprintRawImage como tipo de variable para mantener la imagen extraida ahora el problema es que estos tipos no cojen y me esta dando errores porfa pon un poco de detalles de los objeto que usas man gracias

    ResponderSuprimir
  75. Este comentario ha sido eliminado por el autor.

    ResponderSuprimir
  76. Este comentario ha sido eliminado por el autor.

    ResponderSuprimir
  77. Hola Alfonso, si no es mucho pedir me podrias mandar el programa completo, stoy realizando un proyecto de la escuela utilizando huella, pero se tiene que implementar en un cluster, xfis mi correo es zulcar1001@gmail.com
    Gracias

    ResponderSuprimir
  78. Saludos a todos,

    Como veran la fecha de este post es del 2009, ya no se donde deje el código, hay detalles que ya no recuerdo y con gusto podre responder lo que pueda.

    Les recomiendo ver el resto de los comentarios, hay varias preguntas respondidas.

    Gracias.

    ResponderSuprimir
  79. Mil gracias Alfonso, con ayuda del codigo q subiste y el de mi catedraticos hicimos hasta donde se pudo, de todos modos mil gracias...

    ResponderSuprimir
    Respuestas
    1. Tambien puedes checar los ejemplos que vienen en la web del fabricante, en esos ejemplos me basé para escribir este post.

      Suprimir
  80. la funciòn InsertarRegistroParametrizado me marca un error de An object reference is required for the non-static field, methos or property.

    que significa o què puedo hacer?

    Juan Jimènez

    ResponderSuprimir
    Respuestas
    1. Te marca el objeto que tiene el error? me suena a que no estas inicializando el valor del objeto, es como que si lo tuvieras declarado pero nunca le asignas valor y tiene un valor NULL. Es como si tuvieras esto:

      string algo;
      MessageBox.Show(algo);

      en ese ejemplo la variable algo no tiene almacenado nada.

      Suprimir
  81. por favor podrias decirme que es templateHuella?? un picturebox?? un label?? o si es una clase me ayudas con el codigo? este es mi mail j.tenelema@hotmail.com es de suma urgencia, ayudame por favor

    ResponderSuprimir
    Respuestas
    1. para lo de templateHuella te recomiendo leer todo el post (incluida la primera parte). PictureBox en un control que permite mostrar imágenes en formularios windows, Label es un control que permite mostrar texto en formularios windows.

      Creo que si le das un repaso a temas básicos de winforms lo entenderas un poco mas.

      Suprimir
  82. hola me podrias pasar tu proyecto de esta conexión es que lo estoy haciendo con visual studio 2010 y con una conexión a postgresql, y ya hice todo tal cual y me manda muchos errores te dejo mi correo para ver si me lo puedes enviar joglezrlive.com.mx y gracias de antemano

    ResponderSuprimir
  83. oye me podrias pasar tu proyecto de esta conexion, es que estoy intentando hacerlo pero no me sale, estoy haciendo la conexion con prosgresql y el codigo de la sacer las huellas digitales no marca erroes y no logro corregirlos por favor no ... te dejo mi correo

    joglezr@live.com.mx

    y gracias de antemano

    ResponderSuprimir
  84. Necesito un ejemplo pero en visual basic de como implementas esta parte porque no puedo pasar de ahi por favor gracias core.onStatus += new GriauleFingerprintLibrary.StatusEventHandler(core_onStatus);

    ResponderSuprimir
  85. hola buenos dias oye no me podrias mandar todo el codigo de ejemplo esque me resulta un poco confuso... mi correo es antonio.pereda@grupored.com.mx de antemano muchas gracias que tengas buen dia..

    ResponderSuprimir