TL; DR: Ho bisogno di un modo per decodificare un codice QR da un file immagine usando (preferibilmente puro) Python.Come decodificare un'immagine QR-code in Python (preferibilmente puro)?
Ho un file jpg con un codice QR che voglio decodificare usando Python. Ho trovato un paio di librerie che pretendono di fare questo:
PyQRCode (website here) che presumibilmente in grado di decodificare i codici QR a partire da immagini, fornendo semplicemente un percorso come questo:
import sys, qrcode
d = qrcode.Decoder()
if d.decode('out.png'):
print 'result: ' + d.result
else:
print 'error: ' + d.error
Così ho installato semplicemente usando sudo pip install pyqrcode
. La cosa che trovo strano nel codice di esempio sopra tuttavia, è che importa solo (e non) Dal momento che penso che si riferisca a this library che può solo generare qr-code images mi ha confuso. Così 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, the website si riferisce a Ubuntu 8.10 (che è uscito più di 6 anni fa) e non riesco a trovare un repository pubblico (git o altro) per controllare l'ultimo commit. Così mi sono trasferito al prossimo libreria:
ZBar (website here) sostiene di essere "an open source software suite for reading bar codes from various sources, such as image files."
così ho provato l'installazione su Mac OSX in esecuzione sudo pip install zbar
. Questo fallisce con error: command 'cc' failed with exit status 1
. Ho provato a suggerire le risposte a this SO question, ma non riesco a risolverlo. Così ho deciso di andare avanti ancora:
QRTools, che secondo this blogpost in grado di decodificare le immagini facilmente 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()
Così ho provato a installare utilizzando sudo pip install qrtools
, che non riesce a trovare nulla. Ho anche provato con python-qrtools
, qr-tools
, python-qrtools
e un paio di altre combinazioni, ma purtroppo inutilmente. Suppongo che si riferisce a this repo che dice che è basato su ZBar (vedi sopra). Anche se ho voglia di correre il mio codice su Heroku (e quindi preferire una soluzione di Python puro) Ho installato con successo su una macchina Linux (con sudo apt-get install python-qrtools
) e ha cercato di 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`)
Anche se questo sembra decodificarlo, E non sembra farlo correttamente. Ha inoltre bisogno di ZBar e quindi non è puro Python. Così ho deciso di trovare un'altra libreria.
PyXing (website here) è presumibilmente un porto Python del popolare Java ZXing library, ma l'iniziale e solo commettere è di 6 anni e il progetto non ha Leggimi o la documentazione di sorta.
Per il resto ho trovato un paio QR en codificatori (non de codificatori) e alcuni endpoint di API in grado di decodificare per voi. Dato che non mi piace che questo servizio dipenda da altri endpoint API, vorrei comunque mantenere la decodifica locale.
Quindi per concludere; qualcuno saprebbe come posso decodificare i codici QR dalle immagini in (preferibile puro) Python? Tutti i suggerimenti sono ben accetti!
che dovrebbe essere: 'se myCode.decode ("/ home/kramer65 /qrcode.jpg ")" e non "QR (filename = '/ home/kramer65/qrcode.jpg') ' –
Ritengo che valga la pena citare una domanda di follow-up posta da ** @ kramer65 ** sull'installazione' zbar' con 'pip': http://stackoverflow.com/questions/27406641/how-to-install-python-bindings-originating-from-an-a pt-package – Nez