概要
電子決済を中心に一般生活にも当たり前となったQRコード。
自ら作って、認識させてみたいと思いRaspberryPiで試した結果を投稿します。
やったこと
・任意のQRコード生成
・USBカメラを使ってコード読み取り+内容の表示
実行した見ためはこんな感じ。
コードの内容(自ら生成可能)を表示。
認識している様子をわかりやすくするため、認識毎に数値が増える表示をしています。
環境
・RasPi4 (RasPi3でも動くはずです)
・USBカメラ(Logicool) → Raspi camでも可能。
RasPiのセットアップ
・RasPiやOpenCVのセットアップが完了していれば不要。
Raspberry PiでArUcoを使ってみる
・必要なパッケージのインストール
ターミナル で下記を実行
install
pip install --upgrade pip
pip install pillow
pip install pyzbar
pip install qrcode
QRコードを生成する
QRcreate.py
import qrcode
from PIL import Image
#サイズを決める
qr = qrcode.QRCode(box_size=5)
#種類と大きさ一覧。
#1 57x57
#2 114x114
#5 285x285
#10 570x570
#埋め込む内容を指定
qr.add_data('QRコードを身近に試してみる')
qr.make()
img_qr = qr.make_image()
img_qr.save('/home/pi/qr_lena_1.png') #保存したい場所と名前。
QRコードを認識する
QRdetect.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from pyzbar.pyzbar import decode
from PIL import Image
import cv2
import time #test用、無くても可
#ビデオキャプチャの開始
cap = cv2.VideoCapture(1)
i=0 #test用
while True:
#ビデオキャプチャから画像を取得
ret, frame = cap.read()
#sizeを取得
Height, Width = frame.shape[:2]
img = cv2.resize(frame,(int(Width),int(Height)))
PIL_Image=Image.fromarray(img)
#画像の表示
cv2.imshow('Qr Test', img)
data = decode(PIL_Image)
#何か読めていたら表示する
if(data != []):
print('Read' ,i)
i=i+1
#print(data[0][0])
print(data[0][0].decode('utf-8', 'ignore'))
#キーボード入力の受付
cv2.waitKey(1)
#ビデオキャプチャのメモリ解放
cap.release()
#すべてのウィンドウを閉じる
cv2.destroyAllWindows()
実行結果
少し見えにくいですが、認識毎に数値が増えているのがわかると思います。
Printをしなければもっと高速で動きます。
エラー対応
opencvエラーの場合、インストールしなおすと解決することがある。
pip3 install opencv-contrib-python==4.1.0.25
参考リンク
・QRコードの生成
・PythonでQRコードとバーコードを生成して普通に読み取ったりOpenCV でリアルタイムに読み取る方法
・色々な生成方法
応用
- pythonでArUcoライブラリを使ってARマーカの位置とか角度とか知る
- ARマーカー認識プログラム
- pythonでARマーカーの姿勢推定
- ArUcoマーカーを使用して、安定した商品の監視映像を撮影してみました。
- Opencv Aruco で Pose estimation する その1
- python ARマーカー認識
- OpenCV+ArUco+Webカメラでマーカ検出をやった話
- 【QRコード入門】作成・読込からリアルタイムカメラ取得
2022/10/4 追記
pyqrcode.createでも生成可能。
以上