TL; DR : Tôi cần một cách để giải mã mã QR từ tệp hình ảnh bằng Python (tốt hơn là nguyên chất).
Tôi có một tệp jpg có mã QR mà tôi muốn giải mã bằng Python. Tôi đã tìm thấy một vài thư viện yêu cầu thực hiện điều này:
PyQRCode ( trang web tại đây ) được cho là có thể giải mã mã qr từ hình ảnh bằng cách chỉ cần cung cấp một đường dẫn như sau:
import sys, qrcode
d = qrcode.Decoder()
if d.decode('out.png'):
print 'result: ' + d.result
else:
print 'error: ' + d.error
Vì vậy, tôi chỉ cần cài đặt nó bằng cách sử dụng sudo pip install pyqrcode
. Tuy nhiên, điều tôi thấy lạ về đoạn mã ví dụ trên là nó chỉ nhập khẩu qrcode
(chứ không phải pyqrcode
mặc dù vậy) Vì tôi nghĩ qrcode
đề cập đến thư viện này chỉ có thể tạo ra các hình ảnh mã qr, điều đó khiến tôi bối rối. Vì vậy, tôi đã thử mã ở trên với cả hai pyqrcode
và qrcode
, nhưng cả hai đều không thành công ở dòng thứ hai AttributeError: 'module' object has no attribute 'Decoder'
. Hơn nữa, trang web đề cập đến Ubuntu 8.10 (ra mắt cách đây hơn 6 năm) và tôi không thể tìm thấy kho lưu trữ công khai (git hoặc khác) của nó để kiểm tra bản cam kết mới nhất. Vì vậy, tôi chuyển sang thư viện tiếp theo:
ZBar ( trang web ở đây ) tuyên bố là "an open source software suite for reading bar codes from various sources, such as image files."
Vì vậy, tôi đã thử cài đặt nó trên Mac OSX đang chạy sudo pip install zbar
. Điều này không thành công với error: command 'cc' failed with exit status 1
. Tôi đã cố gắng đưa ra các gợi ý trong câu trả lời cho câu hỏi SO này , nhưng dường như tôi không thể giải được. Vì vậy, tôi quyết định tiếp tục một lần nữa:
QRTools , theo bài đăng trên blog này có thể giải mã hình ảnh dễ dàng bằng cách sử dụng mã sau:
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()
Vì vậy, tôi đã thử cài đặt nó bằng cách sử dụng sudo pip install qrtools
, mà không thể tìm thấy bất cứ điều gì. Tôi cũng đã thử nó với python-qrtools
, qr-tools
, python-qrtools
và nhiều hơn nữa một vài kết hợp, nhưng tiếc là không có kết quả. Tôi cho rằng nó đề cập đến repo này nói rằng nó dựa trên ZBar (xem ở trên). Mặc dù tôi muốn chạy mã của mình trên Heroku (và do đó thích giải pháp Python thuần túy hơn), tôi đã cài đặt thành công nó trên hộp Linux (có sudo apt-get install python-qrtools
) và thử chạy nó:
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`)
Mặc dù điều này có vẻ như để giải mã nó, Nó dường như không làm điều đó một cách chính xác. Hơn nữa, nó cần ZBar và do đó không phải là Python thuần túy. Vì vậy, tôi quyết định tìm thêm một thư viện.
PyXing ( trang web ở đây ) được cho là một cổng Python của thư viện Java ZXing phổ biến , nhưng bản cam kết ban đầu và duy nhất đã được 6 năm và dự án không có readme hoặc tài liệu nào.
Đối với phần còn lại, tôi đã tìm thấy một vài mã qr- en (không phải de coder) và một số điểm cuối API có thể giải mã cho bạn. Vì tôi không thích dịch vụ này phụ thuộc vào các điểm cuối API khác nên tôi muốn giữ bản giải mã cục bộ.
Vì vậy, để kết luận; có ai biết cách tôi có thể giải mã mã QR từ hình ảnh trong Python (tốt hơn là thuần túy) không? Tất cả các mẹo đều được chào đón!