目次
1. QRコードの概要
2. PyQRCode
3. 実験のコード
_3.1 環境準備
_3.2 QRコードの生成(Encode)
_3.3 QRコード画像の読み取り(Decode)
_3.5 QRコード動画の読み取り(Decode)
1. QRコードの概要
どこにでもあるQRコードはpythonでどう生成しますか?この記事はこの質問に回答します。
QRコードの生成と読み取るPythonは複数のパッケージがあります。今回はPyQRCode・pyzbarを解説します。
2. PyQRCode
PyQRCodeのパッケージはQRコード作成、エラー修正、QRコードのバージョン、Encodeのモードなどを設定することができます。
pyqrcode.create(content, error=’H’, version=None, mode=None, encoding=None)
content(コンテンツ):
QRコード
error(エラー):
・‘L’ コードの7%を修正できる。
・‘M’ コードの15%を修正できる「M」。
・‘Q’一般)コードの25%を訂正できます。
・‘H’ コードの30%を修正できる。
version(バージョン):
・バージョンは1から40まで設定ができます。バージョン1が最小のQRコードで、バージョン40が最大です。
mode(モード):
・整数をエンコードするために使用される「数値」。
・一部のASCII文字をエンコードするために使用される「英数字」。
・「漢字」モードは日本語の文字に使用できますが、shift-jis文字列エンコードで理解できる文字のみです。
・バイトをQRコードに直接エンコードする「バイナリ」モード
3. 実験のコード
環境:Google Colab
Pythonパッケージ:PyQRCode, pypng, pybar
コード:QRコード Encode Decode
3.1 環境準備
下記のライブラリをインポートします。
!pip install PyQRCode !pip install pypng !sudo apt-get install libzbar0 !pip install pyzbar |
3.2 QRコード生成(Encode)
QRコードのsvg画像とeps画像を作成します。
# import pyqrcode url = pyqrcode.create(‘https://data-analysis-stats.jp/’) url.svg(‘qrcode_svg.svg’, scale=8) url.eps(‘qrcode_eps.eps’, scale=2) |
QRコードのsvg画像を確認します。
# Show image svg from IPython.display import Image, display_svg svg = open(‘qrcode_svg.svg’, ‘r’).read() display_svg(svg, raw=True) |
QRコードのpng画像を作成します。
import pyqrcode big_code = pyqrcode.create(‘https://data-analysis-stats.jp/’, error=’L’, version=3, mode=’binary’) big_code.png(‘code.png’, scale=9, module_color=[0, 0, 0, 128], background=[255, 255, 255]) |
QRコードのpng画像を確認します。
# Show image from IPython.display import Image img_file = “code.png” Image(img_file) |
3.3 QRコード読み取り(Decode)
pyzbarでQRコード読み取ります。
from pyzbar.pyzbar import decode from PIL import Image d = decode(Image.open(‘code.png’)) print(d[0].data.decode(“utf-8”)) |
https://data-analysis-stats.jp/
3.5 QRコード動画の読み取り(Decode)
携帯で撮ったQRコード動画を読み取ります。
# Play Video from IPython.display import HTML from base64 import b64encode video_path = ‘qrcode.mp4′ mp4 = open(video_path,’rb’).read() decoded_vid = “data:video/mp4;base64,” + b64encode(mp4).decode() HTML(f'<video width=400 controls><source src={decoded_vid} type=”video/mp4″></video>’) |
3秒の動画から、0.5秒ことQRコード読み取ります。動画の一部分では読み取れていない事がわかります。
import cv2 video_path = ‘qrcode.mp4’ vidcap = cv2.VideoCapture(video_path) def getFrame(sec): vidcap.set(cv2.CAP_PROP_POS_MSEC,sec*1000) hasFrames,image = vidcap.read() if hasFrames: cv2.imwrite(“img”+str(count)+”.jpg”, image) # save frame as JPG file return hasFrames sec = 0 i = 1 end_sec = 3 frameRate = 0.5 #//it will capture image in each 0.5 second count=1 success = getFrame(sec) while True: count = count + 1 sec = sec + frameRate sec = round(sec, 2) success = getFrame(sec) i +=1 if i == (end_sec / frameRate): break images = [‘img1.jpg’, ‘img2.jpg’, ‘img3.jpg’, ‘img4.jpg’, ‘img5.jpg’, ‘img6.jpg’] for image in images: d = decode(Image.open(image)) try: print(d[0].data.decode(“utf-8”)) except: print(‘Cannot detect’) |
Cannot detect
Cannot detect
Cannot detect
Cannot detect
Cannot detect
https://data-analysis-stats.jp/
担当者:KW
バンコクのタイ出身 データサイエンティスト
製造、マーケティング、財務、AI研究などの様々な業界にPSI生産管理、在庫予測・最適化分析、顧客ロイヤルティ分析、センチメント分析、SaaS、PaaS、IaaS、AI at the Edge の環境構築などのスペシャリスト