たくさんのQRコードを読み込む方法

2023年10月17日

作成したQRコードがたくさんある時に読み込めるか確認したい時に便利です

コード

# -*- coding: utf-8 -*-

import os
import cv2
from pyzbar.pyzbar import decode
import time
import io, sys
import numpy as np
from PIL import Image

def read_qr_codes_in_folder(folder_path):
    qr_codes_data = []
    qr_codes_d = []

    for filename in os.listdir(folder_path):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            image_path = os.path.join(folder_path, filename)

            # Pillowで画像ファイルを開く
            pil_img = Image.open(image_path)
            # PillowからNumPyへ変換
            image = np.array(pil_img)
            # カラー画像のときは、RGBからBGRへ変換する
            if image.ndim == 3:
                image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)

#            image = cv2.imread(image_path)
            
            decoded_objects = decode(image)

            for obj in decoded_objects:
                if obj.type == 'QRCODE':
                    qr_data = obj.data.decode('utf-8')
             #       qr_data = qr_data.encode("shift-jis").decode("utf-8", errors="ignore")

                    qr_codes_data.append(qr_data)
                    qr_codes_d.append(filename)
                    print(f"ファイル: {filename}, QRコードのデータ: {qr_data}")
                    time.sleep(0.5)
                else:
                    print(f"ファイル: {filename}, QR")
                    time.sleep(0.5)
            
    if not qr_codes_data:
        print("QRコードが見つかりませんでした。")
        
        
    filename2 = "b_data.txt"

    with open(filename2, 'w') as file:
        for item in qr_codes_d:
            item = item.encode('sjis', errors='ignore').decode('sjis')

            file.write(str(item) + '\n')


    return qr_codes_data

if __name__ == "__main__":
#:    folder_path = "D:\in"  # QRコード画像が含まれるフォルダーのパスを指定
    folder_path = "D:\in"  # QRコード画像が含まれるフォルダーのパスを指定
    qr_codes_data = read_qr_codes_in_folder(folder_path)
    print("読み込んだQRコードのデータ:", qr_codes_data)

Python

Posted by eightban