sgcBiometrics en cinq minutes

L'authentification Windows Hello et par empreinte digitale en Delphi, via le Windows Biometric Framework. Cette page active un capteur, vérifie l'utilisateur qui se trouve devant, et identifie qui il est. Deux appels de méthode, une fois le capteur initialisé.

Windows Hello visage et empreinte digitale
Windows uniquement, via winbio.dll
Une seule version, aucun niveau de fonctionnalités

Ce dont a besoin la première vérification

Un composant, un appel pour activer le capteur, et un appel pour poser la question. Il n'y a rien à configurer au préalable.

Visage

TsgcWinBioFacial sur la page de palette SGC Biometrics, déclaré dans sgcBiometrics.pas. C'est le composant Windows Hello pour le visage.

Empreinte digitale

TsgcWinBioFingerPrint, même unité, même page de palette. Même forme d'API, avec en plus l'enrôlement et la gestion des modèles.

Deux composants supplémentaires

TsgcWinBioStorageFile et TsgcWinBioUsersINI, pour le stockage dans un pool privé quand tu gardes ta propre base de modèles plutôt que d'utiliser le pool du système.

Plateforme

Windows uniquement. La bibliothèque charge winbio.dll à l'exécution et chaque unité est entourée de {$IFDEF SGC_WINBIO}, donc sur toute autre cible les unités se compilent en rien du tout.

Prérequis et éditions

sgcBiometrics n'a pas de niveaux de fonctionnalités, ce tableau porte donc sur les compilateurs et le système d'exploitation plutôt que sur les éditions.

Quoi Valeur
IDE Delphi 7, et Delphi 2007 jusqu'à RAD Studio 13, plus les versions C++Builder correspondantes. SGC_WINBIO est défini pour chaque bloc de version de compilateur sauf Delphi 2006, qui ne définit que son marqueur de version, donc sur Delphi 2006 le produit se compile en rien.
Clause uses La démo écrit sgcBiometrics_WinBio_Types, sgcBiometrics, sgcBiometrics_WinBio_Storage, sgcBiometrics_WinBio_Storage_File, sgcBiometrics_Classes, sgcBiometrics_Client, sgcBiometrics_WinBio_Client, sgcBiometrics_WinBio_Client_Facial. Pour une simple vérification, il en faut beaucoup moins.
Éditions Il n'y en a aucune. Le sgcVer.inc propre au produit n'est qu'une table des versions de compilateur, sans aucun define SGC_EDT_*. Chaque composant est dans chaque version.
Quelle API Windows Le Windows Biometric Framework Win32 classique, chargé dynamiquement depuis winbio.dll. Ce n'est pas WinRT, il n'y a donc aucun plancher de version récente de RAD Studio imposé par des liaisons WinRT.
Plateforme Windows uniquement. Chaque unité WinBio entoure son interface et son implémentation de {$IFDEF SGC_WINBIO}, et chacune a Windows dans sa clause uses. Sans le define, les unités ne contiennent aucun type.
Matériel Un capteur biométrique que Windows reconnaît déjà. Si Windows Hello fonctionne dans l'application Paramètres, le composant trouvera le même capteur.

Les événements de surveillance de présence utilisés par le composant facial relèvent de la génération Windows 10 de l'API. Si la connexion par visage Windows Hello est disponible sur la machine, le composant a ce qu'il lui faut.

Installer et trouver la page de palette

Compile le package d'exécution avant d'installer celui de conception, car le second référence le premier.

1. Décompresser

Décompresse le téléchargement dans un dossier, appelé {$DIR} ci-dessous.

2. Chemin de bibliothèque

Outils, Options, Options d'environnement, Répertoires. Ajoute {$DIR}\source, qui s'applique à toutes les versions de RAD Studio.

3. Ajouter le dossier lib

Ajoute aussi le dossier propre à ta version, par exemple {$DIR}\libD13\$(Platform) sur RAD Studio 13, jusqu'à {$DIR}\libD7 sans suffixe de plateforme sur les compilateurs les plus anciens.

4. C++Builder uniquement

Place aussi le dossier lib dans le chemin System Include, et le dossier dcp\$(Platform), qui contient les fichiers .bpi, dans le chemin de bibliothèque.

5. Compiler les packages

Ouvre Packages\sgcBiometricsD13.groupproj pour ta version d'IDE. Compile d'abord sgcBiometricsD13.dpk, puis installe dclsgcBiometricsD13.dpk. Une page nommée SGC Biometrics apparaît avec quatre composants.

Vérifier un utilisateur, en une dizaine de lignes

