Help us understand the problem. What is going on with this article?

PythonでQRコードとバーコードを生成して普通に読み取ったりOpenCV でリアルタイムに読み取る方法

0.最初に

今回作るものがどういう感じで動くのか見てみたい方は、こちら(youtubeの動画)でどうぞ。

まずは、今回必要なものを一度にインストールします。

pip install pyqrcode
pip install pypng
pip install python_barcode
pip install pyzbar

1.QRコードの生成

ここではまずは文字の情報を含んだQRコードを生成します。

qrcode_barcode.py
import pyqrcode

a = pyqrcode.create(content="Hello From Jetsonnano",error='H') 

a.png(file='test.png',scale=6) 

これを実行すると以下のようなQRコードが出来上がります。
test.png
次にurlの情報を含んだQRコードを生成します。これは一般的に本などにつけられているQRコードになります。

qrcode_barcode.py
import pyqrcode

b = pyqrcode.QRCode('https://www.youtube.com/channel/UCDYbu9aViDvkubFcwgbbKDA',error='M')

b.png('test2.png',scale=6)

これを実行すると以下のようなQRコードが生成されます。
test2.png

このQRコードたちの色を変えたり大きさを変えたりすることもできるので気になる方はぜひYoutubeをご覧ください。

2.バーコードの生成

次にバーコードを生成します。Pythonで使えるバーコードのタイプは今回使っているやつの他にも色々あります。気になる方は調べでみてください。

qrcode_barcode.py
import barcode
from barcode.writer import ImageWriter

d = '938469387183' 

a = barcode.get_barcode_class('ean13') 
b = a(d,writer=ImageWriter()) 
c = b.save('barcode') 

これを実行すると以下のようなバーコードが生成されます。バーコードには文字を含ませることもできます。
barcode.png

3.QRコードとバーコードの読み取り

ここではQRコードとバーコードの読み取りを行います。どちらも読み取る方法は同じです。

qrcode_barcode.py
from pyzbar.pyzbar import decode 
from PIL import Image

d = decode(Image.open('qrcode.png'))
print(d[0].data.decode("utf-8"))
#e = decode(Image.open('barcode.png'))
#print(e[0].data.decode('utf-8'))

4.OpenCVを使った読み取り

ここではOpenCVを使ってQRコードまたはバーコードを検知したら画面の上にその情報を表示させます。

qrcode_barcode.py
from pyzbar.pyzbar import decode
import cv2

cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SIMPLEX
while cap.isOpened():
    ret,frame = cap.read()
    if ret == True:
        d = decode(frame)
        if d:
            frame = cv2.putText(frame,d[0].data.decode('utf-8'),(10,50),font,1,(0,255,255),2,cv2.LINE_AA)
        cv2.imshow('frame',frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()

これを実行するとカメラが読み取ったバーコードなどの情報が画面の上に表示されます。ですが、この方法はあまりカッコよくないので次にもっとカッコいい方法を紹介します。

5.OpenCVを使った読み取り(カッコいい)

これはバーコードなどを検知したらそれを赤い四角で囲みその上にその情報を表示します。

qrcode_barcode.py
from pyzbar.pyzbar import decode
import cv2

cap = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SIMPLEX
while cap.isOpened():
    ret,frame = cap.read()
    if ret == True:
        d = decode(frame)
        if d:
            for barcode in d:
                x,y,w,h = barcode.rect
                cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),2)
                barcodeData = barcode.data.decode('utf-8')
                frame = cv2.putText(frame,barcodeData,(x,y-10),font,.5,(0,0,255),2,cv2.LINE_AA)
        cv2.imshow('frame',frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()

これは自分で作ったバーコードやQRコードは読み取れたのですが、本などについているやつは読み取れませんでした。

最後に

この簡易的な監視カメラの作り方はYoutubeでも解説しているのでそちらも良かったらご覧ください。質問等がございましたらその動画のコメント欄もしくは、この記事のコメント欄でどうぞ。また、いいなと思ったらチャンネル登録お願いします。

igor-bond16
主にPythonを使って電子工作、機械学習、webアプリ作成、GUI、ゲームなどを作ってYoutubeで発信してます。ブログもやってます。
https://www.youtube.com/channel/UCDYbu9aViDvkubFcwgbbKDA
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした