Pythonを使用してQRコードを作成およびデコードする方法

QRコード(クイックレスポンスコード)は、エンコードされたデータを格納するマトリックスバーコードの一種です。大きなデータをすぐに保存してアクセスできることから、「クイックレスポンスコード」と名付けられました。これらのQRコードは、ポスター、雑誌、映画館、ウェブサイト、ジム、広告など、どこにでもあります。

Pythonを使用すると、独自のQRコードを生成してカスタマイズし、QRコードから情報をデコードできます。

Python環境をセットアップする

Pythonプロジェクト用に分離された環境をセットアップすることをお勧めします。これを行うことで、プロジェクトの依存関係についてより深く理解することができます。

仮想環境の作成

Python仮想環境作成するには、 virtualenv、virtualenvwrapper、Anacondaディストリビューションなどのさまざまな方法があります。ここでは、 virtualenvを使用して仮想環境を作成します。

  1. mkdir [Folder]コマンドを使用して、このプロジェクトを作成するフォルダーを作成します。
  2. コマンドプロンプトにcd [Folder]と入力して、新しいディレクトリに移動します。
  3. virtualenv [Environment Name]と入力して、仮想環境を作成します。
  4. [環境名] Scripts activateと入力して仮想環境をアクティブ化します

必要なパッケージをインストールする

pipコマンドを使用して必要なPythonパッケージをインストールします。システムにpipがインストールされていることを確認してください

コマンドプロンプトで次のコマンドを実行します。

 pip3 install opencv-python qrcode numpy Image

すべてのパッケージを一度にインストールしたくない場合は、次のように1つずつインストールできます。

 pip3 install opencv-python

これにより、主にコンピュータービジョン、機械学習、画像処理に使用されるopencv-pythonパッケージがインストールされます。

 pip3 install qrcode

これにより、QRコードの生成と読み取りに使用されるqrcodepythonパッケージがインストールされます。

 pip3 install numpy

これにより、配列の操作に使用されるnumpypythonパッケージがインストールされます。

 pip3 install Image

これにより、ファイルから画像をロードしたり、新しい画像を作成したりするための多くの関数を提供するImagepythonパッケージがインストールされます。

QRコードを生成する

コードを生成するには、QRコードを生成するためのコードを含む.py拡張子の付いた新しいファイルを作成します。

次のコードをPythonファイルに貼り付けて、プログラムを実行します。

 import qrcode
# Data for which you want to make QR code
# Here we are using the URL of the website
data = "https://www.makeuseof.com/"
# File name of the QR code Image
# Change it with your desired file name
QRCodefile = "MUOQRCode.png"
# Generating the QR code
QRimage = qrcode.make(data)
# Saving image into a file
QRimage.save(QRCodefile)

これにより、指定されたデータ(この場合はwww.makeuseof.com )のQRコード画像(MUOQRCode.png)が作成されます。生成されたQRコードは次のようになります。

カスタマイズされたQRコードを生成する

qrcodeライブラリのすばらしい機能を使用してQRコードをカスタマイズできます。 QRコードの塗りつぶしの色、背景色、画像サイズ、ボックスサイズ、境界線の太さを変更できます。

画像とボックスサイズの変更

QRCodeクラスのバージョンパラメータを使用して、QRコードの画像サイズを変更できます。 1から40までの整数を受け入れます。ここで、1は21×21行列に相当し、40は185×185行列に相当します。データが指定されたサイズに収まらないことに注意してください。バージョンは自動的にスケールアップします。

同様に、QRCodeクラスのbox_sizeパラメーターを使用してボックスサイズを変更できます。 QRコードの各ボックスのピクセルを指定します。

 # Importing libraries
import qrcode
import numpy as np
# Data which for you want to make QR code
# Here we are using URL of website
data = "https://www.makeuseof.com/"
# Name of the QR code Image file
QRCodefile = "CustomisedImgBoxQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode(version=1, box_size=12)
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image()
image.save(QRCodefile)
# print the image size (version)
print("Size of the QR image(Version):")
print(np.array(qrObject.get_matrix()).shape)

次のQRコード画像ファイルが生成されます。

また、以下の出力が表示されます-

 Size of the QR image(Version):
(33, 33)

バージョンは、データのサイズに応じて自動的にスケールアップされることに注意してください。

塗りつぶしの色を変更する

fill_colorパラメーターを使用して、QRコードの塗りつぶしの色を変更できます。

 # Importing library
import qrcode
# Data for which you want to make QR Code
# Here we are using URL of website
data = "https://www.makeuseof.com/"
# Name of the QR Code Image file
QRCodefile = "CustomisedFillColorQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode()
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image(fill_color="red")
# Saving image into a file
image.save(QRCodefile)

次のQRコード画像ファイルが生成されます。

背景色の変更

back_colorパラメーターを使用して、QRコードの背景色を変更できます。

 # Importing library
import qrcode
# Data for which you want to make QR Code
# Here we are using URL of website
data = "https://www.makeuseof.com/"
# Name of the QR Code Image file
QRCodefile = "CustomisedBGColorQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode()
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image(back_color="blue")
# Saving image into a file
image.save(QRCodefile)

次のQRコード画像ファイルが生成されます。

境界線の太さの変更

QRCodeクラスのborderパラメータを使用して、QRコードの境界線の太さを変更できます。

 # Importing libraries
import qrcode
# Data for which you want to make QR Code
# Here we are using URL of website
data = "https://www.makeuseof.com/"
# Name of the QR Code Image file
QRCodefile = "CustomisedBorderQRCode.png"
# instantiate QRCode object
qrObject = qrcode.QRCode(border=10)
# add data to the QR code
qrObject.add_data(data)
# compile the data into a QR code array
qrObject.make()
image = qrObject.make_image()
image.save(QRCodefile)

次のQRコード画像ファイルが生成されます。

QRコード画像を使用してQRコードをデコードする

PythonのOpenCVライブラリを使用して、QRコード画像から情報をデコードできます。 OpenCVにはQRコード検出器が組み込まれています。検出器を使用すると、QRコードからデータをデコードできます。

 # Import Library
import cv2
# Name of the QR Code Image file
filename = "MUOQRCode.png"
# read the QRCODE image
image = cv2.imread(filename)
# initialize the cv2 QRCode detector
detector = cv2.QRCodeDetector()
# detect and decode
data, vertices_array, binary_qrcode = detector.detectAndDecode(image)
# if there is a QR code
# print the data
if vertices_array is not None:
print("QRCode data:")
print(data)
else:
print("There was some error")

提供された画像が有効なQRコードである場合、デコードされたデータが表示されます。この場合、次の出力が生成されます-

 QRCode data:
https://www.makeuseof.com/

ウェブカメラを使用してQRコードをライブでデコードする

ほとんどの場合、人々はQRコードをスキャンするためにウェブカメラを使用する傾向があります。 PythonとOpenCVライブラリの可能性を利用して、QRコードからデータを簡単にデコードできます。

 import cv2
# initalize the camera
cap = cv2.VideoCapture(0)
# initialize the OpenCV QRCode detector
detector = cv2.QRCodeDetector()
while True:
_, img = cap.read()
# detect and decode
data, vertices_array, _ = detector.detectAndDecode(img)
# check if there is a QRCode in the image
if vertices_array is not None:
if data:
print("QR Code detected, data:", data)
# display the result
cv2.imshow("img", img)
# Enter q to Quit
if cv2.waitKey(1) == ord("q"):
break
cap.release()
cv2.destroyAllWindows()

このコードを実行すると、Webカメラが自動的に開きます。ウェブカメラの前にQRコードをかざすだけで、データがデコードされ、コマンドプロンプトに表示されます。

QRコードのエンコードとデコードが簡単に

この記事を使用すると、QRコードを必要に応じて簡単にエンコード、デコード、カスタマイズできます。提供されたコードを使用して、完全なQRコードScanner-Generatorアプリケーションを作成することもできます。

QRコードを使用するため創造的な方法はたくさんあり ます。クリエイティブになり、QRコードを好きなように使用してください。