LoginSignup
4
6

More than 1 year has passed since last update.

Raspberry PiでQRコードを使ってみる

Last updated at Posted at 2021-01-08

概要

電子決済を中心に一般生活にも当たり前となったQRコード。
自ら作って、認識させてみたいと思いRaspberryPiで試した結果を投稿します。

やったこと

・任意のQRコード生成
・USBカメラを使ってコード読み取り+内容の表示
実行した見ためはこんな感じ。

コードの内容(自ら生成可能)を表示。
認識している様子をわかりやすくするため、認識毎に数値が増える表示をしています。
2020-05-12-171506_1920x1080_scrot.png

環境

・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 でリアルタイムに読み取る方法
 ・色々な生成方法

応用

2022/10/4 追記

pyqrcode.createでも生成可能。

以上

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6