sgcBiometrics em cinco minutos

Autenticação com Windows Hello e impressão digital no Delphi, por meio do Windows Biometric Framework. Esta página liga um sensor, verifica o usuário que está diante dele e identifica quem ele é. Duas chamadas de método, depois que o sensor é inicializado.

Windows Hello com rosto e impressão digital
Somente Windows, por meio de winbio.dll
Uma compilação, sem níveis de recursos

O que a primeira verificação precisa

Um componente, uma chamada para ligar o sensor e uma chamada para fazer a pergunta. Não há nada para configurar antes.

Rosto

TsgcWinBioFacial na página SGC Biometrics da paleta, declarado em sgcBiometrics.pas. Este é o componente de rosto do Windows Hello.

Impressão digital

TsgcWinBioFingerPrint, na mesma unit e na mesma página da paleta. Mesmo formato de API, com cadastro e gerenciamento de templates a mais.

Mais dois componentes

TsgcWinBioStorageFile e TsgcWinBioUsersINI, para armazenamento em pool privado quando você mantém seu próprio banco de dados de templates em vez de usar o pool do sistema.

Plataforma

Somente Windows. A biblioteca carrega winbio.dll em tempo de execução e toda unit é envolvida em {$IFDEF SGC_WINBIO}, então em qualquer outro destino as units compilam para nada.

Requisitos e edições

O sgcBiometrics não tem níveis de recursos, então esta tabela trata de compiladores e do sistema operacional, e não de edições.

O quê Valor
IDE Delphi 7, e do Delphi 2007 ao RAD Studio 13, além das versões correspondentes do C++Builder. SGC_WINBIO é definido para todo bloco de versão de compilador, exceto o Delphi 2006, que define apenas seu marcador de versão, então no Delphi 2006 o produto compila para nada.
Cláusula uses O demo escreve sgcBiometrics_WinBio_Types, sgcBiometrics, sgcBiometrics_WinBio_Storage, sgcBiometrics_WinBio_Storage_File, sgcBiometrics_Classes, sgcBiometrics_Client, sgcBiometrics_WinBio_Client, sgcBiometrics_WinBio_Client_Facial. Para uma simples verificação, você precisa de muito menos.
Edições Não há nenhuma. O sgcVer.inc do próprio produto é apenas um mapa de versões de compilador e nada mais, sem nenhum define SGC_EDT_*. Todo componente está em toda compilação.
Qual API do Windows O Windows Biometric Framework Win32 clássico, carregado dinamicamente de winbio.dll. Não é WinRT, então não há um piso recente de RAD Studio imposto por bindings WinRT.
Plataforma Somente Windows. Toda unit WinBio envolve sua interface e implementação em {$IFDEF SGC_WINBIO}, e todas têm Windows na cláusula uses. Sem o define, as units não contêm nenhum tipo.
Hardware Um sensor biométrico que o Windows já reconhece. Se o Windows Hello funciona no aplicativo Configurações, o componente encontrará o mesmo sensor.

Os eventos de monitoramento de presença usados pelo componente facial são da geração Windows 10 da API. Se o login facial do Windows Hello está disponível na máquina, o componente tem o que precisa.

Instale e encontre a página da paleta

Compile o pacote de runtime antes de instalar o de design-time, porque o segundo referencia o primeiro.

1. Descompacte

Descompacte o download em uma pasta, chamada de {$DIR} abaixo.

2. Caminho da biblioteca

Tools, Options, Environment Options, Directories. Adicione {$DIR}\source, que vale para toda versão do RAD Studio.

3. Adicione a pasta lib

Adicione também a pasta específica da versão, por exemplo {$DIR}\libD13\$(Platform) no RAD Studio 13, até {$DIR}\libD7, sem sufixo de plataforma, nos compiladores mais antigos.

4. Somente C++Builder

Coloque também a pasta lib no caminho System Include e a pasta dcp\$(Platform), que contém os arquivos .bpi, no caminho da biblioteca.

5. Compile os pacotes

Abra Packages\sgcBiometricsD13.groupproj para a versão da sua IDE. Compile primeiro sgcBiometricsD13.dpk e depois instale dclsgcBiometricsD13.dpk. Aparece uma página chamada SGC Biometrics com quatro componentes.

Verifique um usuário, em cerca de dez linhas

Ligue o sensor e depois faça uma de duas perguntas: esta é a pessoa esperada, ou quem é esta pessoa? As duas retornam a resposta diretamente.

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 retorna um Boolean e recebe um timeout em milissegundos. SessionIsOpen impede que você abra uma segunda sessão em um sensor que já tem uma. FacialRecognize retorna True quando a pessoa diante da câmera foi reconhecida.

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;

A diferença entre as duas chamadas é a pergunta. FacialRecognize pergunta "esta é a pessoa esperada" e retorna um Boolean. FacialIdentify pergunta "quem é esta pessoa" e retorna o identificador da conta como uma string, vazia quando ninguém foi reconhecido. As duas recebem um timeout opcional cujo padrão é dez 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;

Os outros eventos carregam estruturas do Windows Biometric Framework, então suas listas de parâmetros são mais longas que as de um evento típico do Delphi. OnVerify recebe seis parâmetros e OnIdentify quatro. Gere-os pelo Object Inspector em vez de digitá-los.

As três abas vêm do demo que acompanha o pacote, Demos\Facial\FFacial.pas, com as chamadas de log mantidas porque é assim que você vê o que aconteceu. Um segundo demo, Demos\FingerPrint, cobre o cadastro, o gerenciamento de templates e o pool de sensores privado.

Leia a resposta que a chamada dá

As duas perguntas retornam um valor diretamente, então a primeira versão do seu código não precisa de nenhum manipulador de evento.

InitializeSensors

Retorna True quando uma sessão foi aberta em um sensor. Um False aqui significa que não há com quem conversar, e nenhuma chamada posterior vai funcionar.

FacialRecognize

Retorna True quando a pessoa foi reconhecida. Esse único booleano é a resposta inteira para um prompt de autenticação.

FacialIdentify

Retorna o identificador da conta de quem foi reconhecido e uma string vazia quando ninguém foi. Use-o quando precisar saber quem, e não se.

OnError

procedure(Sender: TObject; const aError: string; const aCode: Integer = 0). O código é o erro do Windows Biometric Framework, que é o que você quer quando a mensagem sozinha não basta.

O que costuma dar errado na primeira vez

Seis problemas respondem por quase toda primeira tentativa.

Nada acontece e nenhum erro aparece

A sessão do sensor nunca foi aberta. InitializeSensors retorna um Boolean, e o demo o verifica antes de fazer qualquer outra coisa. SessionIsOpen informa se já existe uma sessão ativa, para que você não abra uma segunda.

A chamada bloqueia a interface do usuário

A verificação espera pela pessoa diante do sensor, e o timeout padrão é de dez segundos. Passe um menor ou defina Asynchronous e conduza o resultado pelos eventos.

Você está procurando um evento OnCapture

Não existe evento com esse nome. O evento de captura é OnCaptureSample, e há um OnCaptureSampleReject complementar para uma amostra que o sensor recusou.

A assinatura do evento não confere

Esses eventos carregam as estruturas do Windows Biometric Framework, então têm mais parâmetros do que você poderia esperar. OnVerify recebe seis, incluindo a identidade, o subfator e o detalhe da rejeição. Deixe a IDE gerar o manipulador em vez de digitá-lo.

Não compila em outra plataforma

Não pode. Toda unit WinBio é envolvida em {$IFDEF SGC_WINBIO}, que só é definido nos blocos de compilador do Windows, então fora do Windows as units não contêm tipos. Esta é uma biblioteca para Windows.

O pool privado precisa de direitos de administrador

Trabalhar com seu próprio banco de dados de templates em vez do pool do sistema é uma operação privilegiada, e o demo de impressão digital tem uma aba separada para isso por esse motivo.

Além da primeira verificação

Quatro direções, todas dentro da mesma biblioteca.

Cadastre seus próprios usuários

O componente de impressão digital traz o ciclo completo de cadastro: iniciar, capturar repetidamente e depois confirmar. Os eventos informam a contagem de leituras e se o template era novo.

Recursos do sgcBiometrics

Mantenha seu próprio banco de dados de templates

Os componentes de armazenamento e de usuários implementam um pool privado, de modo que os templates ficam no seu arquivo e não no pool do sistema do Windows. É o que você quer quando a mesma identidade precisa funcionar em máquinas que você controla.

Recursos do sgcBiometrics

Monitore a presença, não apenas um prompt

O componente facial pode monitorar continuamente quem está diante da câmera, gerando eventos quando uma pessoa chega, é reconhecida ou sai. É assim que você bloqueia uma tela no instante em que o operador se afasta.

Recursos do sgcBiometrics

Enumere o que a máquina tem

Antes de pedir algo a alguém, você pode listar as unidades biométricas, os bancos de dados e os cadastros existentes, o que transforma uma falha pouco útil em uma mensagem clara sobre hardware ausente.

Edições e empacotamento

Referência, demos e documentação

Dois projetos de demo acompanham o download, um para rosto e outro para impressão digital.

Recursos do sgcBiometrics O que os componentes de impressão digital e facial expõem.
Edições e empacotamento Como o produto é licenciado e o que cada pacote inclui.
Visão geral do produto Para que serve o sgcBiometrics e onde ele se encaixa.
Baixe a versão de avaliação O mesmo instalador da versão de produção, com tempo limitado.
Fale com o suporte Suporte direto por e-mail dos desenvolvedores que escreveram o código.
Todos os produtos Os preços de todas as bibliotecas da eSeGeCe em uma única tabela.

O sgcBiometrics é somente para Delphi e C++Builder, sem contrapartida .NET. Cada produto tem seu próprio início rápido, listado na página de primeiros passos.

Perguntas sobre o início rápido do sgcBiometrics

Para reconhecimento facial do Windows Hello, TsgcWinBioFacial. Para impressão digital, TsgcWinBioFingerPrint. Ambos são declarados em sgcBiometrics.pas e ambos estão na página SGC Biometrics da paleta, ao lado de TsgcWinBioStorageFile e TsgcWinBioUsersINI, de que você só precisa para armazenamento em pool privado. Ou seja, quatro componentes no total, não um.
No componente facial, FacialRecognize retorna um Boolean, verdadeiro quando a pessoa diante da câmera foi reconhecida. FacialIdentify retorna uma string, o identificador da conta de quem foi reconhecido, e uma string vazia quando ninguém foi. As duas recebem um timeout opcional cujo padrão é dez segundos, e as duas precisam de uma sessão de sensor, que você abre com InitializeSensors.
Não. Toda unit WinBio envolve toda a sua interface e implementação em {$IFDEF SGC_WINBIO}, esse define aparece apenas nos blocos de compilador do Windows no sgcVer.inc do próprio produto, e toda unit tem Windows na cláusula uses. Com o define ausente, as units não contêm nenhum tipo. O sgcBiometrics é uma biblioteca para Windows.
Não, é o Windows Biometric Framework Win32 clássico. A biblioteca carrega winbio.dll dinamicamente e a chama diretamente. Isso importa por dois motivos: não há um piso moderno de RAD Studio imposto por bindings WinRT, e a superfície da API é a que a Microsoft documenta como Windows Biometric Framework, e não a do WinRT.
Delphi 7, e do Delphi 2007 ao RAD Studio 13, além das versões correspondentes do C++Builder. SGC_WINBIO é definido em todo bloco de versão de compilador do Delphi 7 em diante, com uma lacuna: o bloco do Delphi 2006 define apenas seu marcador de versão e não SGC_WINBIO, então nesse único compilador o produto compila para nada.
Não há edições no código. O sgcVer.inc do produto é um mapa de versões de compilador e não traz nenhum define SGC_EDT_*, e nada é controlado por nível, então toda compilação contém todos os componentes. Os níveis que aparecerem na página de preços são empacotamento comercial, não bibliotecas diferentes.
Mais de três. O componente facial publica doze, e o de impressão digital dezoito. Eles carregam as estruturas do Windows Biometric Framework, então as listas de parâmetros são mais longas que as de um evento típico do Delphi: OnVerify tem seis parâmetros, OnIdentify quatro e OnError três. Deixe a IDE gerar os manipuladores. Observe que não existe OnCapture; o evento de captura é OnCaptureSample.
Você precisa de um sensor biométrico que o Windows já reconheça, o que na prática significa que o Windows Hello funciona no aplicativo Configurações. Verificar contra o pool do sistema não exige elevação. Trabalhar com um pool privado, em que você mantém seu próprio banco de dados de templates por meio de TsgcWinBioStorageFile, exige direitos de administrador, e o demo de impressão digital que acompanha o pacote separa isso em uma aba própria por esse motivo.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para adicionar o Windows Hello ao seu aplicativo?

Baixe a versão de avaliação e execute o demo facial em uma máquina que já tenha o Hello configurado.