Active le capteur, puis pose l'une de deux questions : est-ce la personne attendue, ou qui est-ce ? Les deux renvoient directement une réponse.

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 renvoie un Boolean et prend un délai d'expiration en millisecondes. SessionIsOpen t'évite d'ouvrir une seconde session sur un capteur qui en a déjà une. FacialRecognize renvoie True quand la personne devant la caméra correspondait.

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 différence entre les deux appels est la question posée. FacialRecognize demande « est-ce la personne attendue » et renvoie un Boolean. FacialIdentify demande « qui est-ce » et renvoie l'identifiant du compte sous forme de string, vide quand personne n'a été reconnu. Les deux prennent un délai d'expiration facultatif de dix secondes par défaut.

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;

Les autres événements transportent des structures du Windows Biometric Framework, leurs listes de paramètres sont donc plus longues que celles d'un événement Delphi typique. OnVerify prend six paramètres et OnIdentify quatre. Génère-les depuis l'Inspecteur d'objets plutôt que de les taper.

Les trois onglets proviennent de la démo livrée Demos\Facial\FFacial.pas, avec les appels de journalisation conservés car c'est ainsi que tu vois ce qui s'est passé. Une seconde démo, Demos\FingerPrint, couvre l'enrôlement, la gestion des modèles et le pool de capteurs privé.

Lire la réponse que te donne l'appel

Les deux questions renvoient directement une valeur, la première version de ton code n'a donc besoin d'aucun gestionnaire d'événement.

InitializeSensors

Renvoie True quand une session s'est ouverte sur un capteur. Un False ici signifie qu'il n'y a rien avec quoi dialoguer, et aucun appel ultérieur ne fonctionnera.

FacialRecognize

Renvoie True quand la personne correspond. Ce seul booléen est toute la réponse pour une invite d'authentification.

FacialIdentify

Renvoie l'identifiant du compte de la personne reconnue, et une chaîne vide quand personne ne l'a été. Utilise-le quand tu as besoin de savoir qui plutôt que si.

OnError

procedure(Sender: TObject; const aError: string; const aCode: Integer = 0). Le code est l'erreur du Windows Biometric Framework, ce qu'il te faut quand le message seul ne suffit pas.

Ce qui se passe généralement mal la première fois

Six problèmes expliquent presque toutes les premières tentatives.

Rien ne se passe et aucune erreur n'apparaît

La session du capteur n'a jamais été ouverte. InitializeSensors renvoie un Boolean, et la démo le vérifie avant de faire quoi que ce soit d'autre. SessionIsOpen t'indique si une session est déjà active, pour ne pas en ouvrir une seconde.

L'appel bloque l'interface utilisateur

La vérification attend la personne placée devant le capteur, et le délai d'expiration est de dix secondes par défaut. Passes-en un plus court, ou définis Asynchronous et pilote le résultat depuis les événements.

Tu cherches un événement OnCapture

Il n'existe aucun événement de ce nom. L'événement de capture est OnCaptureSample, et il existe un OnCaptureSampleReject associé pour un échantillon que le capteur a refusé.

La signature de l'événement ne correspond pas

Ces événements transportent des structures du Windows Biometric Framework, ils ont donc plus de paramètres que tu ne le pensais. OnVerify en prend six, dont l'identité, le sous-facteur et le détail du rejet. Laisse l'IDE générer le gestionnaire plutôt que de le taper.

Ça ne compile pas sur une autre plateforme

C'est impossible. Chaque unité WinBio est entourée de {$IFDEF SGC_WINBIO}, défini uniquement dans les blocs de compilateur Windows, donc hors Windows les unités ne contiennent aucun type. C'est une bibliothèque Windows.

Le pool privé nécessite des droits d'administrateur

Travailler avec ta propre base de modèles plutôt qu'avec le pool du système est une opération privilégiée, et la démo d'empreinte digitale lui consacre un onglet distinct pour cette raison.

Au-delà de la première vérification

Quatre directions, toutes dans la même bibliothèque.

Enrôler tes propres utilisateurs

Le composant d'empreinte digitale porte tout le cycle d'enrôlement : démarrer, capturer plusieurs fois, puis valider. Les événements indiquent le nombre de passages et si le modèle était nouveau.

Fonctionnalités de sgcBiometrics

Garder ta propre base de modèles

Les composants de stockage et d'utilisateurs implémentent un pool privé, de sorte que les modèles résident dans ton fichier plutôt que dans le pool système de Windows. C'est ce qu'il te faut quand la même identité doit fonctionner sur des machines que tu contrôles.

Fonctionnalités de sgcBiometrics

Surveiller la présence, pas seulement une invite

Le composant facial peut surveiller en continu qui se trouve devant la caméra, en déclenchant des événements quand une personne arrive, est reconnue ou part. C'est ainsi que tu verrouilles un écran dès que l'opérateur s'éloigne.

