#0.はじめに
今回作るものがどういう感じで動くのか見てみたい方は、こちら(youtubeの動画)でどうぞ。
まずは、今回必要なものを一度にインストールします。
pip install pyqrcode
pip install pypng
pip install python_barcode
pip install pyzbar
#1.QRコードの生成
ここではまずは文字の情報を含んだQRコードを生成します。
import pyqrcode
a = pyqrcode.create(content="Hello From Jetsonnano",error='H')
a.png(file='test.png',scale=6)
これを実行すると以下のようなQRコードが出来上がります。
次にurlの情報を含んだQRコードを生成します。これは一般的に本などにつけられているQRコードになります。
import pyqrcode
b = pyqrcode.QRCode('https://www.youtube.com/channel/UCDYbu9aViDvkubFcwgbbKDA',error='M')
b.png('test2.png',scale=6)
このQRコードたちの色を変えたり大きさを変えたりすることもできるので気になる方はぜひYoutubeをご覧ください。
#2.バーコードの生成
次にバーコードを生成します。Pythonで使えるバーコードのタイプは今回使っているやつの他にも色々あります。気になる方は調べでみてください。
import barcode
from barcode.writer import ImageWriter
d = '938469387183'
a = barcode.get_barcode_class('ean13')
b = a(d,writer=ImageWriter())
c = b.save('barcode')
これを実行すると以下のようなバーコードが生成されます。バーコードには文字を含ませることもできます。
#3.QRコードとバーコードの読み取り
ここではQRコードとバーコードの読み取りを行います。どちらも読み取る方法は同じです。
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コードまたはバーコードを検知したら画面の上にその情報を表示させます。
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を使った読み取り(カッコいい)
これはバーコードなどを検知したらそれを赤い四角で囲みその上にその情報を表示します。
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でも解説しているのでそちらも良かったらご覧ください。質問、アドバイスなどがあればぜひコメントしてください。