情報伝達のツールとして、QRコードは今日の社会で重要な役割を果たしてきました。ログインしている携帯電話ユーザーからモバイル決済まで、QRコードは生活の隅々に見られます。 QRコードがどのように解析されるか知っていますか?コードスキャンツールを自分で実装することを考えたことはありますか?よろしければ見続けてください!
まず、スキャンツールを実現するためにどのような操作を作成する必要があるかを考えてみましょう。コードをスキャンする過程で、カメラを開く必要があります。携帯電話またはコンピューターからQRコードを認識する方法です。したがって、2つの重要なステップを実装する必要があります。カメラを呼び出してQRコードを識別します。
これらの2つの操作は、それぞれ2つのモジュールに対応します。opencvとpyzbarです。opencvはIntelのコンピュータービジョン処理モジュールであり、pyzbarはQRコードの解析に使用されるモジュールです。
環境には、python環境とモジュールが含まれます。私の環境は次のとおりです。
システム:Windows 10
python:python 3.7.9
opencv:opencv-python-4.4.0.44
pyzbar:pyzbar-0.1.8
モジュールのインストールは非常に簡単です。pipを使用して直接インストールし、最初にopencvモジュールをインストールします。
pip install opencv-python
次に、pyzbarモジュール:
pip install pyzbar
インストールバージョンが指定されていない場合、システムは自動的に最新バージョンをインストールします。モジュールをインストールした後、コードスキャンツールを実装できます。
pyzbarモジュールを使用すると、QRコードを識別する作業は非常に簡単です。まず、QRコードを準備する必要があります。 QRコードを取得したら、解析を開始できます。具体的な手順は次のとおりです。
実装コードは次のとおりです。
import cv2
from pyzbar import pyzbar
# 1、 QRコード画像を読む
qrcode = cv2.imread('qrcode.jpg')
# 2、 QRコードのデータを分析する
data = pyzbar.decode(qrcode)print(data)
# 3、 データ内のQRコードのデータ情報を分析する
text = data[0].data.decode('utf-8')print(text)
上記を2回解析し、初めてデータを取得しました。データがどのように表示されるかを見てみましょう。
[ Decoded(data=b'http://weixin.qq.com/r/vC_fhynEKnRVrW3k93qu', type='QRCODE', rect=Rect(left=140, top=113, width=390, height=390), polygon=[Point(x=140, y=113),Point(x=140, y=503),Point(x=530, y=503),Point(x=530, y=113)])]
これがリストであり、リストの最初のデータにURL情報が含まれていることがわかります。したがって、次のコードを再度解析する必要があります。
text = data[0].data.decode('utf-8')
これで、QRコードに含まれる情報を取得できます。その後の使用を容易にするために、上記のコードを関数として記述できます。
def scan_qrcode(img_path):
qrcode = cv2.imread(img_path)
data = pyzbar.decode(qrcode)return data[0].data.decode('utf-8')
次に、カメラの呼び出し方法を見ていきます。
ビデオを読み取るためのVideoCaptureクラスがopencvで提供されており、カメラの呼び出しにも使用できます。カメラを呼び出す手順は次のとおりです。
具体的なコードは次のとおりです。
import cv2
# カメラを呼び出す
cap = cv2.VideoCapture(0)while True:
# フレームを読む
ret, frame = cap.read()
# 現在のフレームを表示
cv2.imshow('scan qrcode', frame)
# キーボード入力を待っています
key = cv2.waitKey(10)
# qキーを押したらカメラの電源を切ります
if key ==ord('q'):break
# すべてのウィンドウを破棄します
cv2.destroyAllWindows()
上記のコードを自分で実行してみることができます。その効果は、フロントカメラの電源を入れるようなものです。
カメラが呼び出されたので、コードの2つの部分を組み合わせることができます。
コードスキャンツールの主要部分は、カメラを呼び出す操作です。読み取った各フレームを解析し、結果が解析されたら出力して終了する必要があります。具体的なコードは次のとおりです。
import cv2
from pyzbar import pyzbar
def scan_qrcode(qrcode):
data = pyzbar.decode(qrcode)return data[0].data.decode('utf-8')
cap = cv2.VideoCapture(0)while True:
ret, frame = cap.read()
cv2.imshow('scan qrcode', frame)
# QRコードを分析する
text = None
try:
text =scan_qrcode(frame)
except Exception as e:
pass
if text:print(text)break
key = cv2.waitKey(10)if key ==ord('q'):break
cv2.destroyAllWindows()
上記のscan_qrcode関数を、着信画像の元のパスから直接着信画像オブジェクトに変更しました。 VideoCaptureオブジェクトを介して取得された画像フレームとcv2.imreadを介して取得された画像は同じデータタイプであるためです。
上記の重要なステップは、QRコードの動作を分析することです。解析プロセス中にQRコードがない場合は例外が発生するため、最初にテキストを定義します。そのため、try-exceptステートメントを使用してテキストを処理します。実際にデータを解析した場合にのみ、プログラムが結果を出力してプログラムを終了するかどうかによって、テキストの内容を判断する方法。
この時点で、スキャンツールを実現しました。
Recommended Posts