・"name,〇〇〇"、"price,〇〇〇"(〇〇〇には、具体的な商品名,値段が入る)という情報が入っているQRコードをパソコンのWebカメラで読み取る。"name,〇〇〇"のQRコードを読み取るとDisplayに'商品名のカードがスキャンされました'と表示される。
(price,〇〇〇の場合は、'値段のカードがスキャンされました'と表示される)。
・そして、〇〇〇(商品名,値段)の部分だけcsvファイルに保存される。
・その後、スマホをパソコンのwebカメラ(EpocCamというアプリを使用)として繋げ、写真を撮る。この写真と商品名、値段がTwitterに投稿されるプログラムとなっている。
#メインのプログラム
# モジュール:tkinter を呼び出す関数の定義部分を display1.py に移行
# モジュール display1の読み込み
import display1
import tweepy
#取得した各種APIキーを代入する
CK=""
CS=""
AT=""
AS=""
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(CK, CS)
auth.set_access_token(AT, AS)
api = tweepy.API(auth)
#繰り返しの回数
range_count = 2
#カードの最初の名前(カードを区別するため)
name_card_firstname = "name,"
price_card_firstname = "price,"
#カードの名前の長さ
n = len(name_card_firstname)
m = len(price_card_firstname)
import cv2
from pyzbar.pyzbar import decode
#どのカメラに接続するのか パソコンの前についている付属のカメラ=0 USBカメラ等は、1以降
cap = cv2.VideoCapture(0)
#for i in range(range_count) :
#カメラで取得した情報を常時解析するので繰り返し処理にする。
for i in range(range_count) :
ret, frame = cap.read()
#OpenCVライブラリを使って画像を取得
#OpenCVでグレースケール化した画像を取得
#バーコードの読み取りは、カラー画像である必要はない
img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
height = img.shape[0]
width = img.shape[1]
#画像が大きすぎると解析に失敗するので画像を半分にしている
image = cv2.resize(img , (int(width*0.5), int(height*0.5)))
#取得した画像をZbarのdecodeで適応される
data = decode(image)
#バーコードとして結果が返ってくるか判定
#読み取れているとdataの中に結果が返ってくるので条件を通る
if len(data) > 0:
# 結果が返ってきた場合
z=(data[0][0].decode('utf-8', 'ignore'))
print(z)
#入力されたカードの最初の名前によって判別(それぞれ、呼び出される関数も分別)
#入力されたカードの情報(最初の名前を省いたもの)をそれぞれ、変数(a,b)に入れる
if z [0:n] == name_card_firstname :
a=z[n:]
display1.d1()
elif z [0:m] == price_card_firstname :
b=z[m:]
display1.d2()
else :
display1.d3()
#プログラム強制終了
import sys
sys.exit()
cap.release()
#それぞれのカード情報をcsvファイルに書き出し、保存
import csv
data = open('account_books.csv','a', newline='')
x = csv.writer(data)
x = x.writerow([a,b])
data.close()
#カメラ
import datetime
picture = "photo_" + datetime.datetime.today().strftime('%Y%m%d_%H%M%S') + ".png"
# 内蔵カメラのデバイスIDは0、USBで接続したカメラは1以降。
capture = cv2.VideoCapture(1)
# 取得した画像データは変数imageに格納。retは取得成功変数。
ret, image = capture.read()
if ret == True:
# 取得した画像を出力。fileNameは出力する画像名。
cv2.imwrite(picture, image)
api.update_with_media(status="商品名:"+a+"\n値段:"+str(b)+"円", filename=picture)
#画面表示のプログラム
import tkinter
#呼び出されるとそれぞれのカード名とスキャンされたということが画面に表示される
#3秒後に閉じる
def d1() :
dis = tkinter.Tk()
dis.geometry("400x200+20+300")
label = tkinter.Label(text="商品名のカードがスキャンされました",font=(30),height=15)
label.pack()
dis.after(3000, lambda: dis.destroy())
dis.mainloop()
def d2() :
dis = tkinter.Tk()
dis.geometry("400x200+20+300")
label = tkinter.Label(text="値段のカードがスキャンされました",font=(30),height=15)
label.pack()
dis.after(3000, lambda: dis.destroy())
dis.mainloop()
def d3() :
dis = tkinter.Tk()
dis.geometry("400x200+20+300")
label = tkinter.Label(text="別のQRコードが入力されています\n初めからやり直してください",font=(30),height=15)
label.pack()
dis.after(3000, lambda: dis.destroy())
dis.mainloop()
ゼミのページへ