sgcBiometrics en cinco minutos

Autenticación con Windows Hello y huella dactilar en Delphi, mediante el Windows Biometric Framework. Esta página pone en marcha un sensor, verifica al usuario que está delante de él e identifica quién es. Dos llamadas a métodos, una vez inicializado el sensor.

Windows Hello facial y huella dactilar
Solo Windows, mediante winbio.dll
Una sola compilación, sin niveles de características

Lo que necesita la primera comprobación

Un componente, una llamada para poner en marcha el sensor y una llamada para hacer la pregunta. No hay nada que configurar antes.

Facial

TsgcWinBioFacial en la página SGC Biometrics de la paleta, declarado en sgcBiometrics.pas. Es el componente facial de Windows Hello.

Huella dactilar

TsgcWinBioFingerPrint, misma unit, misma página de la paleta. La misma forma de API, con registro de huellas y gestión de plantillas además.

Dos componentes más

TsgcWinBioStorageFile y TsgcWinBioUsersINI, para el almacenamiento en un pool privado cuando mantienes tu propia base de datos de plantillas en lugar de usar el pool del sistema.

Plataforma

Solo Windows. La biblioteca carga winbio.dll en tiempo de ejecución y cada unit está envuelta en {$IFDEF SGC_WINBIO}, así que en cualquier otro destino las units se compilan a nada en absoluto.

Requisitos y ediciones

sgcBiometrics no tiene niveles de características, así que esta tabla trata de compiladores y del sistema operativo y no de ediciones.

Qué Valor
IDE Delphi 7, y Delphi 2007 hasta RAD Studio 13, más las versiones equivalentes de C++Builder. SGC_WINBIO se define en todos los bloques de versión de compilador salvo Delphi 2006, que define solo su marcador de versión, así que en Delphi 2006 el producto se compila a nada.
Cláusula uses La demo escribe sgcBiometrics_WinBio_Types, sgcBiometrics, sgcBiometrics_WinBio_Storage, sgcBiometrics_WinBio_Storage_File, sgcBiometrics_Classes, sgcBiometrics_Client, sgcBiometrics_WinBio_Client, sgcBiometrics_WinBio_Client_Facial. Para una verificación simple necesitas bastantes menos.
Ediciones No hay ninguna. El sgcVer.inc propio del producto es solo un mapa de versiones de compilador y nada más, sin ningún define SGC_EDT_*. Todos los componentes están en todas las compilaciones.
Qué API de Windows El Windows Biometric Framework clásico de Win32, cargado dinámicamente desde winbio.dll. No es WinRT, así que no hay un mínimo reciente de RAD Studio impuesto por los bindings de WinRT.
Plataforma Solo Windows. Cada unit de WinBio envuelve su interfaz e implementación en {$IFDEF SGC_WINBIO}, y todas ellas tienen Windows en su cláusula uses. Sin el define las units no contienen ningún tipo.
Hardware Un sensor biométrico que Windows ya reconozca. Si Windows Hello funciona en la app Configuración, el componente encontrará el mismo sensor.

Los eventos de supervisión de presencia que usa el componente facial son de la generación Windows 10 de la API. Si el inicio de sesión facial de Windows Hello está disponible en la máquina, el componente tiene lo que necesita.

Instala y localiza la página de la paleta

Compila el paquete de runtime antes de instalar el de tiempo de diseño, porque el segundo hace referencia al primero.

1. Descomprime

Descomprime la descarga en una carpeta, llamada {$DIR} más abajo.

2. Ruta de biblioteca

Tools, Options, Environment Options, Directories. Añade {$DIR}\source, que se aplica a todas las versiones de RAD Studio.

3. Añade la carpeta lib

Añade también la carpeta específica de la versión, por ejemplo {$DIR}\libD13\$(Platform) en RAD Studio 13, hasta {$DIR}\libD7 sin sufijo de plataforma en los compiladores más antiguos.

4. Solo C++Builder

Pon también la carpeta lib en la ruta System Include, y la carpeta dcp\$(Platform), que contiene los archivos .bpi, en la ruta de biblioteca.

5. Compila los paquetes

Abre Packages\sgcBiometricsD13.groupproj para tu versión de IDE. Compila primero sgcBiometricsD13.dpk y después instala dclsgcBiometricsD13.dpk. Aparece una página llamada SGC Biometrics con cuatro componentes.

Verifica a un usuario, en unas diez líneas

Pon en marcha el sensor y haz una de dos preguntas: ¿es esta la persona esperada o quién es esta? Ambas devuelven una respuesta directamente.

FFacial.pas
uses
  SysUtils, Classes,
  // sgc
  sgcBiometrics, sgcBiometrics_WinBio_Client,
  sgcBiometrics_WinBio_Client_Facial;

