TL; DR : Potrzebuję sposobu na zdekodowanie kodu QR z pliku obrazu przy użyciu (najlepiej czystego) Pythona.
Mam plik jpg z kodem QR, który chcę zdekodować za pomocą Pythona. Znalazłem kilka bibliotek, które twierdzą, że robią to:
PyQRCode ( strona tutaj ), który rzekomo może dekodować kody qr z obrazów, po prostu podając ścieżkę taką jak ta:
import sys, qrcode
d = qrcode.Decoder()
if d.decode('out.png'):
print 'result: ' + d.result
else:
print 'error: ' + d.error
Więc po prostu zainstalowałem go za pomocą sudo pip install pyqrcode
. To, co uważam za dziwne w powyższym kodzie przykładowym, polega na tym, że tylko importuje qrcode
(i pyqrcode
jednak nie ) Ponieważ myślę, że qrcode
odnosi się do tej biblioteki, która może generować tylko obrazy kodu QR, trochę mnie to zdezorientowało. Więc wypróbowałem powyższy kod z obydwoma pyqrcode
i qrcode
, ale oba zawodzą w drugim wierszu mówiąc AttributeError: 'module' object has no attribute 'Decoder'
. Ponadto strona odnosi się do Ubuntu 8.10 (który pojawił się ponad 6 lat temu) i nie mogę znaleźć jego publicznego (git lub innego) repozytorium, aby sprawdzić najnowsze zatwierdzenie. Więc przeszedłem do następnej biblioteki:
ZBar ( strona tutaj ) twierdzi, że jest, "an open source software suite for reading bar codes from various sources, such as image files."
więc próbowałem zainstalować go na Mac OSX sudo pip install zbar
. To się nie powiedzie z error: command 'cc' failed with exit status 1
. Próbowałem sugestii w odpowiedziach na to pytanie SO , ale nie mogę go rozwiązać. Postanowiłem więc przejść dalej:
QRTools , które według tego wpisu na blogu mogą łatwo dekodować obrazy za pomocą następującego kodu:
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()
Więc próbowałem go zainstalować za pomocą sudo pip install qrtools
, który nie może nic znaleźć. Próbowałem też to python-qrtools
, qr-tools
, python-qrtools
i jeszcze kilka kombinacji, ale niestety bezskutecznie. Przypuszczam, że odnosi się do tego repozytorium, które mówi, że jest oparte na ZBar (patrz wyżej). Chociaż chcę uruchomić swój kod na Heroku (i dlatego wolę czyste rozwiązanie Pythona), pomyślnie zainstalowałem go na Linuksie (z sudo apt-get install python-qrtools
) i próbowałem go uruchomić:
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`)
Chociaż wydaje się, że to dekoduje, nie wydaje się, aby robił to poprawnie. Ponadto potrzebuje ZBar i dlatego nie jest czystym Pythonem. Postanowiłem więc znaleźć kolejną bibliotekę.
PyXing ( strona tutaj ) jest podobno portem Pythona popularnej biblioteki Java ZXing , ale początkowe i jedyne zatwierdzenie ma 6 lat, a projekt nie ma żadnego pliku readme ani dokumentacji.
Co do reszty, znalazłem kilka koderów qr- en (nie de- koderów) i kilka punktów końcowych API, które mogą dla ciebie dekodować. Ponieważ nie podoba mi się, że ta usługa jest zależna od innych punktów końcowych API, chciałbym jednak zachować lokalne dekodowanie.
Podsumowując; czy ktoś wie, jak mogę dekodować kody QR z obrazów w (najlepiej czystym) Pythonie? Wszystkie wskazówki są mile widziane!