TL; DR : Ich brauche eine Möglichkeit, einen QR-Code aus einer Bilddatei mit (vorzugsweise reinem) Python zu dekodieren.
Ich habe eine JPG-Datei mit einem QR-Code, den ich mit Python dekodieren möchte. Ich habe ein paar Bibliotheken gefunden, die behaupten, dies zu tun:
PyQRCode ( Website hier ), der angeblich qr-Codes aus Bildern dekodieren kann, indem einfach ein Pfad wie der folgende angegeben wird:
import sys, qrcode
d = qrcode.Decoder()
if d.decode('out.png'):
print 'result: ' + d.result
else:
print 'error: ' + d.error
Also habe ich es einfach mit installiert sudo pip install pyqrcode
. Das Seltsame an dem obigen Beispielcode ist jedoch, dass er nur importiert qrcode
(und nicht pyqrcode
). Da ich denke, dass er qrcode
sich auf diese Bibliothek bezieht, die nur QR-Code-Bilder erzeugen kann, hat mich das irgendwie verwirrt. Also habe ich den obigen Code mit beiden pyqrcode
und ausprobiert qrcode
, aber beide scheitern in der zweiten Zeile AttributeError: 'module' object has no attribute 'Decoder'
. Darüber hinaus verweist die Website auf Ubuntu 8.10 (das vor mehr als 6 Jahren veröffentlicht wurde) und ich kann kein öffentliches (git oder anderes) Repository finden, um das neueste Commit zu überprüfen. Also ging ich weiter zur nächsten Bibliothek:
ZBar ( Website hier ) behauptet zu sein "an open source software suite for reading bar codes from various sources, such as image files."
Also habe ich versucht, es unter Mac OSX zu installieren sudo pip install zbar
. Dies schlägt fehl mit error: command 'cc' failed with exit status 1
. Ich habe versucht, Vorschläge in den Antworten auf diese SO-Frage zu machen , aber ich kann sie scheinbar nicht lösen. Also beschloss ich, weiterzumachen:
QRTools , die laut diesem Blogpost Bilder mit dem folgenden Code einfach dekodieren können:
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()
Also habe ich versucht, es mit zu installieren sudo pip install qrtools
, was nichts finden kann. Ich versuchte es auch mit python-qrtools
, qr-tools
, python-qrtools
und ein paar mehr Kombinationen, aber leider ohne Erfolg. Ich nehme an, es bezieht sich auf dieses Repo, das besagt, dass es auf ZBar basiert (siehe oben). Obwohl ich meinen Code auf Heroku ausführen möchte (und daher eine reine Python-Lösung bevorzuge), habe ich ihn erfolgreich auf einer Linux-Box (mit sudo apt-get install python-qrtools
) installiert und versucht, ihn auszuführen :
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`)
Obwohl dies zu entschlüsseln scheint, scheint es es nicht richtig zu machen. Es braucht außerdem ZBar und ist somit kein reines Python. Also beschloss ich, noch eine Bibliothek zu finden.
PyXing ( Website hier ) ist angeblich ein Python-Port der beliebten Java ZXing-Bibliothek , aber das anfängliche und einzige Commit ist 6 Jahre alt und das Projekt hat keinerlei Readme oder Dokumentation.
Für den Rest fand ich ein paar QR- en - Codierer (nicht de Coder) und einige API - Endpunkte , die für Sie dekodieren kann. Da ich nicht möchte, dass dieser Dienst von anderen API-Endpunkten abhängig ist, möchte ich die Dekodierung jedoch lokal halten.
Also zum Schluss; Würde jemand wissen, wie ich QR-Codes aus Bildern in (vorzugsweise reinem) Python dekodieren kann? Alle Tipps sind willkommen!