前提・実現したいこと
webカメラ内の数字を認識したいです。
発生している問題・エラーメッセージ
python
1TypeError: incompatible array types are mixed in the forward input (SoftmaxCrossEntropy). 2Actual: <class '__main__.MyMLP'>, <class 'numpy.ndarray'>
下記ソースコードを実行し、Eキーを押すとこのようなエラーメッセージが出ます。
どうすればエラーを解決できるでしょうか。
該当のソースコード
python
1import cv2 2import numpy as np 3from chainer import Chain, serializers 4import chainer.functions as F 5import chainer.links as L 6 7# 多層パーセプトロンモデルの設定 8class MyMLP(Chain): 9 # 入力784、中間層500、出力10次元 10 def __init__(self, n_in=784, n_units=500, n_out=10): 11 super(MyMLP, self).__init__( 12 l1=L.Linear(n_in, n_units), 13 l2=L.Linear(n_units, n_units), 14 l3=L.Linear(n_units, n_out), 15 ) 16 # ニューラルネットの構造 17 def __call__(self, x): 18 h1 = F.relu(self.l1(x)) 19 h2 = F.relu(self.l2(h1)) 20 y = self.l3(h2) 21 return y 22 23def preprocessing(img): 24 img = img[190:290,270:370] 25 img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 26 img = cv2.GaussianBlur(img, (3, 3), 0) 27 img = cv2.resize(img, (28, 28)) 28 res, img = cv2.threshold(img, 70 , 255, cv2.THRESH_BINARY) 29 img = 255 - img 30 img = img.astype(np.float32) 31 cv2.imwrite("img.jpg",img) 32 img /= 255 33 img = np.array(img).reshape(1,784) 34 return img 35 36def main(): 37 # 学習済みモデルの読み込み 38 net = L.Classifier(MyMLP) 39 serializers.load_npz('test.model', net) 40 #Webカメラの映像表示 41 capture = cv2.VideoCapture(0) 42 if capture.isOpened() is False: 43 raise("IO Error") 44 while True: 45 #Webカメラの映像とりこみ 46 ret, image = capture.read() 47 if ret == False: 48 continue 49 #Webカメラの映像表示 50 cv2.rectangle(image,(270,190),(370,290),(0,0,255),3) 51 cv2.imshow("Capture", image) 52 k = cv2.waitKey(10) 53 #Eキーで処理実行 54 if k == 101: 55 img = preprocessing(image) 56 num = net(img) 57 #cv2.imwrite("img.jpg",img) 58 print(num.data) 59 print(np.argmax(num.data)) 60 #ESCキーでキャプチャー画面を閉じる 61 if k == 27: 62 break 63 cv2.destroyAllWindows() 64 65 66if __name__ == '__main__': 67 main()
補足情報(FW/ツールのバージョンなど)
環境
・Anaconda3
・OS:Windows10
・Mnistモデルは↓リンクのtrain.pyを実行して作ったものです。
リンク内容
どなたかわかる方いらっしゃれば
ご教授していただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。