procedure TFRMFacial.btnFacialRecognizeClick(Sender: TObject);
begin
  if not Facial.SessionIsOpen then
  begin
    if Facial.InitializeSensors(10000) then
    begin
      if Facial.FacialRecognize then
        DoLog('#Recognized');
    end;
  end
  else
  begin
    if Facial.FacialRecognize then
      DoLog('#Recognized');
  end;
end;

InitializeSensors devuelve un Boolean y acepta un timeout en milisegundos. SessionIsOpen evita que abras una segunda sesión en un sensor que ya tiene una. FacialRecognize devuelve True cuando la persona que está delante de la cámara coincidió.

FFacial.pas
procedure TFRMFacial.btnFacialIdentifyClick(Sender: TObject);
begin
  if not Facial.SessionIsOpen then
  begin
    if Facial.InitializeSensors(10000) then
      DoLog('#Identified: ' + Facial.FacialIdentify)
  end
  else
    DoLog('#Identified: ' + Facial.FacialIdentify);
end;

La diferencia entre las dos llamadas es la pregunta. FacialRecognize pregunta «¿es esta la persona esperada?» y devuelve un Boolean. FacialIdentify pregunta «¿quién es esta?» y devuelve el identificador de la cuenta como un string, vacío cuando no se reconoció a nadie. Ambas aceptan un timeout opcional que por defecto es de diez segundos.

FFacial.pas
// Three parameters, and the third has a default.
// There is no OnCapture: the capture event is OnCaptureSample.
procedure TFRMFacial.FacialError(Sender: TObject; const aError: string;
  const aCode: Integer);
begin
  DoLog('Error: ' + aError + ' [' + IntToStr(aCode) + ']');
end;

Los demás eventos llevan estructuras del Windows Biometric Framework, así que sus listas de parámetros son más largas que las de un evento típico de Delphi. OnVerify recibe seis parámetros y OnIdentify cuatro. Genéralos desde el Object Inspector en lugar de teclearlos.

Las tres pestañas proceden de la demo incluida Demos\Facial\FFacial.pas, conservando las llamadas de registro porque es así como ves lo que ocurrió. Una segunda demo, Demos\FingerPrint, cubre el registro de huellas, la gestión de plantillas y el pool de sensores privado.

Lee la respuesta que te da la llamada

Ambas preguntas devuelven un valor directamente, así que la primera versión de tu código no necesita ningún manejador de eventos.

InitializeSensors

Devuelve True cuando se abrió una sesión en un sensor. Un False aquí significa que no hay nada con lo que hablar, y ninguna llamada posterior funcionará.

FacialRecognize

Devuelve True cuando la persona coincidió. Ese único booleano es toda la respuesta para un aviso de autenticación.

FacialIdentify

Devuelve el identificador de la cuenta de quien se reconoció, y una cadena vacía cuando no se reconoció a nadie. Úsalo cuando necesites saber quién y no si es.

OnError

procedure(Sender: TObject; const aError: string; const aCode: Integer = 0). El código es el error del Windows Biometric Framework, que es lo que quieres cuando el mensaje por sí solo no basta.

Lo que suele fallar la primera vez

Seis problemas explican casi todos los primeros intentos.

No pasa nada y no aparece ningún error

Nunca se abrió la sesión del sensor. InitializeSensors devuelve un Boolean, y la demo lo comprueba antes de hacer nada más. SessionIsOpen te dice si ya hay una sesión activa, para que no abras una segunda.

La llamada bloquea la interfaz de usuario

La verificación espera a la persona que está delante del sensor, y el timeout por defecto es de diez segundos. Pasa uno más corto, o define Asynchronous y gestiona el resultado desde los eventos.

Estás buscando un evento OnCapture

No existe ningún evento con ese nombre. El evento de captura es OnCaptureSample, y hay un compañero OnCaptureSampleReject para una muestra que el sensor rechazó.

La firma del evento no coincide

Estos eventos llevan las estructuras del Windows Biometric Framework, así que tienen más parámetros de los que cabría esperar. OnVerify recibe seis, incluidos la identidad, el subfactor y el detalle del rechazo. Deja que el IDE genere el manejador en lugar de teclearlo.

No compila en otra plataforma

No puede. Cada unit de WinBio está envuelta en {$IFDEF SGC_WINBIO}, que se define solo en los bloques de compilador de Windows, así que fuera de Windows las units no contienen ningún tipo. Es una biblioteca de Windows.

El pool privado necesita derechos de administrador

Trabajar con tu propia base de datos de plantillas en lugar del pool del sistema es una operación privilegiada, y la demo de huella dactilar tiene una pestaña aparte para ello por esa razón.

Más allá de la primera comprobación

Cuatro direcciones, todas dentro de la misma biblioteca.

Registra a tus propios usuarios

El componente de huella dactilar lleva el ciclo completo de registro: empezar, capturar repetidamente y confirmar. Los eventos informan del número de pasadas y de si la plantilla era nueva.

Características de sgcBiometrics

