質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2759閲覧

opencvでのカメラの映像に画像認識の結果表示

huton

総合スコア30

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/12 14:36

質問内容

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

r = round(result[0,ch[i]], 2)はたとえばi=0だとr = round(result[0,'a'], 2)と同じとなります。
配列位置の指定には文字ではだめなので提示エラーが発生します。
r = round(result[0,i], 2)ではないでしょうか。

投稿2020/07/12 15:09

can110

総合スコア38256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

huton

2020/07/13 00:02

1:[a, 0.0] のように表示できましたありがとうございます。 質問に答えて頂いたのに厚かましくて申し訳ないのですが、 [,]内の左側側が何をしても0.0のままなのですが心当たりはありますか?
can110

2020/07/13 00:07

ちょっと分かりませんが、まずはresultに意図した値が入っているか確認されるとよいかと思います。
huton

2020/07/13 00:30

ありがとうございます。 確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問