Python

【TIPS】PythonのqrcodeでQRコード作成・保存・読み取り方法紹介

 

エンジニアライフスタイルブログを運営しているミウラ(@miumiu06171)です。

 

普段はフリーランスでシステムエンジニアをしております。

 

今回は、PythonのqrcodeライブラリでQRコードの生成や読み取りを行う方法をまとめてみました。

 

なお、本記事内のPythonソースコードは、JupyterLabで動作を確認しています。

 

同様に動作確認したい方はこちらの記事も参照し、まずはJupyterLabの環境構築をおこなうとよいでしょう。

 

 

QRコードとは

 

QRコードとは、「Quick Response」の頭文字からとっており、下図のような素早く情報を読み取ることができる二次元バーコードのことです。

 

 

 

QRコードは、株式会社デンソーウェーブの登録商標です。

 

QRコードは、デンソーウェーブ社が開発した技術であり、利用するにあたって手続きや費用が不要、かつオープンソースで公開されているため、様々なシーンに活用されています。

 

 

QRコードの仕組み

 

QRコードの仕組みとしては、「ファインダパターン(切り出しシンボル)」が3点と「アライメントパターン」が1点の計4点で構成されており、カメラでこの4点を含む二次元バーコードを読み込むことができるようになっています。

 

「ファインダパターン」(finder-pattern)

 

ファインダーパターンとは、QRコード内の下図の赤枠部分の3点を指します。

 

 

 

「アライメントパターン」(alignment-pattern)

 

アライメントパターンとは、QRコード内の下図の赤枠部分の1点を指します。

 

 

QRコードの大きな特徴として、多少汚れたとしても、誤り訂正機能で正しくコードを読み取れるようになっています。

 

誤り訂正機能の詳細については、後述しております。

 

 

QRコードの使用例

 

ここでは、現実世界でQRコードが使用されているシーンを紹介します。

 

  • チラシなどにホームページへのリンクとしてQRコードを使ったり
  • 物流管理で商品情報、配送先、配送方法、入出荷の登録としてQRコードを使ったり
  • 音楽ライブなどのイベントで入退場管理にQRコードが使われたり、
  • レジの電子決済でQRコードが使われたり(QRコード決済)
  • LINEで友達アカウントをフォローする際にQRコードを使ったり

 

 

PythonでQRコードを生成するための事前準備

 

 

Anaconda仮想環境を準備

 

Anacondaのインストールから仮想環境(venv)で外部ライブラリをインストールする方法については、以下の記事を参考に用意します。

 

【TIPS】知らないと損!PyCharmとAnaconda仮想環境(venv)の連携方法[Windows版]WindowsでPyCharmとAnacondaをインストールするところから仮想環境の追加、確認、変更、連携する方法がわかるので、開発環境の立ち上げが一通りわかる記事になります。 Python初心者の方は環境構築の参考にしてみてください。...

 

 

JupyterLab開発環境を準備

 

JupyterLab(ジュピターラボ)のインストールから使い方については、以下の記事を参考に環境を構築してください。

 

【Python入門】JupyterLabでPython開発環境構築&使い方を徹底解説(1)本記事は、Python初心者向けにAnacondaに含まれるJupyterLabでPython開発環境を構築する手順をやさしく解説しています。 データ分析でよく使われるJupyterLabのインストールからノートブックやセルの使い方までしっかり解説していますので、ぜひご覧ください。...

 

 

Pythonのqrcodeの使い方

 

事前準備ができたところで、PythonでQRコードを扱うためのqrcodeライブラリの導入方法および使い方を紹介していきます。

 

Python 画像ライブラリPillowをインストール(pip install Pillow)

 

Anaconda NavigatorのEnvironmentsメニュー、またはAnaconda Promptから仮想環境に画像ライブラリのPillowをインストールします。

 

 

または

 

 

 

Python QRコード生成ライブラリqrcodeをインストール(pip install qrcode)

 

先程と同様にAnaconda NavigatorのEnvironmentsメニュー、またはAnaconda Promptから仮想環境にQRコード生成ライブラリのqrcodeをインストールします。

 

 

または

 

 

 

qrcode.QRCodeクラスオブジェクトの生成と設定パラメータ

 

PythonでQRコードを生成する場合、qrcodeライブラリのQRCodeクラスオブジェクトを使って操作を行います。

 

細かいカスタマイズをしたい場合は、このQRCodeクラスオブジェクトを生成する際にオプションでサイズやバージョン、誤り訂正レベル等をパラメータ指定します。

 

本章では、代表的なパラメータについて、解説していきます。

 

box_sizeパラメータ

 

box_sizeパラメータは、QRコードの各ボックスのピクセル数を設定することができます。

 

 

 

 

 

borderパラメータ

 

borderパラメータは、境界線の太さを設定することができます。

 

デフォルトでは、最小値の4が設定されています。

 

 

 

 

versionパラメータ

 

versionパラメータは、QRコードのバージョンを1~40の間で指定することができます。

 

versionパラメータの値によって、QRコードの大きさが変わります。

 

 

 

たとえば、versionが1の場合、21 x 21のマトリックスのQRコードになります。

 

 

 

error_correctionパラメータ

 

error_correctionパラメータは、QRコードの大きなメリットである誤り訂正の制御を行います。

 

qrcodeライブラリの誤り訂正の制御では、以下のレベルを指定することができます。

 

  • ERROR_CORRECT_L:約7%以下の誤りを訂正
  • ERROR_CORRECT_M:約15%以下の誤りを訂正
  • ERROR_CORRECT_Q:約25%以下の誤りを訂正
  • ERROR_CORRECT_H:約30%以下の誤りを訂正

 

 

デフォルトでは、ERROR_CORRECT_M となっています。

 

 

 

 

パラメータの紹介ができたところで、次はqrcodeライブラリに含まれるメソッドを紹介していきます。

 

 

add_dataメソッドでデータ設定

 

 

QRコードを読み取ったときのデータをセットするには、add_dataメソッドを使用します。

 

 

ここでは、本サイトのURLアドレスをデータとしてセットしています。

 

 

make_imageメソッドでQRコードを生成

 

QRコードを生成するには、make_imageメソッドを使用します。

 

 

戻り値がPillowライブラリのImageオブジェクトであるため、showメソッドでQRコードを確認したり、saveメソッドで保存することが可能です。

 

なお、make_imageの引数でボックスの色と背景色を指定しています。

 

ボックスの色と背景色は、以下のようにRGBでも指定することができます。

 

 

 

 

showメソッドでQRコードを表示

 

QRコードを表示するには、showメソッドを使用します。

 

 

 

saveメソッドでQRコードを画像ファイルで保存

 

QRコードを画像ファイルとして保存するには、saveメソッドを使用します。

 

 

引数には、画像のファイル名を指定します。

 

 

PythonでQRコード作成(サンプルコード付き)

 

ここでは、QRコードを生成するサンプルコードについて、いくつか紹介していきます。

 

まずは、前述したqrcodeの使い方から以下のようにコードを書くと、QRコードを生成したり、表示したりすることができる基本的なサンプルコードができます。

 

 

上記サンプルコードは、本サイトのトップページのURLをQRコード化したものです。

 

次は、QRコードを画像中に埋め込んだり、QRコード中に画像を埋め込む方法を紹介していきます。

 

 

QRコードを画像中に埋め込む場合

 

添付図のようにQRコードを画像中に埋め込むサンプルプログラムを紹介します。

 

 

今回のサンプルプログラムでは、画像の右下にQRコードを埋め込む例を記載しています。

 

 

QRコードを埋め込む場所は、11行目のpos変数の右辺を編集すると、任意に変更することができます。

 

また、QRコードのサイズについても、前述のとおりbox_sizeオプションの値を調整することでサイズ変更が可能です。

 

 

 

QRコード中に画像を埋め込む場合

 

次は、添付図のようにQRコード中に画像を埋め込むサンプルプログラムを紹介します。

 

 

今回のサンプルプログラムでは、画像の特定部分を切り取った後、QRコードの中央に切り取った画像を埋め込む例を記載しています。

 

 

画像の特定部分を切り取る処理は、4行目のcropメソッドで行っています。

 

cropメソッドの第一引数、第二引数が、画像の左上の頂点のx, y座標を示します。

 

同様に

 

cropメソッドの第三引数、第四引数が、画像の右下の頂点のx, y座標を示します。

 

画像を埋め込む場所は、13行目のpos変数の右辺を編集すると、任意に変更することができます。

 

ただし、QRコードの誤り訂正機能がどこまで働くかによって読み取り可、読み取り不可が決まってくるので、QRコード中に画像を埋め込むことは推奨されておりません。

 

 

PythonでQRコード読み取り(サンプルコード付き)

 

次は、Pythonで画像中のQRコードを読み込むサンプルプログラムを紹介します。

 

 

 

QRコードを読み込むライブラリpyzbarをインストール(pip install pyzbar)

 

PythonでQRコードを読み込むには、前述した画像読み込むPillowに加えて、QRコードを読み込むpyzbarをpipでインストールします。

 

 

QRコードを読み込む方法

 

先程のqrdecode.pyを実行するときに引数として画像ファイルを指定して実行すると、QRコードを読み込むことができます。

 

ここでは、前章で作成した「qr_on_image.png」画像ファイルを読み込み、画像中のQRコードの情報を取得できるか確認しています。

 

【コマンド例】

 

【コマンド例の実行結果】

 

 

「qr_on_image.png」画像ファイルの右下に含まれるQRコードをデコードしたサイトURLが取得できていることが確認できます。

 

 

まとめ

 

いかがでしたでしょうか。

 

PythonでQRコードを生成したり、QRコードの読み取り方を紹介してきました。

 

最近では、QRコード決済等も主流になってきているため、具体的にイメージもしやすかったのではないでしょうか。

 

本記事を通してPythonを使えばQRコードを簡単に扱うことができ、アプリを作成する手助けになればと思います。

 

 

【関連記事】

【TIPS】PythonでのCSVファイル読み込み、書き込み操作まとめ

【TIPS】データ分析ならコレ!Python Pandas使い方まとめ(DataFrame編)