raspberry leer lectura lector generar detectar codigo code python decode qr-code zxing zbar

leer - ¿Cómo decodificar una imagen de código QR en Python(preferiblemente puro)?



python qr code reader (3)

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. He encontrado un par de bibliotecas que dicen hacer esto:

PyQRCode ( sitio web aquí ) que supuestamente puede decodificar códigos qr 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 me parece extraño sobre el código de ejemplo anterior es que solo importa qrcode (y no pyqrcode ). Dado que creo que qrcode refiere a esta biblioteca que solo puede generar imágenes de código qr, me confundió. Así que probé el código anterior con pyqrcode y qrcode , pero ambos fallan en la segunda línea que dice 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 ejecutando sudo pip install zbar . Esto falla con el error: command ''cc'' failed with exit status 1 . Intenté hacer sugerencias en las respuestas a esta pregunta SO , pero parece que no puedo resolverlo. Así que decidí seguir adelante nuevamente:

QRTools , que de acuerdo con este 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 puede encontrar nada. También lo probé con python-qrtools , qr-tools , python-qrtools y un par de combinaciones más, pero desafortunadamente fue en vano. 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í encontrar otra biblioteca más.

Se supone que PyXing ( sitio web aquí ) es un puerto de Python de la popular biblioteca Java ZXing , pero la confirmación inicial y única tiene 6 años y el proyecto no tiene léame ni documentación alguna.

Por lo demás, encontré un par de codificadores qr- en (no de codificadores) y algunos puntos finales de API que pueden decodificar para usted. Sin embargo, dado que no me gusta que este servicio dependa de otros puntos finales API, me gustaría mantener la decodificación local.

Para concluir; ¿Alguien sabría cómo puedo decodificar códigos QR de imágenes en Python (preferible puro)? ¡Todos los consejos son bienvenidos!


El siguiente código funciona bien conmigo:

brew install zbar pip install pyqrcode pip install pyzbar

Para la creación de imágenes de código QR:

import pyqrcode qr = pyqrcode.create("test1") qr.png("test1.png", scale=6)

Para la decodificación de código QR:

from PIL import Image from pyzbar.pyzbar import decode data = decode(Image.open(''test1.png'')) print(data)

que imprime el resultado:

[Decoded(data=b''test1'', type=''QRCODE'', rect=Rect(left=24, top=24, width=126, height=126), polygon=[Point(x=24, y=24), Point(x=24, y=150), Point(x=150, y=150), Point(x=150, y=24)])]


Pasé casi media hora para que funcione en Windows + Python 2.7 de 64 bits, así que aquí hay notas adicionales a la respuesta aceptada:

y el código de la respuesta principal debería funcionar:

import pyqrcode qr = pyqrcode.create("HORN O.K. PLEASE.") qr.png("horn.png", scale=6) import qrtools qr = qrtools.QR() qr.decode("horn.png") print qr.data


Puede probar los siguientes pasos y códigos usando qrtools :

  • Cree un archivo qrcode , si aún no existe

    • pyqrcode para hacer esto, que se puede instalar usando pip install pyqrcode
    • Y luego usa el código:

      >>> import pyqrcode >>> qr = pyqrcode.create("HORN O.K. PLEASE.") >>> qr.png("horn.png", scale=6)

  • Decodifica un archivo qrcode existente usando qrtools

    • Instale qrtools usando sudo apt-get install python-qrtools
    • Ahora use el siguiente código dentro de su indicador de Python

      >>> import qrtools >>> qr = qrtools.QR() >>> qr.decode("horn.png") >>> print qr.data u''HORN O.K. PLEASE.''

Aquí está el código completo en una sola ejecución:

In [2]: import pyqrcode In [3]: qr = pyqrcode.create("HORN O.K. PLEASE.") In [4]: qr.png("horn.png", scale=6) In [5]: import qrtools In [6]: qr = qrtools.QR() In [7]: qr.decode("horn.png") Out[7]: True In [8]: print qr.data HORN O.K. PLEASE.

Advertencias

  • Es posible que necesite instalar PyPNG usando pip install pypng para usar pyqrcode
  • En caso de que tenga instalado PIL , es posible que obtenga IOError: decoder zip not available . En ese caso, intente desinstalar y reinstalar PIL usando:

    pip uninstall PIL pip install PIL

  • Si eso no funciona, intente usar Pillow lugar

    pip uninstall PIL pip install pillow