janken_class = ['グー', 'パー', 'チー', 'つまみ'] if len(sys.argv) == 2: # 学習済ファイルの確認 savefile = sys.argv[1] try: clf = joblib.load(savefile) except IOError: print('学習済ファイル{0}を開けません'.format(savefile)) sys.exit() else: print('使用法: python webcam_recognition.py 学習済ファイル.pkl') print("学習済みファイルを入力してください") sys.exit() print('認識を開始します') i = 0 while i < 10: start = time.time() hand = w_b.white_black() # 二値化画像を得る #cv2.imshow('hand', hand)# 得られた二値化画像を画面に表示 # 最大の白領域からscikit-learnに入力するためのベクトルを取得 hand_vector = getvc.getImageVector(hand, sw, sh) result = clf.predict(hand_vector) # 学習済のニューラルネットワークから分類結果を取得 print(janken_class[result[0]]) # 分類結果を表示 end = time.time() rec_time = stopWatch.stime(start, end) print("elapsed_time:{0}".format(rec_time) + "[sec]") i += 1 cv2.destroyAllWindows()
# 学習データの格納 for flip in [0, 1]: # 左右反転なし(0)とあり(1) if flip == 1: img = cv2.flip(img, 1) for angle in [ -80, -70, -60, -50, -40, -30, -20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80 ]: #角度 # 回転行列準備 rot_mat = cv2.getRotationMatrix2D((cx, cy), angle, 1.0) # 画像の回転 img_rot = cv2.warpAffine(img, rot_mat, (lx, ly), flags=cv2.INTER_CUBIC) # 回転された画像から、学習用ベクトルの取得 img_vector = getvc.getImageVector(img_rot, sw, sh) # 学習用データの格納 X = np.append(X, img_vector, axis=0) y = np.append(y, hand_class) # ニューラルネットワークによる画像の学習 clf = MLPClassifier(hidden_layer_sizes=(100, ), max_iter=500, tol=0.0001, random_state=None) print('学習中…') clf.fit(X, y) # 学習結果のファイルへの書き出し joblib.dump(clf, savefile) print('学習結果はファイル {0} に保存されました'.format(savefile))
print('使用法: python webcam_recognition.py 学習済ファイル.pkl') print("学習済みファイルを入力してください") sys.exit() print('認識を開始します') i = 0 form = 'good' yes = 0 no = 0 start = time.time() while i < 100: hand = w_b.path_white_black("save_testimages5/%s/img_test%s%03d.png" % (form, form, i), form) # 二値化画像を得る cv2.imshow('hand', hand) # 得られた二値化画像を画面に表示 # 最大の白領域からscikit-learnに入力するためのベクトルを取得 hand_vector = getvc.getImageVector(hand, sw, sh) #画像を認識しやすいように加工 result = clf.predict(hand_vector) # 学習済のニューラルネットワークから分類結果を取得 print(janken_class[result[0]]) # 分類結果を表示 if janken_class[result[0]] == "グッド": yes += 1 else: no += 1 i += 1 end = time.time() test_time = stopWatch.stime(start, end) print("{}[sec]".format(test_time)) print('end') print("テスト回数:{}".format(i)) print("正解数:{} 間違い数:{}".format(yes, no))