How to decode a QR-code image in (preferably pure) Python?
You can try the following steps and code using qrtools
:
Create a
qrcode
file, if not already existing- I used
pyqrcode
for doing this, which can be installed usingpip install pyqrcode
And then use the code:
>>> import pyqrcode>>> qr = pyqrcode.create("HORN O.K. PLEASE.")>>> qr.png("horn.png", scale=6)
- I used
Decode an existing
qrcode
file usingqrtools
- Install
qrtools
usingsudo apt-get install python-qrtools
Now use the following code within your python prompt
>>> import qrtools>>> qr = qrtools.QR()>>> qr.decode("horn.png")>>> print qr.datau'HORN O.K. PLEASE.'
- Install
Here is the complete code in a single run:
In [2]: import pyqrcodeIn [3]: qr = pyqrcode.create("HORN O.K. PLEASE.")In [4]: qr.png("horn.png", scale=6)In [5]: import qrtoolsIn [6]: qr = qrtools.QR()In [7]: qr.decode("horn.png")Out[7]: TrueIn [8]: print qr.dataHORN O.K. PLEASE.
Caveats
- You might need to install
PyPNG
usingpip install pypng
for usingpyqrcode
In case you have
PIL
installed, you might getIOError: decoder zip not available
. In that case, try uninstalling and reinstallingPIL
using:pip uninstall PILpip install PIL
If that doesn't work, try using
Pillow
insteadpip uninstall PILpip install pillow
The following code works fine with me:
brew install zbarpip install pyqrcodepip install pyzbar
For QR code image creation:
import pyqrcodeqr = pyqrcode.create("test1")qr.png("test1.png", scale=6)
For QR code decoding:
from PIL import Imagefrom pyzbar.pyzbar import decodedata = decode(Image.open('test1.png'))print(data)
that prints the result:
[Decoded(data=b'test1', type='QRCODE', rect=Rect(left=24, top=24, width=126, height=126), polygon=[Point(x=24, y=24), Point(x=24, y=150), Point(x=150, y=150), Point(x=150, y=24)])]
I'm answering only the part of the question about zbar
installation.
I spent nearly half an hour a few hours to make it work on Windows + Python 2.7 64-bit, so here are additional notes to the accepted answer:
Install it with
pip install zbar-0.10-cp27-none-win_amd64.whl
If Python reports an
ImportError: DLL load failed: The specified module could not be found.
when doingimport zbar
, then you will just need to install the Visual C++ Redistributable Packages for VS 2013 (I spent a lot of time here, trying to recompile unsuccessfully...)Required too: libzbar64-0.dll must be in a folder which is in the PATH. In my case I copied it to "C:\Python27\libzbar64-0.dll" (which is in the PATH). If it still does not work, add this:
import osos.environ['PATH'] += ';C:\\Python27' import zbar
PS: Making it work with Python 3.x is even more difficult: Compile zbar for Python 3.x.
PS2: I just tested pyzbar with pip install pyzbar
and it's MUCH easier, it works out-of-the-box (the only thing is you need to have VC Redist 2013 files installed). It is also recommended to use this library in this pyimagesearch.com article.