TL; DR : Necesito una forma de decodificar un código QR de un archivo de imagen usando Python (preferiblemente puro).
Tengo un archivo jpg con un código QR que quiero decodificar usando Python. Encontré un par de bibliotecas que afirman hacer esto:
PyQRCode ( sitio web aquí ) que supuestamente puede decodificar códigos qr a partir de imágenes simplemente proporcionando una ruta como esta:
import sys, qrcode
d = qrcode.Decoder()
if d.decode('out.png'):
print 'result: ' + d.result
else:
print 'error: ' + d.error
Así que simplemente lo instalé usando sudo pip install pyqrcode
. Sin embargo, lo que encuentro extraño sobre el código de ejemplo anterior es que solo importa qrcode
(y no pyqrcode
aunque). Como creo que se qrcode
refiere a esta biblioteca que solo puede generar imágenes de código qr, me confundió un poco. Así que probé el código anterior con ambos pyqrcode
y qrcode
, pero ambos fallaron en la segunda línea diciendo AttributeError: 'module' object has no attribute 'Decoder'
. Además, el sitio web se refiere a Ubuntu 8.10 (que salió hace más de 6 años) y no puedo encontrar un repositorio público (git u otro) para verificar la última confirmación. Así que pasé a la siguiente biblioteca:
ZBar ( sitio web aquí ) afirma ser "an open source software suite for reading bar codes from various sources, such as image files."
así que intenté instalarlo en Mac OSX en ejecución sudo pip install zbar
. Esto falla con error: command 'cc' failed with exit status 1
. Intenté sugerencias en las respuestas a esta pregunta SO , pero parece que no puedo resolverlo. Así que decidí seguir adelante de nuevo:
QRTools , que según esta publicación de blog puede decodificar imágenes fácilmente usando el siguiente 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()
Así que intenté instalarlo usando sudo pip install qrtools
, que no puedo encontrar nada. También he probado con python-qrtools
, qr-tools
, python-qrtools
y un par más combinaciones, pero lamentablemente sin éxito. Supongo que se refiere a este repositorio que dice que está basado en ZBar (ver arriba). Aunque quiero ejecutar mi código en Heroku (y por lo tanto prefiero una solución pura de Python), lo instalé con éxito en una caja de Linux (con sudo apt-get install python-qrtools
) e intenté ejecutarlo:
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`)
Aunque esto parece decodificarlo, no parece hacerlo correctamente. Además, necesita ZBar y, por lo tanto, no es Python puro. Así que decidí buscar otra biblioteca.
PyXing ( sitio web aquí ) es supuestamente un puerto Python de la popular biblioteca Java ZXing , pero la confirmación inicial y única tiene 6 años y el proyecto no tiene ningún archivo Léame o documentación.
Para el resto He encontrado un par qr- ES codificadores (no de codificadores) y algunos puntos finales de API que puede decodificar para usted. Como no me gusta que este servicio dependa de otros puntos finales de API, me gustaría mantener la decodificación local.
Así que para concluir; ¿Alguien sabría cómo puedo decodificar códigos QR a partir de imágenes en Python (preferiblemente puro)? ¡Todos los consejos son bienvenidos!