Mantén tu propia base de datos de plantillas

Los componentes de almacenamiento y de usuarios implementan un pool privado, de modo que las plantillas viven en tu archivo y no en el pool del sistema de Windows. Es lo que quieres cuando la misma identidad tiene que funcionar en máquinas que controlas.

Características de sgcBiometrics

Vigila la presencia, no solo un aviso

El componente facial puede supervisar continuamente quién está delante de la cámara, lanzando eventos cuando una persona llega, es reconocida o se va. Así es como bloqueas una pantalla en el momento en que el operador se aleja.

Características de sgcBiometrics

Enumera lo que tiene la máquina

Antes de avisar a nadie, puedes listar las unidades biométricas, las bases de datos y los registros existentes, lo que convierte un fallo poco útil en un mensaje claro sobre hardware ausente.

Ediciones y empaquetado

Referencia, demos y documentación

Se incluyen dos proyectos de demo dentro de la descarga, uno para facial y otro para huella dactilar.

Características de sgcBiometrics Lo que expone cada uno de los componentes de huella dactilar y facial.
Ediciones y empaquetado Cómo se licencia el producto y qué incluye cada paquete.
Visión general del producto Para qué sirve sgcBiometrics y dónde encaja.
Descarga la versión de prueba El mismo instalador que en producción, con límite de tiempo.
Contactar con soporte Soporte directo por correo de los desarrolladores que escribieron el código.
Todos los productos Los precios de todas las bibliotecas de eSeGeCe en una sola tabla.

sgcBiometrics es solo para Delphi y C++Builder, sin equivalente en .NET. Cada producto tiene su propio inicio rápido, listado en la página de primeros pasos.

Preguntas sobre el inicio rápido de sgcBiometrics

Para el reconocimiento facial de Windows Hello, TsgcWinBioFacial. Para huella dactilar, TsgcWinBioFingerPrint. Ambos están declarados en sgcBiometrics.pas y ambos están en la página SGC Biometrics de la paleta, junto con TsgcWinBioStorageFile y TsgcWinBioUsersINI, que solo necesitas para el almacenamiento en un pool privado. Es decir, cuatro componentes en total, no uno.
En el componente facial, FacialRecognize devuelve un Boolean, verdadero cuando la persona que está delante de la cámara coincidió. FacialIdentify devuelve un string, el identificador de la cuenta de quien se reconoció, y una cadena vacía cuando no se reconoció a nadie. Ambas aceptan un timeout opcional que por defecto es de diez segundos, y ambas necesitan una sesión de sensor, que abres con InitializeSensors.
No. Cada unit de WinBio envuelve toda su interfaz e implementación en {$IFDEF SGC_WINBIO}, ese define aparece solo en los bloques de compilador de Windows del sgcVer.inc propio del producto, y cada unit tiene Windows en su cláusula uses. Con el define ausente las units no contienen ningún tipo. sgcBiometrics es una biblioteca de Windows.
No, es el Windows Biometric Framework clásico de Win32. La biblioteca carga winbio.dll dinámicamente y la llama directamente. Eso importa por dos razones: no hay un mínimo moderno de RAD Studio impuesto por los bindings de WinRT, y la superficie de la API es la que Microsoft documenta como Windows Biometric Framework y no la de WinRT.
Delphi 7, y Delphi 2007 hasta RAD Studio 13, más las versiones equivalentes de C++Builder. SGC_WINBIO se define en cada bloque de versión de compilador desde Delphi 7 en adelante con una excepción: el bloque de Delphi 2006 define solo su marcador de versión y no SGC_WINBIO, así que en ese único compilador el producto se compila a nada.
No hay ediciones en el código. El sgcVer.inc del producto es un mapa de versiones de compilador y no lleva ningún define SGC_EDT_*, y nada está controlado por nivel, así que cada compilación contiene todos los componentes. Los niveles que aparezcan en la página de precios son empaquetado comercial, no bibliotecas distintas.
Más de tres. El componente facial publica doce, y el de huella dactilar dieciocho. Llevan las estructuras del Windows Biometric Framework, así que las listas de parámetros son más largas que las de un evento típico de Delphi: OnVerify tiene seis parámetros, OnIdentify cuatro y OnError tres. Deja que el IDE genere los manejadores. Ten en cuenta que no existe OnCapture; el evento de captura es OnCaptureSample.
Necesitas un sensor biométrico que Windows ya reconozca, lo que en la práctica significa que Windows Hello funciona en la app Configuración. Verificar contra el pool del sistema no necesita elevación. Trabajar con un pool privado, donde mantienes tu propia base de datos de plantillas mediante TsgcWinBioStorageFile, sí requiere derechos de administrador, y la demo de huella dactilar incluida lo separa en su propia pestaña por esa razón.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para añadir Windows Hello a tu app?

Descarga la versión de prueba y ejecuta la demo facial en una máquina que ya tenga Hello configurado.