Fonctionnalités de sgcBiometrics

Énumérer ce que possède la machine

Avant d'inviter qui que ce soit, tu peux lister les unités biométriques, les bases de données et les enrôlements existants, ce qui transforme un échec peu utile en un message clair sur le matériel manquant.

Éditions et packaging

Référence, démos et documentation

Deux projets de démo sont livrés dans le téléchargement, un pour le visage et un pour l'empreinte digitale.

Fonctionnalités de sgcBiometrics Ce qu'expose chacun des composants d'empreinte digitale et de visage.
Éditions et packaging Comment le produit est sous licence, et ce que contient chaque package.
Aperçu du produit À quoi sert sgcBiometrics, et où il s'intègre.
Télécharger l'essai Le même installeur que la version de production, limité dans le temps.
Contacter le support Un support direct par e-mail, assuré par les développeurs qui ont écrit le code.
Tous les produits Les tarifs de chaque bibliothèque eSeGeCe dans un seul tableau.

sgcBiometrics est réservé à Delphi et C++Builder, sans équivalent .NET. Chaque produit a son propre démarrage rapide, listé sur la page de prise en main.

Questions sur le démarrage rapide de sgcBiometrics

Pour la reconnaissance faciale Windows Hello, TsgcWinBioFacial. Pour l'empreinte digitale, TsgcWinBioFingerPrint. Les deux sont déclarés dans sgcBiometrics.pas et se trouvent sur la page de palette SGC Biometrics, à côté de TsgcWinBioStorageFile et TsgcWinBioUsersINI, dont tu n'as besoin que pour le stockage dans un pool privé. Quatre composants au total, donc, pas un seul.
Sur le composant facial, FacialRecognize renvoie un Boolean, vrai quand la personne devant la caméra correspond. FacialIdentify renvoie une string, l'identifiant du compte de la personne reconnue, et une chaîne vide quand personne ne l'a été. Les deux prennent un délai d'expiration facultatif de dix secondes par défaut, et les deux nécessitent une session de capteur, que tu ouvres avec InitializeSensors.
Non. Chaque unité WinBio entoure toute son interface et son implémentation de {$IFDEF SGC_WINBIO}, ce define n'apparaît que dans les blocs de compilateur Windows du sgcVer.inc propre au produit, et chaque unité a Windows dans sa clause uses. Le define étant absent, les unités ne contiennent aucun type. sgcBiometrics est une bibliothèque Windows.
Non, c'est le Windows Biometric Framework Win32 classique. La bibliothèque charge winbio.dll dynamiquement et l'appelle directement. Cela compte pour deux raisons : aucun plancher de version récente de RAD Studio n'est imposé par des liaisons WinRT, et la surface d'API est celle que Microsoft documente comme le Windows Biometric Framework plutôt que celle de WinRT.
Delphi 7, et Delphi 2007 jusqu'à RAD Studio 13, plus les versions C++Builder correspondantes. SGC_WINBIO est défini dans chaque bloc de version de compilateur à partir de Delphi 7 avec une seule exception : le bloc Delphi 2006 ne définit que son marqueur de version et non SGC_WINBIO, donc sur ce seul compilateur le produit se compile en rien.
Il n'y a pas d'éditions dans le code. Le sgcVer.inc du produit est une table des versions de compilateur et ne contient aucun define SGC_EDT_*, et rien n'est conditionné par un niveau, donc chaque version contient chaque composant. Les niveaux qui apparaissent sur la page des tarifs relèvent du packaging commercial, pas de bibliothèques différentes.
Plus de trois. Le composant facial en publie douze, et le composant d'empreinte digitale dix-huit. Ils transportent les structures du Windows Biometric Framework, les listes de paramètres sont donc plus longues que celles d'un événement Delphi typique : OnVerify a six paramètres, OnIdentify quatre, et OnError trois. Laisse l'IDE générer les gestionnaires. Note qu'il n'y a pas de OnCapture ; l'événement de capture est OnCaptureSample.
Il te faut un capteur biométrique que Windows reconnaît déjà, ce qui signifie en pratique que Windows Hello fonctionne dans l'application Paramètres. Vérifier par rapport au pool système ne nécessite aucune élévation. Travailler avec un pool privé, où tu gardes ta propre base de modèles via TsgcWinBioStorageFile, exige en revanche des droits d'administrateur, et la démo d'empreinte digitale livrée le sépare dans son propre onglet pour cette raison.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Prêt à ajouter Windows Hello à ton application ?

Télécharge l'essai et lance la démo faciale sur une machine où Hello est déjà configuré.