[python-brasil] Rascunho do registro de ponto por biometria em Python

386 views
Skip to first unread message

Junior Polegato - Linux

unread,
Jun 1, 2009, 2:06:52 PM6/1/09
to Python Brasil
Olá,

Dei minhas escavadas na internet e encontrei uma vaga
documentação sobre impressões digitais, mas tem uma biblioteca pronta e
empacotada no Debian para isso, chamada FingerPrint, a qual já estava
instala devido à eu utiliza no notebook o leitor de impressão digital em
vez de digitar senhas.

Pois bem, ela é em C e dei uma olhada em C, bem simples. Então
cacei nos repositórios do Debian algo que relacionasse Python com a
mesma e nada. Então fui ao Gooráculo e encontrei alguns e-mail [1][2]
sobre o assunto. Usei o "snapshot - master - tar.gz" no endereço [3],
encontrado no e-mail [2], instalei o pacote swig necessário para
compilar/instalar o pyfprint e tudo instalou normal.

Daí foi fazer em Python o que eu já tinha rascunhado em C, sendo
o resultado abaixo e o código em [4]. Agora tem que conciliar o código
com um banco de dados e uma interface gráfica, que poderá ser agregada
ao ERP das empresas.

Minha dúvida agora é como salvar os objetos Fprint num banco de
dados e depois recuperá-lo para então fazer a identificação do
funcionário. Como salvo um objeto qualquer num banco de dados (SQLite,
PostgreSQL ou MySQL)?

Só outra observação, o Sane não suporta esses leitores de
impressão digital, até onde pude averiguar, assim não dá para usar o
Sane como indicou o David Kwast, mas achei interessante, consegue pegar
imagem num digitalizador na rede e da webcam no notebook, talvez possa
ser integrando com um reconhecimento de face, por exemplo.

[]'s
Junior Polegato

[1] http://www.mail-archive.com/fpr...@reactivated.net/msg00629.html
[2] http://osdir.com/ml/linux.fprint/2008-07/msg00001.html
[3] http://repo.or.cz/w/pyfprint.git
[4] http://pastebin.com/f51a34b7

Dispositivos encontrados:
Apenas o dispositivo "AuthenTec AES2501 (4)" encontrado, usando-o...

Prosseguindo com dispositivo "AuthenTec AES2501 (4)"

=====> Para parar, toque no leitor biométrico ou deixe o nome em branco...

Nome da 1ª pessoa: Junior Esquerdo
Passe (ou pressione) o dedo...

Nome da 2ª pessoa: Junior Direito
Passe (ou pressione) o dedo...

Nome da 3ª pessoa: Junior Polegar Direito
Passe (ou pressione) o dedo...

Nome da 4ª pessoa: Junior Polegar Esquerdo
Passe (ou pressione) o dedo...

Nome da 5ª pessoa:

=====> Passe o dedo para registrar o ponto ou toque para sair...

Ponto da pessoa "Junior Polegar Esquerdo" registrado em "2009-06-01
13:40:01.485662"
Ponto da pessoa "Junior Polegar Direito" registrado em "2009-06-01
13:40:08.452827"
Ponto da pessoa "Junior Direito" registrado em "2009-06-01 13:40:11.489469"
Ponto da pessoa "Junior Esquerdo" registrado em "2009-06-01 13:40:14.237994"
aes2501:warning [capture] swiping finger too slow?
Impressão digital não identificada!
Impressão digital não identificada!
Impressão digital não identificada!
Ponto da pessoa "Junior Esquerdo" registrado em "2009-06-01 13:40:27.454170"
Impressão digital não identificada!
Ponto da pessoa "Junior Direito" registrado em "2009-06-01 13:40:32.722653"
Ponto da pessoa "Junior Polegar Direito" registrado em "2009-06-01
13:40:36.306112"

------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia: |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar |
| E se você é usuário do BOL lembre-se de cadastrar o |
| e-mail do grupo na lista branca do seu sistema anti-spam. |
`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html


David Kwast

unread,
Jun 1, 2009, 6:35:46 PM6/1/09
to python...@yahoogrupos.com.br
2009/6/1 Junior Polegato - Linux <li...@juniorpolegato.com.br>

> Minha dúvida agora é como salvar os objetos Fprint num banco de
> dados e depois recuperá-lo para então fazer a identificação do
> funcionário. Como salvo um objeto qualquer num banco de dados (SQLite,
> PostgreSQL ou MySQL)?

Eu não sei nada desse assunto, mas me interesso muito por biometria. Imagino
que você precisa pegar as informações do leitor, extrair dados úteis e
unicos do sensor (imagino que esta bibliotaca faça isso) e armazenar estes
dados no banco. Quando alguém usar o sensor para identificação, basta
comparar os dados processados com os dados no banco.

Simplificando, a biblioteca junto com o sensor, retornarão sempre o mesmo
número com o mesmo dedo (em teoria), basta armazená-lo e compará-lo toda
vez.

Achei o wiki [1] do projeto. Lá tem um demo em gtk [2] com screenshots [3].
Tente ver como o demo faz para armazenar e validar uma impressão.

Como tudo na computação, serão números e operações.

Sobre o banco de dados, eu recomendo o Buzhug caso o volume seja pequeno
(>1000 registros). Uso o Buzhug [4] com uma tabela de intervalos de CEPs e
com certeza o desempenho seria o mesmo se eu usasse um banco "SQL mais
robusto".

[1] http://www.reactivated.net/fprint/wiki/Libfprint
[2] http://www.reactivated.net/fprint/wiki/Fprint_demo
[3] http://www.reactivated.net/fprint/wiki/Image:V.05minutiae.png
[4] http://buzhug.sourceforge.net/


[As partes desta mensagem que não continham texto foram removidas]

Junior Polegato - Linux

unread,
Jun 3, 2009, 12:57:17 AM6/3/09
to python...@yahoogrupos.com.br
David Kwast escreveu:

> 2009/6/1 Junior Polegato - Linux <li...@juniorpolegato.com.br>
>
>> Minha dúvida agora é como salvar os objetos Fprint num banco de
>> dados e depois recuperá-lo para então fazer a identificação do
>> funcionário. Como salvo um objeto qualquer num banco de dados (SQLite,
>> PostgreSQL ou MySQL)?
>>
> Eu não sei nada desse assunto, mas me interesso muito por biometria. Imagino
> que você precisa pegar as informações do leitor, extrair dados úteis e
> unicos do sensor (imagino que esta bibliotaca faça isso) e armazenar estes
> dados no banco. Quando alguém usar o sensor para identificação, basta
> comparar os dados processados com os dados no banco.
> Simplificando, a biblioteca junto com o sensor, retornarão sempre o mesmo
> número com o mesmo dedo (em teoria), basta armazená-lo e compará-lo toda
> vez.
> Achei o wiki [1] do projeto. Lá tem um demo em gtk [2] com screenshots [3].
> Tente ver como o demo faz para armazenar e validar uma impressão.
> Como tudo na computação, serão números e operações.
> Sobre o banco de dados, eu recomendo o Buzhug caso o volume seja pequeno
> (>1000 registros). Uso o Buzhug [4] com uma tabela de intervalos de CEPs e
> com certeza o desempenho seria o mesmo se eu usasse um banco "SQL mais
> robusto".
> [1] http://www.reactivated.net/fprint/wiki/Libfprint
> [2] http://www.reactivated.net/fprint/wiki/Fprint_demo
> [3] http://www.reactivated.net/fprint/wiki/Image:V.05minutiae.png
> [4] http://buzhug.sourceforge.net/
>

Caro David,

Eu já tinha olhado a Wiki e debulhado o programa demo em C, até
fiz o rascunho em C. Depois descobri o um bind para Python, que
funcionou beleza, tal como em C, onde faço a leitura de vários dedos e
associo a nomes de pessoas e guardo na memória, depois, quando se passa
o dedo, ele informa quem foi que passou o dedo, perfeito, sem dor, como
pode-se ver no código e saída que passei na primeira mensagem deste tópico.

Minha dúvida é como armazenar um objeto em Python, da classe
"Fprint" no caso, num banco de dados... Já tenho os funcionários em
PostgreSQL e poderia neste ter uma tabela de digitais onde posso guardar
as 10 digitais de cada funcionário, depois quero carregar essas 10
digitais, que são objetos da classe "Fprint", multiplicadas pelo
funcionário, no caso 100, resultando em uma lista com 1.000 impressões
digitais. Então basta chama a função de identificar a digital, passando
como parâmetro a lista de 1.000 digitais, e esta função ou me retorna
"None" ou qual foi a digital reconhecida na sequência de digitais. Por
exemplo: se me retornar que foi a 654, então basta dividir por 10,
considerar a parte inteira e eu teria o código do cliente. Simples assim.

Mas persiste a dúvida, como salvar um objeto de uma classe, no
caso Fprint, completo, em um banco de dados e depois recuperá-los na
para forma uma lista?

[]'s
Junior Polegato

Rodolfo S. Carvalho

unread,
Jun 3, 2009, 6:07:43 AM6/3/09
to python...@yahoogrupos.com.br
2009/6/3 Junior Polegato - Linux <li...@juniorpolegato.com.br>:

Bem, você pode usar pickle ou cPickle pra armazenar em um campo text,
mas isso ia tornar a busca às informações um pouco lentas, eu acho...
Talvez seria bom se vc criasse uma tabela, com os dados mapeados do
Fprint, e buscasse as informações com SQLAlchemy.

Pode usar um shelf[1] também. Você indexa o shelf pela matrícula do
funcionário, e joga o objeto fprint lá dentro, aí fica fácil recuperar
o objeto inteiro.

>
> []'s
> Junior Polegato
>
>


[1] http://docs.python.org/library/shelve.html
--
Rodolfo Carvalho
Web Developer
rodol...@gmail.com

David Kwast

unread,
Jun 3, 2009, 8:29:12 AM6/3/09
to python...@yahoogrupos.com.br
2009/6/3 Junior Polegato - Linux <li...@juniorpolegato.com.br>

> Minha dúvida é como armazenar um objeto em Python, da classe
> "Fprint" no caso, num banco de dados... Já tenho os funcionários em
> PostgreSQL e poderia neste ter uma tabela de digitais onde posso guardar
> as 10 digitais de cada funcionário, depois quero carregar essas 10
> digitais, que são objetos da classe "Fprint", multiplicadas pelo
> funcionário, no caso 100, resultando em uma lista com 1.000 impressões
> digitais. Então basta chama a função de identificar a digital, passando
> como parâmetro a lista de 1.000 digitais, e esta função ou me retorna
> "None" ou qual foi a digital reconhecida na sequência de digitais. Por
> exemplo: se me retornar que foi a 654, então basta dividir por 10,
> considerar a parte inteira e eu teria o código do cliente. Simples assim.

Então, só me diz uma coisa, dependendo da resposta, a solução pode ser muito
mais fácil e se beneficiar das vantagens de um banco de dados.

Você consegue obter sempre o mesmo valor a partir do mesmo dedo? Minha
idéia, caso essa biblioteca gere uma espécie de hash único para cada digital
testada, seria criar uma tabela que indexa esses hashes e possui uma
ForeignKey para a tabela de usuários, simples assim. Você só precisa achar o
valor único para cada dedo que esta biblioteca gera.

Andei lendo a documentação:

http://www.reactivated.net/fprint/api/group__print__data.html#_details
This page documents the various operations you can do with a stored print.
Note that by default, "stored prints" are not actually stored anywhere
except in *RAM*. For the simple scenarios, libfprint provides a simple API
for you to save and load the stored prints referring to a single user in
their home directory. For more advanced users, libfprint provides* APIs for
you to convert print data to a byte string*, and to reconstruct stored
prints from such data at a later point. *You are welcome to store these byte
strings in any fashion that suits you*.

Acho que achei as funções

*fp_print_data_get_data*
Convert a stored print into a unified representation inside a data buffer.
You can then store this data buffer in any way that suits you, and load it
back at some later time using fp_print_data_from_data().

*fp_print_data* fp_print_data_from_data*
Load a stored print from a data buffer.
The contents of said buffer must be the untouched contents of a buffer
previously supplied to you by the fp_print_data_get_data() function.

Como eu faria:

No cadastramento, pego a digital do usuário em byte strings e armazeno em
qualquer banco e relaciono com o mesmo. Sempre que algum usuário "bater o
ponto", pego os *byte strings* desta digital ainda não identificada e
procuro pela linha com ela no banco. Se tiver, imagino que seja uma só, se
não tiver ele não foi cadastrado. Aquele demo do fprint deve fazer mais ou
menos isso. E talvez, você possa armazenar ou não mais de uma digital por
pessoa, imagino que cada dedo gere um hash diferente.

Poderia me passar a marca e o modelo do leitor de digital que você está
usando? Acho que vou sair da teoria e começar a brincar com isso.


[As partes desta mensagem que não continham texto foram removidas]

------------------------------------

Henrique Baggio

unread,
Jun 3, 2009, 11:33:39 PM6/3/09
to python...@yahoogrupos.com.br
2009/6/3 Rodolfo S. Carvalho <rodol...@gmail.com>:
>
>[cut]

>
> Bem, você pode usar pickle ou cPickle pra armazenar em um campo text,
> mas isso ia tornar a busca às informações um pouco lentas, eu acho...
> Talvez seria bom se vc criasse uma tabela, com os dados mapeados do
> Fprint, e buscasse as informações com SQLAlchemy.

Também pensei no SQLAlchemy. Pelo que entendi dele, ele simplifica a
maneira como mapear os campos de uma tabela SQL num objeto em Python
(me corrijam se falei bobagem, hehehe)

--
Henrique Baggio

David Kwast

unread,
Jun 4, 2009, 8:59:19 AM6/4/09
to python...@yahoogrupos.com.br
2009/6/4 Henrique Baggio <hnrqb...@gmail.com>

> Também pensei no SQLAlchemy. Pelo que entendi dele, ele simplifica a
> maneira como mapear os campos de uma tabela SQL num objeto em Python
> (me corrijam se falei bobagem, hehehe)

Com certeza vai precisar de um banco, com ORM ou sem. Acho que o Junior está
preocupado demais com o objeto que contém as impressões. Eu sugiro uma a
abordagem inversa, como eu expliquei na outra mensagem. Usar esta biblioteca
somente no modo cadastro, e obter os "bytes strings" da digital através
dela, e usar estes bytes para relacionar algum dado que leve ao usuário (por
ForeignKey, nome do usuário ou ID do usuário no sistema). Até onde eu vi,
não compensa fazer o match pela biblioteca.


[As partes desta mensagem que não continham texto foram removidas]

------------------------------------

Junior Polegato - Linux

unread,
Jun 4, 2009, 10:08:51 PM6/4/09
to python...@yahoogrupos.com.br
David Kwast escreveu:

> Acho que achei as funções
> *fp_print_data_get_data*
> Convert a stored print into a unified representation inside a data buffer.
> You can then store this data buffer in any way that suits you, and load it
> back at some later time using fp_print_data_from_data().
>
> *fp_print_data* fp_print_data_from_data*
> Load a stored print from a data buffer.
> The contents of said buffer must be the untouched contents of a buffer
> previously supplied to you by the fp_print_data_get_data() function.
>
> Como eu faria:
>
> No cadastramento, pego a digital do usuário em byte strings e armazeno em
> qualquer banco e relaciono com o mesmo. Sempre que algum usuário "bater o
> ponto", pego os *byte strings* desta digital ainda não identificada e
> procuro pela linha com ela no banco. Se tiver, imagino que seja uma só, se
> não tiver ele não foi cadastrado. Aquele demo do fprint deve fazer mais ou
> menos isso. E talvez, você possa armazenar ou não mais de uma digital por
> pessoa, imagino que cada dedo gere um hash diferente.
>
> Poderia me passar a marca e o modelo do leitor de digital que você está
> usando? Acho que vou sair da teoria e começar a brincar com isso.
>

Olá,

David, muito obrigado pelas dicas, estava lá dentro da classe
Fprint escrito a função equivalente, li e não percebi o que era até sua
dica, veja:

def data(self):
"""
Return a serialized dataset representing the fprint.
This data could be stored away, and later passed to the
contructor of Fprint.
"""
if not self.data_ptr:
raise "no print"
s = pyf.pyfp_print_get_data(self.data_ptr)
if not len(s):
raise "serialization failed"
return s


O leitor é de um notebook Amazon AMZ-L82, identificado como
AuthenTec AES2501, dado pelo lsusb como:

Bus 004 Device 002: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor

Beleza, construí agora um rascunho melhor, versão 0.0.1, com
banco de dados SQLite [1], veja a saída com alguns testes cadastrados,
onde peguei minha gata e eu, cadastrei minhas digitais em 3 usuários e
dela em 2 usuários e fomos passando o dedo e marcando ponto, veja a
saída com explicação abaixo:

Dispositivos encontrados:
Apenas o dispositivo "AuthenTec AES2501 (4)" encontrado, usando-o...

Processeguindo com dispositivo "AuthenTec AES2501 (4)"

=====> Para parar, toque no leitor biométrico ou deixe o nome em branco...

Nome da pessoa: Teste


Passe (ou pressione) o dedo...

Nome da pessoa: Teste


Passe (ou pressione) o dedo...

Nome da pessoa: Teste 2


Passe (ou pressione) o dedo...

Nome da pessoa: Teste 2


Passe (ou pressione) o dedo...

Nome da pessoa:

=====> Passe o dedo para registrar o ponto ou toque para sair...

Ponto da pessoa "Teste 2 (5)" registrado em "2009-06-04 22:45:39.158681"
Ponto da pessoa "Junior (1)" registrado em "2009-06-04 22:45:42.602402"
Ponto da pessoa "Teste 2 (5)" registrado em "2009-06-04 22:45:44.477829"
Ponto da pessoa "Teste (4)" registrado em "2009-06-04 22:45:46.324475"
Impressão digital não identificada!
Ponto da pessoa "Teste (4)" registrado em "2009-06-04 22:45:51.208166"
Ponto da pessoa "Junior (1)" registrado em "2009-06-04 22:45:56.061017"
Ponto da pessoa "Junior (1)" registrado em "2009-06-04 22:45:59.097399"
Ponto da pessoa "Junior (1)" registrado em "2009-06-04 22:46:01.140672"

* * * * * * * * * *

* Junior * registrou os seguintes pontos:
2009-06-04 22:27:38.525605
2009-06-04 22:33:16.321484
2009-06-04 22:36:43.764615
2009-06-04 22:38:48.891522
2009-06-04 22:39:06.368238
2009-06-04 22:40:00.366694
2009-06-04 22:40:04.618354
2009-06-04 22:40:07.276958
2009-06-04 22:40:34.141725
2009-06-04 22:40:39.174419
2009-06-04 22:41:05.231719
2009-06-04 22:41:10.453100
2009-06-04 22:41:15.134316
2009-06-04 22:41:18.104810
2009-06-04 22:41:28.130116
2009-06-04 22:41:39.222001
2009-06-04 22:41:46.797902
2009-06-04 22:43:13.896938
2009-06-04 22:43:25.101024
2009-06-04 22:44:20.553160
2009-06-04 22:45:42.602537
2009-06-04 22:45:56.061145
2009-06-04 22:45:59.097609
2009-06-04 22:46:01.140803

* Kelly 1 * registrou os seguintes pontos:
2009-06-04 22:38:14.323987

* Teste * registrou os seguintes pontos:
2009-06-04 22:45:46.324603
2009-06-04 22:45:51.208378

* Teste 2 * registrou os seguintes pontos:
2009-06-04 22:45:39.158832
2009-06-04 22:45:44.477948

* Kelly 2 * registrou os seguintes pontos:
2009-06-04 22:36:37.064017
2009-06-04 22:36:48.915291
2009-06-04 22:38:09.155702

* * * * Obrigado * * * *

===> Funcionamento: O programa procura por leitores de impressão
digital, se encontrar apenas um, o utiliza, senão pergunta qual deve ser
usado. Após selecionado o leitor, vamos ao cadastro de nomes e
impressões digitais, onde é perguntado o nome e pedido uma leitura,
sendo que se o nome não existir no banco de dados o cadastra, senão
identifica e usa o código do cadastrado, e aí associa a leitura de
impressão digital a esse nome. Finalizado novos cadastros de nomes e
impressões digitais (pressione enter no nome), vai para a parte onde
espera por uma leitura para identificar a qual nome pertence tal
impressão digital e registra, se identificar, o momento em que foi
identificada tal impressão digital, terminando com um toque no leito.
Terminado, lista todos os registros de pontos armazenados. Veja que não
é perfeito, mas como eu esperava muita falha nas detecções, bem dizer 1
em 10 não identifica de primeira, mas na segunda leitura já identificou
corretamente.


Tenho agora um registrador de pontos no notebook, onde uma
interface em volta disso pode tornar um perfeito relógio de ponto
biométrico computadorizado, ainda mais com os netbooks pequenos e
baratos, alguns já com leitores, se tornam uma boa alternativa a custo
bastante acessível, livre e consequentemente o mais flexível do mercado.

[1] http://pastebin.com/f6271d7bc


[]'s
Junior Polegato

David Kwast

unread,
Jun 4, 2009, 10:27:21 PM6/4/09
to python...@yahoogrupos.com.br
2009/6/4 Junior Polegato - Linux <li...@juniorpolegato.com.br>

> Tenho agora um registrador de pontos no notebook, onde uma
> interface em volta disso pode tornar um perfeito relógio de ponto
> biométrico computadorizado, ainda mais com os netbooks pequenos e
> baratos, alguns já com leitores, se tornam uma boa alternativa a custo
> bastante acessível, livre e consequentemente o mais flexível do mercado.

Fico feliz que tenha dado certo.

Outros programas em outras linguagens lerão o banco de dados? Se não,
experiente o Buzhug [1]. Você não precisará usar SQL e poderá usar
arquitetura cliente/servidor mais tarde. Não sei porque ainda não entrou na
Stdlib.

[1] http://buzhug.sourceforge.net/


[As partes desta mensagem que não continham texto foram removidas]

------------------------------------

Junior Polegato - Linux

unread,
Jun 4, 2009, 10:47:54 PM6/4/09
to python...@yahoogrupos.com.br
David Kwast escreveu:

> 2009/6/4 Junior Polegato - Linux <li...@juniorpolegato.com.br>
>
>> Tenho agora um registrador de pontos no notebook, onde uma
>> interface em volta disso pode tornar um perfeito relógio de ponto
>> biométrico computadorizado, ainda mais com os netbooks pequenos e
>> baratos, alguns já com leitores, se tornam uma boa alternativa a custo
>> bastante acessível, livre e consequentemente o mais flexível do mercado.
>>
> Fico feliz que tenha dado certo.
> Outros programas em outras linguagens lerão o banco de dados? Se não,
> experiente o Buzhug [1]. Você não precisará usar SQL e poderá usar
> arquitetura cliente/servidor mais tarde. Não sei porque ainda não entrou na
> Stdlib.
> [1] http://buzhug.sourceforge.net/
>

Olá,

Sim, vários programas de linguagens diferentes, nenhum em Python
ainda, usam os dados no banco de dados PostgreSQL, que será o propósito
final em criar as tabelas de impressão digital e registro de ponto e
esses dados registrados precisarão ser lidos por eles, estou certo
disso. Fiz com SQLite somente para exemplificar, mas ficou bom.

Valeu!

[]'s
Junior Polegato

ynoslenav

unread,
Jun 28, 2012, 1:32:35 PM6/28/12
to python...@googlegroups.com, Python Brasil

Já li esse post várias vezes e não consigo entender como modificar esse ótimo exemplo do Junior Polegato pra verificar se uma digital já está gravada no banco e então não gravar novamente, pois nesse exemplo ele ta verificando somente pelo "nome".

  1. # Criando "banco" de nomes e impress�es digitais
  2. print "\n=====> Para parar, toque no leitor biom�trico  ou deixe o nome em branco..."
  3. while True:
  4.     print "\nNome da pessoa: ",
  5.     nome = raw_input()
  6.     if nome == "":
  7.         break
  8.     print "Passe (ou pressione) o dedo..."
  9.     digital = dispositivo.enroll_finger()
  10.     if digital == ('xxx'None):
  11.         break;
  12.     cursor.execute('SELECT codigo FROM nomes WHERE nome = ?'(nome,))
  13.     codigo = cursor.fetchone()
  14.     if codigo:
  15.         cursor.execute('INSERT INTO digitais VALUES (?, ?)'(codigo[0], sqlite.Binary(digital[0].data())))
  16.     else:
  17.         cursor.execute('INSERT INTO nomes VALUES (null, ?)'(nome,))
  18.         cursor.execute('INSERT INTO digitais select codigo, ? from nomes where nome = ?',(sqlite.Binary(digital[0].data()), nome))
  19.     conexao.commit()

Valeu e obg.

Em segunda-feira, 1 de junho de 2009 15h06min52s UTC-3, Junior Polegato - Linux escreveu:
Olá,

       Dei minhas escavadas na internet e encontrei uma vaga

documentação sobre impressões digitais, mas tem uma biblioteca pronta e
empacotada no Debian para isso, chamada FingerPrint, a qual já estava
instala devido à eu utiliza no notebook o leitor de impressão digital em
vez de digitar senhas.

       Pois bem, ela é em C e dei uma olhada em C, bem simples. Então
cacei nos repositórios do Debian algo que relacionasse Python com a
mesma e nada. Então fui ao Gooráculo e encontrei alguns e-mail [1][2]
sobre o assunto. Usei o "snapshot - master - tar.gz"  no endereço [3],
encontrado no e-mail [2], instalei o pacote swig necessário para

compilar/instalar o pyfprint e tudo instalou normal.

       Daí foi fazer em Python o que eu já tinha rascunhado em C, sendo
o resultado abaixo e o código em [4]. Agora tem que conciliar o código
com um banco de dados e uma interface gráfica, que poderá ser agregada
ao ERP das empresas.

       Minha dúvida agora é como salvar os objetos Fprint num banco de
dados e depois recuperá-lo para então fazer a identificação do
funcionário. Como salvo um objeto qualquer num banco de dados (SQLite,
PostgreSQL ou MySQL)?

       Só outra observação, o Sane não suporta esses leitores de
impressão digital, até onde pude averiguar, assim não dá para usar o

Sane como indicou o David Kwast, mas achei interessante, consegue pegar
imagem num digitalizador na rede e da webcam no notebook, talvez possa
ser integrando com um reconhecimento de face, por exemplo.

[]'s
            Junior Polegato

[1] http://www.mail-archive.com/fpr...@reactivated.net/msg00629.html
[2] http://osdir.com/ml/linux.fprint/2008-07/msg00001.html
[3] http://repo.or.cz/w/pyfprint.git
[4] http://pastebin.com/f51a34b7

Dispositivos encontrados:
    Apenas o dispositivo "AuthenTec AES2501 (4)" encontrado, usando-o...

Prosseguindo com dispositivo "AuthenTec AES2501 (4)"

=====> Para parar, toque no leitor biométrico  ou deixe o nome em branco...

Nome da 1ª pessoa:  Junior Esquerdo


Passe (ou pressione) o dedo...

Nome da 2ª pessoa:  Junior Direito


Passe (ou pressione) o dedo...

Nome da 3ª pessoa:  Junior Polegar Direito


Passe (ou pressione) o dedo...

Nome da 4ª pessoa:  Junior Polegar Esquerdo


Passe (ou pressione) o dedo...

Nome da 5ª pessoa:  

=====> Passe o dedo para registrar o ponto ou toque para sair...

Ponto da pessoa "Junior Polegar Esquerdo" registrado em "2009-06-01
13:40:01.485662"
Ponto da pessoa "Junior Polegar Direito" registrado em "2009-06-01
13:40:08.452827"
Ponto da pessoa "Junior Direito" registrado em "2009-06-01 13:40:11.489469"
Ponto da pessoa "Junior Esquerdo" registrado em "2009-06-01 13:40:14.237994"
aes2501:warning [capture] swiping finger too slow?

Impressão digital não identificada!
Impressão digital não identificada!
Impressão digital não identificada!


Ponto da pessoa "Junior Esquerdo" registrado em "2009-06-01 13:40:27.454170"

Impressão digital não identificada!


Ponto da pessoa "Junior Direito" registrado em "2009-06-01 13:40:32.722653"
Ponto da pessoa "Junior Polegar Direito" registrado em "2009-06-01
13:40:36.306112"

------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |

| E se você é usuário do BOL lembre-se de cadastrar o       |


| e-mail do grupo na lista branca do seu sistema anti-spam. |

`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:

    python-brasil-unsubscribe@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html



Em segunda-feira, 1 de junho de 2009 15h06min52s UTC-3, Junior Polegato - Linux escreveu:
Olá,

       Dei minhas escavadas na internet e encontrei uma vaga

documentação sobre impressões digitais, mas tem uma biblioteca pronta e
empacotada no Debian para isso, chamada FingerPrint, a qual já estava
instala devido à eu utiliza no notebook o leitor de impressão digital em
vez de digitar senhas.

       Pois bem, ela é em C e dei uma olhada em C, bem simples. Então
cacei nos repositórios do Debian algo que relacionasse Python com a
mesma e nada. Então fui ao Gooráculo e encontrei alguns e-mail [1][2]
sobre o assunto. Usei o "snapshot - master - tar.gz"  no endereço [3],
encontrado no e-mail [2], instalei o pacote swig necessário para

compilar/instalar o pyfprint e tudo instalou normal.

       Daí foi fazer em Python o que eu já tinha rascunhado em C, sendo
o resultado abaixo e o código em [4]. Agora tem que conciliar o código
com um banco de dados e uma interface gráfica, que poderá ser agregada
ao ERP das empresas.

       Minha dúvida agora é como salvar os objetos Fprint num banco de
dados e depois recuperá-lo para então fazer a identificação do
funcionário. Como salvo um objeto qualquer num banco de dados (SQLite,
PostgreSQL ou MySQL)?

       Só outra observação, o Sane não suporta esses leitores de
