Biometria: Processamento de imagens capturadas em leitores de impressão digital

Extração da imagem com um leitor de impressão digital é o primeiro passo no processo de verificação ou identificação biométrica. Neste artigo utilizaremos a biblioteca libdpfp para efetuar o processamento do cálculo das minúcias das imagens capturadas em leitores biométricos de impressão digital.

[ Hits: 88.368 ]

Por: Alessandro de Oliveira Faria (A.K.A. CABELO) em 05/10/2006 | Blog: http://assuntonerd.com.br


Introdução




A impressão digital é composta de linhas formadas pelas elevações da pele. A comparação por impressão digital é um método utilizado a mais de mil anos como forma de identificação de usuários. É uma característica única entre os seres humanos, inclusive entre irmão gêmeos univitelinos.

Formada ainda quando feto, a impressão digital acompanha a pessoa por toda a sua existência sem apresentar grandes mudanças. Extraindo os pontos característicos ou ponto de minúcias de uma impressão digital, um papiloscopista ou sistemas computadorizados podem identificar pessoas utilizando cálculos bastantes confiáveis.

São vários os tipos de impressões digitais, abaixo algumas imagens de diferentes digitais:


Grande parte dos algoritmos trabalham com o princípio de extração dos pontos de minúcias ou pontos característicos. Após a extração são calculados a relação entre as distâncias destes pontos, cada algoritmo possui a sua base de cálculo, seja por análise dos pontos entre si ou por agrupamentos de pontos para análise de semelhanças de triângulos com os ângulos internos.


Neste artigo calcularemos os pontos de minúcias utilizando a biblioteca libdpfp-0.2.1. Esta versão da biblioteca incorporou a abstração de hardware (módulo do kernel) para acesso ao leitor, com isto hoje já não é preciso instalar o módulo dos leitores compatível com a linha U.Are.U da digital persona.

Este release (versão 0.2.1da libdpfp) contém parte do código do projeto fvs e eFinger, utilizada para processar as imagens extraídas dos leitores de impressão digital.

Na primeira fase a biblioteca extrai a imagem do sensor conforme o exemplo abaixo:


Aplicando a extração de filtro de gabor, a linha da impressão digital é realçada com a cor preta.


Na próxima etapa a imagem já esta binarizada (branco e preto), as linhas foram reduzidas a um único pixel de largura.


Agora ficou fácil detectar os pontos de minúcias. Fazendo um exame de cada pixel na imagem, se houver um pixel branco sem vizinhos significa que encontramos um ponto terminal. Caso um ponto branco possua 3 pontos vizinhos, significa que encontramos uma bifurcação.

Veja o resultado abaixo:




Agora o próximo passo a ser implementado na biblioteca em termos de desenvolvimento é a comparação dos pontos de minúcias para obter o índice de similaridade entre duas impressões digitais.

O projeto eFinger executa esta tarefa, mas encontra-se ainda em fase embrionária, pois o algoritmo não considera rotação dos pontos, mas sem sombra de dúvida é um bom ponto de partida. Bom, depois de tanta teoria, vamos a prática no próximo capítulo.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Download, instalação e execução
   3. Mas eu não tenho sensor U.Are.U? Eu tenho outro modelo o que fazer!!!??
Outros artigos deste autor

Tempest for Elisa: Transforme seu monitor em estação de rádio

OneAPI: A plataforma da Intel para facilitar o desenvolvimento com chips Intel, AMD, ARM, NVIDIA POWER e FPGA

CUDA: Programe a sua NVIDIA

Instalando o Android SDK na plataforma Linux

FreePascal + Lazarus: Desenvolvedores em Delphi podem começar a migrar para o Linux!

Leitura recomendada

Entendento o comando chmod

Easter Eggs em Linux

Implementando Wake Up on Lan (WoL) no Linux

Impressione seus amigos mudando as músicas no seu computador pelo celular

Instalando e configurando um servidor DNS (Bind+CHROOT) no Slackware

  
Comentários
[1] Comentário enviado por jeffestanislau em 05/10/2006 - 09:56h

Grande Cabelo,
Tava quebrando a cuca aqui pra viabilizar isso, seu artigo caiu do céu!

[]'s meu amigo!

[2] Comentário enviado por danilorlima em 05/10/2006 - 10:33h

Pô Cabelo, show este artigo!!!
Sempre procurei saber qual era o algoritmo usado nestes calculos, parabéns... e o reconhecimento facial é a mesma coisa ?

[3] Comentário enviado por removido em 05/10/2006 - 12:19h

Quando fiz make deu essa saída:

dpfp.c:69: warning: 'struct usb_device' declared inside parameter list
dpfp.c:69: warning: its scope is only this definition or declaration, which is probably not what you want
dpfp.c: In function 'get_dev_entry':
dpfp.c:75: error: dereferencing pointer to incomplete type
dpfp.c:76: error: dereferencing pointer to incomplete type
dpfp.c: At top level:
dpfp.c:159: warning: 'struct usb_device' declared inside parameter list
dpfp.c: In function 'dpfp_open_usb':


