pyzbarでQR読み取り
pyzbarはQRコードを読み取るPythonのライブラリです.
画像に含まれる全てのQRコードについて,URLとQRコードが置かれている座標を調べることができます.
目次
pyzbarのおかげで,QRコードのリンク先をチェックするという問題は次の2つに分解されます.
- QRコードの印刷された紙・インクからスマートフォンのカメラへの物理的なレイヤーの問題
- URLのチェック
したがって,前者が担保されているなら,QRコードのリンク先チェックはURLのチェックというタスクに帰着します.
QRコードは黒1色で印刷するところ,多色重なって黒に見えていたケースや,解像度の問題でスキャンできないケースがあります.
物理的なレイヤーのチェックも別途必要です.
インストール
次の環境での記録です.
- macOS 11系
- Python 3.9.4
- pyzbar 0.1.8
- Pillow 8.2.0
- pandas 1.2.4
インストールのため,
pip3 install pyzbar |
とします.
macOSではpyzbarをインストールする際,公式ページに従ってbrew install zbar
もしました.
読み取り
QRコードを取得するためのpyzbarの他,画像を扱うPILとデータフレームを扱うpandasもインポートします.
from pyzbar.pyzbar import decode |
このとき,
d = DataFrame(decode(Image.open('QRコードを1つ以上含む画像ファイル名'))) |
というコードにより,pyzbarは画像タイプがQRコードのものを絞り込み,d
にはQRコード等の情報が格納されます.
格納された情報はdata[i]
とpolygon[i]
です.
QRコードの数だけ保持されます.
取得した最初のQRコードのURLは,
d.data[0].decode('utf-8') |
で取得できます.
座標は
d.polygon[0] |
で取得できます.
ブラウザでのアクセス履歴を取得する
QRコードの示すURLを取得しても,リンク先の目視チェックで抜けを出してはいけません.
Seleniumのようなツールで全リンクのスクリーンショットを撮影しておくか,あるいは,実際のアクセスデータと突き合わせてチェック漏れを防止するとよいでしょう.
ブラウザでのアクセス履歴が欲しい場合は,macOS 11のSafariの場合だと,~/Library/Safari/History.db
にデータがあります.
SQLite3からデータベースを開くことにより,訪問時刻やURL等のアクセス履歴を抽出できます.
書き出し
このページの目的ではありませんが,テストで使うためにQRコードの書き出しを行うライブラリを以下に記します.
qrcode
pip3 install qrcode
しておき,bash上で
qr "テキスト" > 画像名.png |
とします.
pyqrcode
pip3 install pyqrcode
しておき,
import pyqrcode |
とします.
おまけ:通常のバーコード生成
pip install python-barcode |
しておいて,
import barcode |