TL; DR:Pythonを使用して(推奨される純粋な)画像ファイルからQRコードをデコードする方法が必要です。
Pythonを使用してデコードしたいQRコードを含むjpgファイルがあります。私はこれを行うと主張するいくつかのライブラリを見つけました:
PyQRCode( ここのウェブサイト )これはおそらく、次のようなパスを提供するだけで画像からqrコードをデコードできます:
import sys, qrcode
d = qrcode.Decoder()
if d.decode('out.png'):
print 'result: ' + d.result
else:
print 'error: ' + d.error
そこで、Sudo pip install pyqrcode
を使用してインストールしました。ただし、上記のサンプルコードでおかしいのは、qrcode
だけをインポートすることです(ただし、pyqrcode
はインポートしません)。qrcode
は このライブラリ =generateqr-codeイメージのみができます。そこで、上記のコードをpyqrcode
とqrcode
の両方で試しましたが、2行目でAttributeError: 'module' object has no attribute 'Decoder'
と言って両方とも失敗します。さらに、 ウェブサイト は、Ubuntu 8.10(6年以上前に公開されたもの)を指し、最新のコミットを確認するためのパブリック(gitまたはその他)リポジトリが見つかりません。それで私は次の図書館に移りました。
ZBar( ウェブサイトはこちら )"an open source software suite for reading bar codes from various sources, such as image files."
と主張しているので、Sudo pip install zbar
を実行しているMac OSXにインストールしてみました。これはerror: command 'cc' failed with exit status 1
で失敗します。 this SO question への回答で提案を試みましたが、解決できないようです。だから私は再び先に進むことにしました:
QRTools。これは this blogpost に従って、次のコードを使用して画像を簡単にデコードできます。
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()
そこで、Sudo pip install qrtools
を使用してインストールしようとしましたが、何も見つかりません。また、python-qrtools
、qr-tools
、python-qrtools
、さらにいくつかの組み合わせを試しましたが、残念ながら役に立ちませんでした。私はそれが this repo を参照していると思う、それはZBarに基づいていると言っている(上記参照)。 Herokuでコードを実行したい(したがって、純粋なPythonソリューションを好む)が、Linuxボックスに(Sudo apt-get install python-qrtools
を使用して)正常にインストールし、実行してみました。
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`)
これはデコードされているように見えますが、正しく実行されていないようです。さらにZBarが必要なため、純粋なPythonではありません。そこで、私はさらに別のライブラリを見つけることにしました。
PyXing( ここのWebサイト )は、おそらくPythonのJavaポートです_ ZXingライブラリ 。ただし、最初の唯一のコミットは6年前であり、プロジェクトにはreadmeやドキュメントが一切ありません。
残りについては、いくつかのqr-enコーダー(deではありませんコーダー)とあなたのためにデコードできるいくつかのAPIエンドポイント。私はこのサービスが他のAPIエンドポイントに依存することを好まないため、デコードをローカルに保ちたいと思います。
結論として(好ましい純粋な)Pythonで画像からQRコードをデコードする方法を知っている人はいますか?すべてのヒントを歓迎します!
qrtools
を使用して、次の手順とコードを試すことができます。
qrcode
ファイルを作成します(まだ存在しない場合)
pyqrcode
を使用しました。これはpip install pyqrcode
を使用してインストールできますそして、コードを使用します:
>>> import pyqrcode
>>> qr = pyqrcode.create("HORN O.K. PLEASE.")
>>> qr.png("horn.png", scale=6)
qrcode
を使用して、既存のqrtools
ファイルをデコードします
Sudo apt-get install python-qrtools
を使用してqrtools
をインストールしますpythonプロンプト内で次のコードを使用します
>>> import qrtools
>>> qr = qrtools.QR()
>>> qr.decode("horn.png")
>>> print qr.data
u'HORN O.K. PLEASE.'
これが、1回の実行での完全なコードです。
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.
注意事項
PyPNG
を使用するには、pip install pypng
を使用してpyqrcode
をインストールする必要がある場合がありますPIL
がインストールされている場合は、IOError: decoder Zip not available
を取得できます。その場合、 PIL
のアンインストールと再インストールを試してください
pip uninstall PIL
pip install PIL
それでもうまくいかない場合は、代わりにPillow
を使用してみてください
pip uninstall PIL
pip install pillow
次のコードは私とうまく機能します:
brew install zbar
pip install pyqrcode
pip install pyzbar
QRコード画像作成の場合:
import pyqrcode
qr = pyqrcode.create("test1")
qr.png("test1.png", scale=6)
QRコードのデコードの場合:
from PIL import Image
from pyzbar.pyzbar import decode
data = decode(Image.open('test1.png'))
print(data)
結果を出力します:
[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)])]
私はそれをWindows + Python 2.7 64ビットで動作させるのに30分近く費やしたので、受け入れられた答えへの追加のメモがあります:
pip install zbar-0.10-cp27-none-win_AMD64.whl
でインストールします
PythonがImportError: DLL load failed: The specified module could not be found.
を実行するときにimport zbar
を報告する場合、justをインストールする必要があります- VS 2013のVisual C++再頒布可能パッケージ (ここで多くの時間を費やし、再コンパイルに失敗しました...)
必須:libzbar64-0.dllはPATHにあるフォルダーになければなりません。私の場合、「C:\ Python27\libzbar64-0.dll」(パスにあります)にコピーしました
それから
pip install pyqrcode
pip install qrtools
pip install Pillow
そして、メインの答えからのコードが機能するはずです:
import pyqrcode
qr = pyqrcode.create("HORN O.K. PLEASE.")
qr.png("horn.png", scale=6)
import qrtools
qr = qrtools.QR()
qr.decode("horn.png")
print qr.data