質問内容
a~zのうちjとz以外の24個のアルファベットの手話のデータを学習させた学習済みモデルとopencvを使ってカメラの映像で画像認識を行いたいと考えています。
この結果を[MNIST学習済みモデルとOpenCVを使ってリアルタイムに手書き数字を認識させる]の実行結果の左上の表示と同じようにしたいと考えています。例としては以下のようなものです。
1:[a, 1.0]
2:[o, 0.0]
3:[c, 0.0]
しかしどのようにすれば数字の部分をアルファベットにできるのかがよくわかりません。
このサイトを参考に自分なりにやってみたのですがうまくいく気がしません。
どのようにすればうまく表示できるのでしょうか?
ソースコード
エラーの発生したソースコード(kamera.py)
エラーの発生した行の先頭に(*)を書いておきました。
python
1from keras.models import load_model 2import numpy as np 3import cv2 4 5# カメラから画像を取得して,リアルタイムに手書き数字を判別させる。 6# 動画表示 7cap = cv2.VideoCapture(0) 8 9model = load_model("sign.h5") # 学習済みモデルをロード 10 11# 無限ループ 12while(True): 13 14 # 判定用データの初期化 15 Xt = [] 16 Yt = [] 17 18 ret, frame = cap.read() 19 20 # 画像のサイズを取得,表示。グレースケールの場合,shape[:2] 21 h, w, _ = frame.shape[:3] 22 23 # 画像の中心点を計算 24 w_center = w//2 25 h_center = h//2 26 27 # 画像の真ん中に142×142サイズの四角を描く 28 cv2.rectangle(frame, (w_center-71, h_center-71), (w_center+71, h_center+71),(255, 0, 0)) 29 30 # カメラ画像の整形 31 im = frame[h_center-70:h_center+70, w_center-70:w_center+70] # トリミング 32 im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) # グレースケールに変換 33 _, th = cv2.threshold(im, 0, 255, cv2.THRESH_OTSU) # 2値化 34 th = cv2.bitwise_not(th) # 白黒反転 35 th = cv2.GaussianBlur(th,(9,9), 0) # ガウスブラーをかけて補間 36 th = cv2.resize(th,(28, 28), cv2.INTER_CUBIC) # 訓練データと同じサイズに整形 37 th = th.reshape(28,28,1) 38 39 Xt.append(th) 40 Xt = np.array(Xt)/255 41 42 result = model.predict(Xt, batch_size=1) # 判定,ソート 43 44 ch = ['a','b','c','d','e','f','g','h','i','k','l','m', 45 'n','o','p','q','r','s','t','u','v','w','x','y'] 46 47 for i in range(len(ch)): 48(*) r = round(result[0,ch[i]], 2) 49 Yt.append([ch[i], r]) 50 Yt = sorted(Yt, key=lambda x:(x[1])) 51 52 # 判定結果を上位3番目まで表示させる 53 cv2.putText(frame, "1:"+str(Yt[9]), (10,80), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 1, cv2.LINE_AA) 54 cv2.putText(frame, "2:"+str(Yt[8]), (10,110), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 1, cv2.LINE_AA) 55 cv2.putText(frame, "3:"+str(Yt[7]), (10,140), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 1, cv2.LINE_AA) 56 57 cv2.imshow("frame",frame) # カメラ画像を表示 58 59 k = cv2.waitKey(1) & 0xFF # キーが押下されるのを待つ。1秒置き。64ビットマシンの場合,& 0xFFが必要 60 prop_val = cv2.getWindowProperty("frame", cv2.WND_PROP_ASPECT_RATIO) # アスペクト比を取得 61 62 if k == ord("q") or (prop_val < 0): # 終了処理 63 break 64 65cap.release() # カメラを解放 66cv2.destroyAllWindows() # ウィンドウを消す
エラーメッセージ
python
1Traceback (moset recent call last): 2 File "kamera.py", line 48, in <module> 3 r = round(result[0,ch[i]],2) 4IndexError: only integers, slices (':'), ellipsis ('...'), numpy.newaxis ('None') and integer or boolean arrays are valid indices
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/13 00:02
2020/07/13 00:07
2020/07/13 00:30