Python | OpenCVでQRコードリーダーを作成する

Python | OpenCVでQRコードリーダーを作成する

みなさん、こんにちは!

今回はOpenCVのQRコードリーダ機能を利用して、簡易的なバーコードリーダを作成したいと思います。

↓簡易的なイメージ図

準備したもの

iphoneに以下のQRコードを投影します。(帳票の代わりです)

このQRコードを映したiPhoneを、カメラにかざすことでデータを読み取らせます。

コード

前回の記事のコードを改良しています。

import cv2

try:
    # 1)カメラIDを設定
    camera = cv2.VideoCapture(1)

    # 2)QRCodeDetectorオブジェクトを生成
    QRCD = cv2.QRCodeDetector()
            
    # 3)繰り返し画像を取得する
    while True:

        # 4)設定したカメラから画像を取得
        ret, img = camera.read()

        # 5)画像を表示する / 引数=(Window名,表示したい画像)
        cv2.imshow('Camera',img)

        # 6)QRコードの読み取り
        #   data: QRコードの内容
        #   points: QRコードの座標データ
        #   b_img: QRコード画像のバイナリデータ
        data,points,b_img = QRCD.detectAndDecode(img)
        
        # 7)Escが入力されたらループ処理を終了する
        key = cv2.waitKey(10)
        if key == 27:
            break
        
        # 8)QRコードが読み取られたらループを終了する
        if data !='':
            print(data)
            break
            
    # 9)入力されたら、ウィンドウを閉じる
    cv2.destroyAllWindows()

    # 10)カメラのメモリを解放する
    camera.release()

# except) Error時
except FileNotFoundError as e:
    print(e)

検証結果

プログラムを実行し、QRコードをかざすことで、以下の情報が出力できれば成功です。

https://miseruit.com/

小ネタ:読み取り成功時に音を出す

改良したのは8)の部分です。

import winsoundをし、winsound.Beep(2000, 200) とすることで 2000Hzで200msecのビープ音を鳴らすことができます。(Windowsのみで使用可能)

import cv2
import winsound

try:
    # 1)カメラIDを設定
    camera = cv2.VideoCapture(1)

    # 2)QRCodeDetectorオブジェクトを生成
    QRCD = cv2.QRCodeDetector()
            
    # 3)繰り返し画像を取得する
    while True:

        # 4)設定したカメラから画像を取得
        ret, img = camera.read()

        # 5)画像を表示する / 引数=(Window名,表示したい画像)
        cv2.imshow('Camera',img)

        # 6)QRコードの読み取り
        #   data: QRコードの内容
        #   points: QRコードの座標データ
        #   b_img: QRコード画像のバイナリデータ
        data,points,b_img = QRCD.detectAndDecode(img)
        
        # 7)Escが入力されたらループ処理を終了する
        key = cv2.waitKey(10)
        if key == 27:
            break
        
        # 8)QRコードが読み取られたらbeepオンを鳴らす
        if data !='':
            winsound.Beep(2000, 200)
            print(data)
            break
            
    # 9)入力されたら、ウィンドウを閉じる
    cv2.destroyAllWindows()

    # 10)カメラのメモリを解放する
    camera.release()

# except) Error時
except FileNotFoundError as e:
    print(e)

今回は以上です!

ではまた!