How to decode a QR-code image in (preferably pure) Python?
Solution 1:
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.data u'HORN O.K. PLEASE.'
- Install
Here is the complete code in a single run:
In [2]: import pyqrcode
In [3]: qr = pyqrcode.create("HORN O.K. PLEASE.")
In [4]: qr.png("horn.png", scale=6)
In [5]: import qrtools
In [6]: qr = qrtools.QR()
In [7]: qr.decode("horn.png")
Out[7]: True
In [8]: print qr.data
HORN 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 PIL pip install PIL
-
If that doesn't work, try using
Pillow
insteadpip uninstall PIL pip install pillow
Solution 2:
The following code works fine with me:
brew install zbar
pip install pyqrcode
pip install pyzbar
For QR code image creation:
import pyqrcode
qr = pyqrcode.create("test1")
qr.png("test1.png", scale=6)
For QR code decoding:
from PIL import Image
from pyzbar.pyzbar import decode
data = 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)])]
Solution 3:
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:
Download https://github.com/NaturalHistoryMuseum/ZBarWin64/releases/download/v0.10/zbar-0.10-cp27-none-win_amd64.whl
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 os os.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.