[4] Comentário enviado por guesser em 05/10/2006 - 21:16h

Impressionante como este cara é bom!!!!!

Abraço

[5] Comentário enviado por bolus em 06/10/2006 - 03:39h

Quando efetuei o Make, recebi a seguinte mensagem:
[root@SvrTechBOX libdpfp-0.2.1]# make
make all-recursive
make[1]: Entering directory `/home/phsoares/uareu4000/libdpfp-0.2.1'
Making all in libdpfp
make[2]: Entering directory `/home/phsoares/uareu4000/libdpfp-0.2.1/libdpfp'
make[2]: Nada a ser feito para `all'.
make[2]: Leaving directory `/home/phsoares/uareu4000/libdpfp-0.2.1/libdpfp'
Making all in examples
make[2]: Entering directory `/home/phsoares/uareu4000/libdpfp-0.2.1/examples'
/bin/sh ../libtool --tag=CC --mode=link gcc -g -O2 -o capture_continuous capture_continuous-capture_continuous.o ../libdpfp/libdpfp.la -ldpfp -lXv -lXext -lX11 ;
gcc -g -O2 -o .libs/capture_continuous capture_continuous-capture_continuous.o -L/usr/local/lib ../libdpfp/.libs/libdpfp.so /usr/local/lib/libusb.so -lm -lXv -lXext -lX11
/usr/bin/ld: cannot find -lXv
collect2: ld returned 1 exit status
make[2]: ** [capture_continuous] Erro 1
make[2]: Leaving directory `/home/phsoares/uareu4000/libdpfp-0.2.1/examples'
make[1]: ** [all-recursive] Erro 1
make[1]: Leaving directory `/home/phsoares/uareu4000/libdpfp-0.2.1'
make: ** [all] Erro 2
[root@SvrTechBOX libdpfp-0.2.1]#

[6] Comentário enviado por leoberbert em 06/10/2006 - 09:19h

Cara... Ficou excelente o artigo viu!!! Parabéns amigo!!!

Abração!

[7] Comentário enviado por michelpereira em 06/10/2006 - 13:41h

Mais uma vez o grande Alexandre nos brinda com um artigo fascinante e objetivo sobre biometria.

Parabéns novamente!

[8] Comentário enviado por evertonstm em 06/10/2006 - 18:01h

caraca esse cara e um extraterrestre, artigo espetacular valeu ai Kbelo..
vc e o cara ....

[9] Comentário enviado por removido em 09/10/2006 - 13:34h

Kra fantastico o artigo
agora qual hardware vc aconselharia comprar para fazer os testes ?

[10] Comentário enviado por balani em 09/10/2006 - 18:00h

Muito loko véio, esse campo tá crescendo cada vez mais, na empresa que trabalho o relogio de ponto com biometria. Parabens pelo artigo.

[11] Comentário enviado por retamero em 15/09/2007 - 23:21h

Interessante o assunto.

Alguem aqui conhece o leitor Hamster I da Nitgen (
no site deles fala de uma SDK (pra desenvolver em varios Windows e Linux e varias liguagens)

só que o driver que acompanha o SDK nào funciona nem com reza

seguindo este artigo tb não consegui fazer funcionar com esse hardware

lsusb
Bus 3 Device 2: ID 0a86:0100 NITGen Co., Ltd


[12] Comentário enviado por admtempos em 23/01/2009 - 18:02h

Muito intereçante este post num futuro muito possimo as autenticação serão assim

[13] Comentário enviado por sciani em 17/04/2009 - 11:12h

ae Cabelo, oqq eu faço se eu naum tenho nenhum leitor de digitais, e somente um banco de dados onde eu vou abrir as imagens de digitais?

abraços

[14] Comentário enviado por edu_light em 30/09/2009 - 17:19h

Cabelo, replico a pergunta enviada pelo colega sciani. E se eu tiver tão somente uma imagem digitalizada (bmp) armazenada no banco. Como faço para transforma-la em vetorial?

[15] Comentário enviado por pcxa em 19/05/2010 - 21:28h

Tem alguma versão do algoritmo de leitura/reconhecimento de impressão digital para microcontroladores de 32 bits, tipo PIC32xxxxxx?

Grato, em tempo, excelente artigo!

[16] Comentário enviado por heepz em 20/04/2011 - 10:47h

Ola!

Após eu dar o comando ./configure, no final deu:


checking for LIBUSB... configure: error: Package requirements ("libusb") were not met:

No package 'libusb' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables LIBUSB_CFLAGS
and LIBUSB_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

Obs: Utilizo Ubuntu 10.10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts