TL; DR : Eu preciso decodificar um código QR de um arquivo de imagem usando Python (de preferência puro).
Eu tenho um arquivo jpg com um código QR que desejo decodificar usando Python. Encontrei algumas bibliotecas que afirmam fazer isso:
PyQRCode ( website aqui ) que supostamente pode decodificar códigos qr de imagens simplesmente fornecendo um caminho como este:
import sys, qrcode
d = qrcode.Decoder()
if d.decode('out.png'):
print 'result: ' + d.result
else:
print 'error: ' + d.error
Então, simplesmente instalei usando sudo pip install pyqrcode
. O que eu acho estranho sobre o código de exemplo acima, no entanto, é que ele apenas importa qrcode
(e não pyqrcode
embora). Como eu acho que qrcode
se refere a esta biblioteca que só pode gerar imagens de código QR, meio que me confundiu. Tentei o código acima com ambos pyqrcode
e qrcode
, mas ambos falham na segunda linha dizendo AttributeError: 'module' object has no attribute 'Decoder'
. Além disso, o site se refere ao Ubuntu 8.10 (que saiu há mais de 6 anos) e não consigo encontrar um repositório público (git ou outro) dele para verificar o commit mais recente. Então, mudei para a próxima biblioteca:
ZBar ( site aqui ) afirma ser "an open source software suite for reading bar codes from various sources, such as image files."
Então eu tentei instalá-lo no Mac OSX rodando sudo pip install zbar
. Isso falha com error: command 'cc' failed with exit status 1
. Tentei sugestões nas respostas a esta pergunta SO , mas não consigo resolver. Então, decidi seguir em frente:
QRTools , que de acordo com esta postagem do blog pode decodificar imagens facilmente usando o seguinte código:
from qrtools import QR
myCode = QR(filename=u"/home/psutton/Documents/Python/qrcodes/qrcode.png")
if myCode.decode():
print myCode.data
print myCode.data_type
print myCode.data_to_string()
Então tentei instalar usando sudo pip install qrtools
, que não consigo encontrar nada. Eu também tentei com python-qrtools
, qr-tools
, python-qrtools
e mais um par de combinações, mas, infelizmente sem sucesso. Suponho que se refira a este repo que diz que é baseado no ZBar (veja acima). Embora eu queira executar meu código no Heroku (e, portanto, prefira uma solução Python pura), instalei-o com sucesso em uma caixa Linux (com sudo apt-get install python-qrtools
) e tentei executá-lo:
from qrtools import QR
c = QR(filename='/home/kramer65/qrcode.jpg')
c.data # prints u'NULL'
c.data_type # prints u'text'
c.data_to_string() # prints '\xef\xbb\xbfNULL' where I expect an int (being `1234567890`)
Embora isso pareça decodificá-lo, não parece fazê-lo corretamente. Além disso, ele precisa do ZBar e, portanto, não é puro Python. Decidi então encontrar outra biblioteca.
PyXing ( website aqui ) é supostamente uma porta Python da popular biblioteca Java ZXing , mas o commit inicial e único tem 6 anos e o projeto não tem leia-me ou documentação de qualquer tipo.
Para o resto eu achei um par qr- en codificadores (não de codificadores) e alguns terminais de API que pode decodificar para você. Já que não gosto que este serviço dependa de outros endpoints da API, gostaria de manter a decodificação local.
Então, para concluir; Alguém saberia como posso decodificar códigos QR de imagens em Python (de preferência puro)? Todas as dicas são bem vindas!