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.961 ]

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


Mas eu não tenho sensor U.Are.U? Eu tenho outro modelo o que fazer!!!??



Princípio número um, muita calma, caso você não possua um leitor compatível com a linha digital persona, poderá utilizar direto o algoritmo do pacote fvs. Para isto, em primeiro lugar faça o download o pacote em:
Utilize o comando wget como no exemplo abaixo para fazer o download do pacote .tar.gz.

$ mkdir uareu4000
$ cd uareu4000
$ wget
http://ufpr.dl.sourceforge.net/sourceforge/fvs/fvs-0.1.1.tar.gz

Após o download descompacte o pacote com o comando tar -zxvf com no exemplo abaixo:

$ tar -zxvf fvs-0.1.1.tar.gz
fvs-0.1.1/
fvs-0.1.1/ChangeLog
fvs-0.1.1/AUTHORS
fvs-0.1.1/COPYING
fvs-0.1.1/Makefile.am
fvs-0.1.1/INSTALL
        :           :          :
        :           :          :
ALGUNS SEGUNDOS DEPOIS...
        :           :          :
        :           :          :
        :           :          :
fvs-0.1.1/autom4te.cache/traces.0
fvs-0.1.1/version.sh
fvs-0.1.1/libtool
Agora novamente com o comando make, compile o pacote fvs, abaixo o exemplo de compilação:

$ cd fvs-0.1.1/
$ make
        :           :          :
        :           :          :
ALGUNS SEGUNDOS DEPOIS...
        :           :          :
        :           :          :
        :           :          :
Entre na pasta demos para executar alguns programas e verificar o funcionamento dos processos.

$ cd demos

O programa fvs_binarize gera uma imagem binarizada (branco e preto) com o nome finger_binarize.pgm.

$ ./fvs_binarize finger01.pgm finger_binarize.pgm
1/5 Determining the ridge direction
2/5 Determining the ridge frequency
3/5 Creating the mask
4/5 Enhancing the fingerprint image
5/5 Binarize
Cleaning up and exiting...
Abaixo um exemplo de imagem gerada:


O programa fvs_direction detecta as direções das impressões digitais.

$ ./fvs_direction finger_binarize.pgm finger_direction.pgm
Opening file finger_binarize.pgm...
1/2 Determining the ridge direction
2/2 Creating a new image with the direction
Cleaning up and exiting...
Veja o resultado:


O programa fvs_thinner converte as linhas da impressão digital em um único pixel de largura.

$ ./fvs_thinner finger01.pgm finger_thinner.pgm
1/6 Determining the ridge direction
2/6 Determining the ridge frequency
3/6 Creating the mask
4/6 Enhancing the fingerprint image
5/6 Binarize
6/6 Thinning
Cleaning up and exiting...
Veja o resultado:


Agora finalmente o cálculo dos pontos de minúcias executando o programa fvs_minutia.

$ ./fvs_minutia finger01.pgm finger_minutia.pgm
1/8 Determining the ridge direction
2/8 Determining the ridge frequency
3/8 Creating the mask
4/8 Enhancing the fingerprint image
5/8 Binarize
6/8 Thinning
7/8 Detecting minutia
8/8 Drawing minutia
Cleaning up and exiting...
Veja o resultado:


O objetivo deste documento é esclarecer o funcionamento da biometria voltada para leitura de impressão digital. Os próximos passos são o processamento para identificação e verificação entre duas impressões digitais para determinar a sua similaridade.

A NETi TECNOLOGIA (empresa no qual sou sócio proprietário) desenvolve soluções biométricas desde 1997. Várias aplicações baseadas em plataforma GNU/Linux utilizando a biometria de conhecimento facial e impressão digital foram desenvolvidas para o mercado consumidor. Abaixo um vídeo demonstrativo de uma aplicação exemplo utilizando o reconhecimento através da impressão digital com algoritmos disponíveis no mercado.

[Vídeo] http://cabelo.linuxdicas.com.br/videos/digital.html
[Vídeo] http://cabelo.linuxdicas.com.br/videos/finger.html

Imagem de uma aplicação biométrica:


"O próximo grande salto evolutivo da humanidade será a descoberta de que cooperar é melhor que competir"

Prof. Pietro Ubaldi

Página anterior    

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

Transmitindo dados para relógios Timex Datalink no GNU/Linux

CUDA: Programe a sua NVIDIA

WebCDWrite: O incrível serviço de gravação de CD-R sob demanda via HTTP

Biometria: Reconhecimento Facial OpenSource!

Programe em Python no jogo Minecraft com seu filho ou sozinho

Leitura recomendada

Acessando partições ReiserFS pelo Windows

Minha primeira visita ao iTown

Terminais leves no SuSE (LTSP)

Instalando Beryl no Windows XP

Montando um servidor de pacotes pré-compilados do Gentoo

  
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