terça-feira, novembro 03, 2020

Sensor Biométrico de Impressão Digital - Parte 3: Cadastrando uma digital no FPM10A

Agora que já sabemos como enviar comandos para o FPM10A e ler a resposta, vamos começar a examinar os comandos pela sequência necessária para o cadastro de uma digital.


O processo de cadastro de digitais envolve uma série de comandos:

  • O comando GenImg é usado para ler a imagem de uma digital. A imagem obtida fica numa área interna ao módulo (ImageBuffer). Futuramente veremos como ler essa imagem para apresentar em uma tela gráfica ou no PC.
  • O comando Img2Tz converte a imagem em ImageBuffer em um "feature template", O resultado fica em uma de duas áreas internas do módulo (CharBuffer1 ou CharBuffer2). A área de saída é especificada no comando.
  • O comando GenImg é novamente usado para ler a mesma digital (é necessário tirar e recolocar o dedo).
  • Novamente o comando Img2Tz é usado, porém desta vez especificamos o outro buffer de saída.
  • O comando RegModel gera um "modelo" a partir de CharBuffer1 e CharBuffer2. O resultado é colocado nos dois buffers (duas cópias do mesmo conteúdo)
  • Finalmente o comando Store é usado para salvar CharBuffer1 ou CharBuffer2 na biblioteca de digitais do módulo. Os parâmetros para este comando são o número do buffer e a posição na biblioteca (as posições são numeradas a partir de zero).
É importante detectar e tratar erro nas várias etapas:
  • GenImg é meio "caprichoso" quanto à posição do dedo para capturar a imagem.
  • Img2Tz rejeita a imagem se ela estiver "confusa" ou não achar um número mínimo de pontos para geração das features
  • RegModel rejeita imagens muito diferentes (por exemplo, se você trocar de dedo entre as duas capturas de imagem).
Note que um sistema real vai demandar um controle externo das posições da biblioteca de digitais para saber quais estão em uso e qual a pessoa associada às em uso. Uma forma simplificada de gerenciamento do uso é ir armazenando sequencialmente. Um comando útil para isso é o que informa quantas digitais estão armazenadas no momento ("TempleteNum", sic). 

Este armazenamento sequencial é quebrado quando precisamos descadastrar uma digital (algo importante num sistema real). Existem dois comandos para apagar digitais: um apaga uma posição específica e outro apaga toda a biblioteca.

Se você não estiver armazenando sequencialmente as digitais, lembre-se que o comando TempleteNum  informa o número de digitais efetivamente armazenas, independente das posições. Se você mandar apagar uma posição que não tem digital, a quantidade de digitais não muda.

O exemplo desta semana é bem simples: através do Monitor Serial você pode disparar as funções de cadastramento e apagamento, informando a posição da digital na biblioteca. Como o código começa a ficar grande, não vou listá-lo aqui, você pode pegar e examinar em https://github.com/dquadros/SensorDigitais.

No próximo post vamos ver como comparar digitais.

Nenhum comentário: