質問内容
自作した学習済みモデルとopencvでカメラの映像を使った画像認識を行いたいと思い以下のサイト(リンク内容)を参考にやってみようとしたのですがエラーが発生してしまいました。このエラーを解決するにはどのようにすればいいのでしょうか?
ソースコード
学習済みモデル(sign.py)
保存方法に問題があるかもしれないので一応学習済みモデルのソースコードを載せます。
python
1import keras 2import pickle 3import pandas as pd 4import numpy as np 5import matplotlib.pyplot as plt 6import seaborn as sns 7from keras import models 8from keras import layers 9from keras import optimizers 10from pandas import Series,DataFrame 11from keras.utils import to_categorical 12from keras.optimizers import RMSprop 13from keras.preprocessing.image import ImageDataGenerator 14from sklearn.preprocessing import LabelBinarizer 15 16#csv読み込み 17sign_train = pd.read_csv("sign_mnist_train.csv",sep=",") 18sign_test = pd.read_csv("sign_mnist_test.csv",sep=",") 19lb=LabelBinarizer() 20 21#特訓データ 22train_data=sign_train.drop(['label'],axis=1) 23train_data = train_data.values.reshape(-1,28,28,1) 24train_data=train_data.astype('float32')/255 25 26train_label=sign_train['label'] 27train_label=lb.fit_transform(train_label) 28 29#テストデータ 30test_data=sign_test.drop(['label'],axis=1) 31test_data = test_data.values.reshape(-1,28,28,1) 32test_data=test_data.astype('float32')/255 33 34test_label=sign_test['label'] 35test_label=lb.fit_transform(test_label) 36 37#モデル 38model=models.Sequential() 39model.add(layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1))) 40model.add(layers.MaxPooling2D((2,2))) 41model.add(layers.Conv2D(64,(3,3),activation='relu')) 42model.add(layers.MaxPooling2D((2,2))) 43model.add(layers.Conv2D(64,(3,3),activation='relu')) 44 45model.add(layers.Flatten()) 46model.add(layers.Dense(64,activation='relu')) 47model.add(layers.Dropout(0.1)) 48model.add(layers.Dense(64,activation='relu')) 49model.add(layers.Dropout(0.1)) 50model.add(layers.Dense(24,activation='softmax')) 51 52#学習の取り決め 53model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['acc']) 54 55#学習 56history=model.fit(train_data,train_label,epochs=20,batch_size=200,validation_data=(test_data,test_label)) 57 58#保存 59model.save("sign.h5")
エラーの出たソースコード(kamera.py)
エラーの出た行の先頭に(*)と書いておきます。
python
1from keras.models import load_model 2import numpy as np 3import cv2 4 5# カメラから画像を取得して,リアルタイムに手書き数字を判別させる。 6# 動画表示 7cap = cv2.VideoCapture(1) 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 38 Xt.append(th) 39 Xt = np.array(Xt)/255 40 41 result = model.predict(Xt, batch_size=1) # 判定,ソート 42 for i in range(10): 43 r = round(result[0,i], 2) 44 Yt.append([i, r]) 45 Yt = sorted(Yt, key=lambda x:(x[1])) 46 47 # 判定結果を上位3番目まで表示させる 48 cv2.putText(frame, "1:"+str(Yt[9]), (10,80), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 1, cv2.LINE_AA) 49 cv2.putText(frame, "2:"+str(Yt[8]), (10,110), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 1, cv2.LINE_AA) 50 cv2.putText(frame, "3:"+str(Yt[7]), (10,140), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255,255,255), 1, cv2.LINE_AA) 51 cv2.imshow("frame",frame) # カメラ画像を表示 52 53 k = cv2.waitKey(1) & 0xFF # キーが押下されるのを待つ。1秒置き。64ビットマシンの場合,& 0xFFが必要 54 prop_val = cv2.getWindowProperty("frame", cv2.WND_PROP_ASPECT_RATIO) # アスペクト比を取得 55 56 if k == ord("q") or (prop_val < 0): # 終了処理 57 break 58 59cap.release() # カメラを解放 60cv2.destroyAllWindows() # ウィンドウを消す
エラーメッセージ
python
1Traceback (most recent call last): 2 File "kamera.py",line 21, in <module> 3 h, w, _ = frame.shape[:3] 4AttributeError: 'NoneType' object has no attribute 'shape'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/12 09:51