Python で OpenCV を使用して QR コードスキャナーを作成する

Manav Narula 2023年1月30日
  1. Python で QRCodeDetector クラスを使用して OpenCV を使用して QR コードスキャナーを作成する
  2. まとめ
Python で OpenCV を使用して QR コードスキャナーを作成する

私たちは皆、さまざまな製品に存在するバーコードに精通しています。モールス信号に基づいて、バーコードは行とスペースを使用して情報を表し、データを水平方向に格納することで情報を格納します。

最近では、QR コードも人気を博しています。QR コードはボックスに保存され、いくつかのドットが付いた黒と白の正方形の組み合わせを使用して表されます。

また、モールス信号に基づいているため、バーコードのマトリックスの一種と見なすことができます。

QR コードは、ストレージの点で従来のバーコードよりも優れています。データを 2 方向に保存します。したがって、バーコードよりも多くの情報を含めることができます。

この情報には、URL、連絡先、および最大 4,000 文字のその他の情報を含めることができます。最近ではほとんどすべての携帯電話に QR コードスキャナーのアプリケーションがあります。

このチュートリアルでは、Python で OpenCV ライブラリを使用して QR コードスキャナーを作成する方法を示します。

OpenCV ライブラリには、画像を効率的に保存および処理できるさまざまな機能とクラスが含まれています。フレームには、さまざまな事前定義された手法を適用できます。

Python で QRCodeDetector クラスを使用して OpenCV を使用して QR コードスキャナーを作成する

OpenCV ライブラリのバージョン 4.0.0 では、QRCodeDetector クラスが導入されました。このクラスには、QR コードの画像を検出およびスキャンするために使用できるメソッドが含まれています。

さまざまな方法を使用して、単一および複数の QR コードをスキャンできます。

このクラスの detect() メソッドは、画像の QR コードをスキャンするために使用されます。QR コードを含むボックスを見つけます。decode() メソッドは、検出された QR コードをデコードします。

特定の画像で複数の QR コードを検出するには、detectMulti() および decodeMulti() 関数を使用できます。曲面上のコードの検出とデコードには、それぞれ detectCurved() メソッドと decodeCurved() メソッドを使用します。

detectandDecode() 関数を使用して、画像からコードを同時に検出およびデコードできます。このメソッドには、detectandDecodeCurved() および detectandDecodeMulti() メソッドも存在します。

このクラスを使用して非常に単純な QR コードを作成し、次の画像の QR コードをスキャンしてみましょう。

スキャンする QR コード

以下のコードを参照してください。

import cv2

img = cv2.imread("2.jpg")
det = cv2.QRCodeDetector()
info, box_coordinates, _ = det.detectAndDecode(img)

if box_coordinates is None:
    print("No Code")
else:
    print(info)

if box_coordinates is not None:
    box_coordinates = [box_coordinates[0].astype(int)]
    n = len(box_coordinates[0])
    for i in range(n):
        cv2.line(
            img,
            tuple(box_coordinates[0][i]),
            tuple(box_coordinates[0][(i + 1) % n]),
            (0, 255, 0),
            3,
        )

cv2.imshow("Output", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

出力:

http://sampleurl.com

OpenCV を使用してスキャンされた QR コード

上記の例では、QRCodeDetector クラスのオブジェクトを作成し、detectandDecode() 関数を使用して、指定された画像の QR コードをスキャンしてデコードしました。この関数は、表示されている QR コードの情報を返しました。

また、QR コードを囲むボックスの座標も返しました。これらの座標を使用して、line() 関数を使用して画像に境界を描画しました。

最終的な画像が表示され、waitKey() および destroyAllWindows() 関数を使用して、このウィンドウが自動的に閉じないようにし、ユーザーがキーを押すのを待ってから閉じます。

この例では、ディレクトリから画像を読み取り、QR コードをスキャンしました。ウェブカメラを使用してそこから画像を読み取ることで、これをよりインタラクティブにすることができます。

OpenCV は、Web カメラからビジュアルをキャプチャして読み取るための VideoCapture クラスを提供します。

まとめ

このチュートリアルでは、Python の OpenCV ライブラリを使用して簡単な QR コードスキャナーを作成する方法を説明しました。まず、QR コードの基本、バーコードとの比較、保存できる情報について説明しました。

簡単に説明すると、OpenCV ライブラリの QRCodeDetector クラスについて説明しました。このクラスには、画像から QR コードを検出してデコードするためのさまざまなメソッドが用意されています。このクラスを使用して、特定の画像から QR コードをスキャンおよびデコードする簡単な QR コードスキャナーの例を示しました。

著者: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

関連記事 - Python OpenCV