impressão digital, até onde pude averiguar, assim não dá para usar o

Sane como indicou o David Kwast, mas achei interessante, consegue pegar
imagem num digitalizador na rede e da webcam no notebook, talvez possa
ser integrando com um reconhecimento de face, por exemplo.

[]'s
            Junior Polegato

[1] http://www.mail-archive.com/fpr...@reactivated.net/msg00629.html
[2] http://osdir.com/ml/linux.fprint/2008-07/msg00001.html
[3] http://repo.or.cz/w/pyfprint.git
[4] http://pastebin.com/f51a34b7

Dispositivos encontrados:
    Apenas o dispositivo "AuthenTec AES2501 (4)" encontrado, usando-o...

Prosseguindo com dispositivo "AuthenTec AES2501 (4)"

=====> Para parar, toque no leitor biométrico  ou deixe o nome em branco...

Nome da 1ª pessoa:  Junior Esquerdo


Passe (ou pressione) o dedo...

Nome da 2ª pessoa:  Junior Direito


Passe (ou pressione) o dedo...

Nome da 3ª pessoa:  Junior Polegar Direito


Passe (ou pressione) o dedo...

Nome da 4ª pessoa:  Junior Polegar Esquerdo


Passe (ou pressione) o dedo...

Nome da 5ª pessoa:  

=====> Passe o dedo para registrar o ponto ou toque para sair...

Ponto da pessoa "Junior Polegar Esquerdo" registrado em "2009-06-01
13:40:01.485662"
Ponto da pessoa "Junior Polegar Direito" registrado em "2009-06-01
13:40:08.452827"
Ponto da pessoa "Junior Direito" registrado em "2009-06-01 13:40:11.489469"
Ponto da pessoa "Junior Esquerdo" registrado em "2009-06-01 13:40:14.237994"
aes2501:warning [capture] swiping finger too slow?

Impressão digital não identificada!
Impressão digital não identificada!
Impressão digital não identificada!


Ponto da pessoa "Junior Esquerdo" registrado em "2009-06-01 13:40:27.454170"

Impressão digital não identificada!


Ponto da pessoa "Junior Direito" registrado em "2009-06-01 13:40:32.722653"
Ponto da pessoa "Junior Polegar Direito" registrado em "2009-06-01
13:40:36.306112"

------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |

| E se você é usuário do BOL lembre-se de cadastrar o       |


| e-mail do grupo na lista branca do seu sistema anti-spam. |

`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:

    python-brasil-unsubscribe@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html



Em segunda-feira, 1 de junho de 2009 15h06min52s UTC-3, Junior Polegato - Linux escreveu:
Olá,

       Dei minhas escavadas na internet e encontrei uma vaga

documentação sobre impressões digitais, mas tem uma biblioteca pronta e
empacotada no Debian para isso, chamada FingerPrint, a qual já estava
instala devido à eu utiliza no notebook o leitor de impressão digital em
vez de digitar senhas.

       Pois bem, ela é em C e dei uma olhada em C, bem simples. Então
cacei nos repositórios do Debian algo que relacionasse Python com a
mesma e nada. Então fui ao Gooráculo e encontrei alguns e-mail [1][2]
sobre o assunto. Usei o "snapshot - master - tar.gz"  no endereço [3],
encontrado no e-mail [2], instalei o pacote swig necessário para

compilar/instalar o pyfprint e tudo instalou normal.

       Daí foi fazer em Python o que eu já tinha rascunhado em C, sendo
o resultado abaixo e o código em [4]. Agora tem que conciliar o código
com um banco de dados e uma interface gráfica, que poderá ser agregada
ao ERP das empresas.

       Minha dúvida agora é como salvar os objetos Fprint num banco de
dados e depois recuperá-lo para então fazer a identificação do
funcionário. Como salvo um objeto qualquer num banco de dados (SQLite,
PostgreSQL ou MySQL)?

       Só outra observação, o Sane não suporta esses leitores de
impressão digital, até onde pude averiguar, assim não dá para usar o

Sane como indicou o David Kwast, mas achei interessante, consegue pegar
imagem num digitalizador na rede e da webcam no notebook, talvez possa
ser integrando com um reconhecimento de face, por exemplo.

[]'s
            Junior Polegato

[1] http://www.mail-archive.com/fpr...@reactivated.net/msg00629.html
[2] http://osdir.com/ml/linux.fprint/2008-07/msg00001.html
[3] http://repo.or.cz/w/pyfprint.git
[4] http://pastebin.com/f51a34b7

Dispositivos encontrados:
    Apenas o dispositivo "AuthenTec AES2501 (4)" encontrado, usando-o...

Prosseguindo com dispositivo "AuthenTec AES2501 (4)"

=====> Para parar, toque no leitor biométrico  ou deixe o nome em branco...

Nome da 1ª pessoa:  Junior Esquerdo


Passe (ou pressione) o dedo...

Nome da 2ª pessoa:  Junior Direito


Passe (ou pressione) o dedo...

Nome da 3ª pessoa:  Junior Polegar Direito


Passe (ou pressione) o dedo...

Nome da 4ª pessoa:  Junior Polegar Esquerdo


Passe (ou pressione) o dedo...

Nome da 5ª pessoa:  

=====> Passe o dedo para registrar o ponto ou toque para sair...

Ponto da pessoa "Junior Polegar Esquerdo" registrado em "2009-06-01
13:40:01.485662"
Ponto da pessoa "Junior Polegar Direito" registrado em "2009-06-01
13:40:08.452827"
Ponto da pessoa "Junior Direito" registrado em "2009-06-01 13:40:11.489469"
Ponto da pessoa "Junior Esquerdo" registrado em "2009-06-01 13:40:14.237994"
aes2501:warning [capture] swiping finger too slow?

Impressão digital não identificada!
Impressão digital não identificada!
Impressão digital não identificada!


Ponto da pessoa "Junior Esquerdo" registrado em "2009-06-01 13:40:27.454170"

Impressão digital não identificada!


Ponto da pessoa "Junior Direito" registrado em "2009-06-01 13:40:32.722653"
Ponto da pessoa "Junior Polegar Direito" registrado em "2009-06-01
13:40:36.306112"

------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |

| E se você é usuário do BOL lembre-se de cadastrar o       |


| e-mail do grupo na lista branca do seu sistema anti-spam. |

`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:

    python-brasil-unsubscribe@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html



Em segunda-feira, 1 de junho de 2009 15h06min52s UTC-3, Junior Polegato - Linux escreveu:
Olá,

       Dei minhas escavadas na internet e encontrei uma vaga

documentação sobre impressões digitais, mas tem uma biblioteca pronta e
empacotada no Debian para isso, chamada FingerPrint, a qual já estava
instala devido à eu utiliza no notebook o leitor de impressão digital em
vez de digitar senhas.

       Pois bem, ela é em C e dei uma olhada em C, bem simples. Então
cacei nos repositórios do Debian algo que relacionasse Python com a
mesma e nada. Então fui ao Gooráculo e encontrei alguns e-mail [1][2]
sobre o assunto. Usei o "snapshot - master - tar.gz"  no endereço [3],
encontrado no e-mail [2], instalei o pacote swig necessário para

compilar/instalar o pyfprint e tudo instalou normal.

       Daí foi fazer em Python o que eu já tinha rascunhado em C, sendo
o resultado abaixo e o código em [4]. Agora tem que conciliar o código
com um banco de dados e uma interface gráfica, que poderá ser agregada
ao ERP das empresas.

       Minha dúvida agora é como salvar os objetos Fprint num banco de
dados e depois recuperá-lo para então fazer a identificação do
funcionário. Como salvo um objeto qualquer num banco de dados (SQLite,
PostgreSQL ou MySQL)?

       Só outra observação, o Sane não suporta esses leitores de
impressão digital, até onde pude averiguar, assim não dá para usar o

Sane como indicou o David Kwast, mas achei interessante, consegue pegar
imagem num digitalizador na rede e da webcam no notebook, talvez possa
ser integrando com um reconhecimento de face, por exemplo.

[]'s
            Junior Polegato

[1] http://www.mail-archive.com/fpr...@reactivated.net/msg00629.html
[2] http://osdir.com/ml/linux.fprint/2008-07/msg00001.html
[3] http://repo.or.cz/w/pyfprint.git
[4] http://pastebin.com/f51a34b7

Dispositivos encontrados:
    Apenas o dispositivo "AuthenTec AES2501 (4)" encontrado, usando-o...

Prosseguindo com dispositivo "AuthenTec AES2501 (4)"

=====> Para parar, toque no leitor biométrico  ou deixe o nome em branco...

Nome da 1ª pessoa:  Junior Esquerdo


Passe (ou pressione) o dedo...

Nome da 2ª pessoa:  Junior Direito


Passe (ou pressione) o dedo...

Nome da 3ª pessoa:  Junior Polegar Direito


Passe (ou pressione) o dedo...

Nome da 4ª pessoa:  Junior Polegar Esquerdo


Passe (ou pressione) o dedo...

Nome da 5ª pessoa:  

