TL; DR : Ho bisogno di un modo per decodificare un codice QR da un file immagine usando Python (preferibilmente puro).
Ho un file jpg con un codice QR che voglio decodificare usando Python. Ho trovato un paio di librerie che affermano di farlo:
PyQRCode ( sito web qui ) che presumibilmente può decodificare i codici qr dalle immagini semplicemente fornendo un percorso come questo:
import sys, qrcode
d = qrcode.Decoder()
if d.decode('out.png'):
print 'result: ' + d.result
else:
print 'error: ' + d.error
Quindi l'ho semplicemente installato usando sudo pip install pyqrcode
. La cosa che trovo strano del codice di esempio sopra, tuttavia, è che importa solo qrcode
(e non pyqrcode
però) Dal momento che penso si qrcode
riferisca a questa libreria che può generare solo immagini di codice qr, mi ha confuso. Quindi ho provato il codice sopra con entrambi pyqrcode
e qrcode
, ma entrambi falliscono alla seconda riga dicendo AttributeError: 'module' object has no attribute 'Decoder'
. Inoltre, il sito web fa riferimento a Ubuntu 8.10 (uscito più di 6 anni fa) e non riesco a trovare un repository pubblico (git o altro) per controllare l'ultimo commit. Quindi sono passato alla libreria successiva:
ZBar ( sito web qui ) afferma di essere "an open source software suite for reading bar codes from various sources, such as image files."
Quindi ho provato a installarlo su Mac OSX in esecuzione sudo pip install zbar
. Questo fallisce con error: command 'cc' failed with exit status 1
. Ho provato a suggerimenti nelle risposte a questa domanda SO , ma non riesco a risolverlo. Quindi ho deciso di andare avanti di nuovo:
QRTools , che secondo questo post del blog può decodificare facilmente le immagini utilizzando il seguente codice:
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()
Quindi ho provato a installarlo usando sudo pip install qrtools
, che non riesce a trovare nulla. Ho anche provato con python-qrtools
, qr-tools
, python-qrtools
e un altro paio di combinazioni, ma purtroppo senza alcun risultato. Suppongo che si riferisca a questo repo che dice che è basato su ZBar (vedi sopra). Anche se voglio eseguire il mio codice su Heroku (e quindi preferisco una soluzione Python pura) l'ho installato con successo su una macchina Linux (con sudo apt-get install python-qrtools
) e ho provato a eseguirlo:
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`)
Sebbene questo sembri decodificarlo, non sembra farlo correttamente. Inoltre necessita di ZBar e quindi non è puro Python. Così ho deciso di trovare un'altra libreria.
PyXing ( sito web qui ) è presumibilmente un port Python della popolare libreria Java ZXing , ma il commit iniziale e unico è di 6 anni e il progetto non ha alcun readme o documentazione di sorta.
Per il resto ho trovato un paio QR en codificatori (non de codificatori) e alcuni endpoint API in grado di decodificare per voi. Dal momento che non mi piace che questo servizio dipenda da altri endpoint API, vorrei mantenere la decodifica locale.
Quindi per concludere; qualcuno saprebbe come decodificare i codici QR da immagini in Python (preferibilmente puro)? Tutti i suggerimenti sono ben accetti!