PythonでQRコードの読み取りと作成を行ってみた

ラインやPayPayの決済、カタログやチラシなど様々な場所と用途で利用されているQRコードを利用して何か作れればと思い、QRコードについて調べてみました。


QRコードとは

1994年(平成6年)に自動車部品メーカーであるデンソー(愛知県)の開発部門(現在は分離しデンソーウェーブ)が発明したマトリックス二次元コードである。
「"QRコード"」『フリー百科事典 ウィキペディア日本語版』より。
"最終日付(2019年12月2日 (月) 11:08 )" UTC
URL: http://ja.wikipedia.org/


QRコードの利用例
先ほど紹介したラインやPayPayでの決済やカタログ、チラシだけでなく名刺に企業のPRサイトへとつながるQRコードを埋め込んだり、工場などでの在庫管理の効率化などで用いられています。


QRコードの詳しい仕組みなどはこちらをご覧ください
sites.google.com

●環境

OS:Windows10
python3.7.3


PythonQRコードを生成、読み取る方法

PythonにはQRコードを扱うモジュールがあるのでそれを使います。

QRコードの作成

import os, qrcode

# ライブラリ読み込み
name = input('ファイル名 : ')

#保存するQRコードのファイル名
file_name = name + '.png'

print("QRコードに変換したい文字列を入力してください: ")

# キーボードから変換したい文字列を入力させる
qr_string = input()

# QRコード画像データ生成
img = qrcode.make(qr_string)

# 画像ファイルとして保存
img.save(file_name)

# 現在のディレクトリ位置を取得
current_dir = os.getcwd()

# 終了メッセージ出力
print("「{0}\\{1}」にQRコード画像を保存しました".format(current_dir, file_name)


クラスを用いればより詳しくQRコードを作ることができます。

import qrcode

qr = qrcode.QRCode(
    
   #生成されるQRコードのバージョン
    version=1,

    #誤り訂正レベル
    error_correction=qrcode.constants.ERROR_CORRECT_L,

    #セルのサイズ
    box_size=10,
)

qr.add_data(input())
qr.make()
img=qr.make_image(fill_color="black",back_color="white)
img.save('QR.png')

・引数「version」は最小が1、最大が40で、大きくすることで画像のサイズと中に入れる情報量を大きくすることができる。

・引数「error_correction」で誤り訂正レベルを設定することができる。
qrcode.constants.ERROR_CORRECT_L :約7%
qrcode.constants.ERROR_CORRECT_M:約15%
qrcode.constants.ERROR_CORRECT_Q:約25%
qrcode.constants.ERROR_CORRECT_H:約30%

・引数「box_size」でセルの大きさ(ピクセル)を設定できる

・make_imageで色の指定もできる
色指定はRGB指定

QRコードの読み取り

from pyzbar.pyzbar import decode
from PIL import Image

# 画像ファイルの指定
image = input('画像ファイルの指定 : ')

# QRコードの読取り
data = decode(Image.open(image))

# コード内容を出力
print(data[0][0].decode('utf-8', 'ignore'))