=====> Passe o dedo para registrar o ponto ou toque para sair...

Ponto da pessoa "Junior Polegar Esquerdo" registrado em "2009-06-01
13:40:01.485662"
Ponto da pessoa "Junior Polegar Direito" registrado em "2009-06-01
13:40:08.452827"
Ponto da pessoa "Junior Direito" registrado em "2009-06-01 13:40:11.489469"
Ponto da pessoa "Junior Esquerdo" registrado em "2009-06-01 13:40:14.237994"
aes2501:warning [capture] swiping finger too slow?

Impressão digital não identificada!
Impressão digital não identificada!
Impressão digital não identificada!


Ponto da pessoa "Junior Esquerdo" registrado em "2009-06-01 13:40:27.454170"

Impressão digital não identificada!


Ponto da pessoa "Junior Direito" registrado em "2009-06-01 13:40:32.722653"
Ponto da pessoa "Junior Polegar Direito" registrado em "2009-06-01
13:40:36.306112"

------------------------------------

,-----------------------------------------------------------.
| Antes de enviar um e-mail para o grupo leia:              |
| http://www.pythonbrasil.com.br/moin.cgi/AntesDePerguntar  |

| E se você é usuário do BOL lembre-se de cadastrar o       |


| e-mail do grupo na lista branca do seu sistema anti-spam. |

`-----------------------------------------------------------´Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/python-brasil/

<*> Para sair deste grupo, envie um e-mail para:

    python-brasil-unsubscribe@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Maxwell Oliveira

unread,
Jun 28, 2012, 5:30:26 PM6/28/12
to python...@googlegroups.com, python...@yahoogrupos.com.br
Bom dia, Junior !
Existe uma legislação especifica sobre Sistema de "Relógio de Ponto" ;
Lembrando que o sistema para ter validade ele tem que ser homologado.
E se a empresa utilizar um sistema q não é homologado alem dos registros não terem validade ele é multada !

Portaria 1510 do MTE


Ivanelson Nunes

unread,
Jun 28, 2012, 6:24:47 PM6/28/12
to python...@googlegroups.com, python...@yahoogrupos.com.br
Obrigado Junior,


Mas o foco do post é biometria com a libfprint e o wrapper pyfprint, estou tentando gravar e recuperar a digital de um banco de dados de forma que seja possível identificar uma digital que já esteja gravada no banco.


[]s


--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil

 
<*> Para sair deste grupo, envie um e-mail para:

Maxwell Oliveira

unread,
Jun 28, 2012, 7:34:24 PM6/28/12
to python...@googlegroups.com, Python Brasil
Sobre o erro ele esta nesta linha : 
  •         cursor.execute('INSERT INTO digitais VALUES (?, ?)', (codigo[0], sqlite.Binary(digital[0].data())))

Você deve verificar se o dado existe :
Exemplo :Substitua a linha acima por este código;

  1.     cursor.execute('SELECT 1 FROM digitais WHERE codigo=? and CampoDigitais = ?', ( codigo[0],sqlite.Binary(digital[0].data() ,))
  2.     existdigital = cursor.fetchone()
  3.     if  not existdigital :
  1.         cursor.execute('INSERT INTO digitais VALUES (?, ?)', (codigo[0], sqlite.Binary(digital[0].data())))

Ivanelson Nunes

unread,
Jun 28, 2012, 9:16:04 PM6/28/12
to python...@googlegroups.com, Python Brasil

Maxwell,


Na verdade minha dúvida é como converter isso, eu já tinha tentado dessa forma também, como vê no código a digital está sendo obtida pelo método digital[0].data(),   
então estou usando esse método tanto na hora de inputar o dado, como pra recuperar no banco, mas no SELECT não ta encontrando. 

Creio que tenho de converter pra outro formato tanto na hora de inputar, como na hora de recuperar, mas não consigo entender essa API pra fazer isso.

No github tem o wrapper dessa lib: https://github.com/luksan/pyfprint





--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil

 
<*> Para sair deste grupo, envie um e-mail para:

Reply all
Reply to author
Forward
0 new messages