ct = int(sys.argv[2]) maxCt = int(sys.argv[3])+1 print('Hit Space to Capture Image')
whileTrue: ret, frame = cap.read() cv2.imshow('Get Data : '+label,frame[50:350,100:450]) if cv2.waitKey(1) & 0xFF == ord(' '): cv2.imwrite(SAVE_PATH+'\\'+label+'{}.jpg'.format(ct),frame[50:350,100:450]) print(SAVE_PATH+'\\'+label+'{}.jpg Captured'.format(ct)) ct+=1 if ct >= maxCt: break
cap.release() cv2.destroyAllWindows()
我使用了Python的OpenCV库进行所有与相机相关的操作,所以这里的label指的是图像属于哪个类,根据标签,图像保存在适当的目录中。ct和maxCt是用来保存图像的起始索引和最终索引,剩下的是标准的OpenCV代码,用于获取网络摄像头源并将图像保存到目录中。需要注意的一点是,我所有的图片维数都是300 x 300的。运行此目录树后,我的目录树如下所示。
DATA_PATH = sys.argv[1] # Path to folder containing data
shape_to_label = {'rock':np.array([1.,0.,0.,0.]),'paper':np.array([0.,1.,0.,0.]),'scissor':np.array([0.,0.,1.,0.]),'ok':np.array([0.,0.,0.,1.])} arr_to_shape = {np.argmax(shape_to_label[x]):x for x in shape_to_label.keys()}
imgData = list() labels = list()
for dr in os.listdir(DATA_PATH): if dr notin ['rock','paper','scissor']: continue print(dr) lb = shape_to_label[dr] i = 0 for pic in os.listdir(os.path.join(DATA_PATH,dr)): path = os.path.join(DATA_PATH,dr+'/'+pic) img = cv2.imread(path) imgData.append([img,lb]) imgData.append([cv2.flip(img, 1),lb]) #horizontally flipped image imgData.append([cv2.resize(img[50:250,50:250],(300,300)),lb]) # zoom : crop in and resize i+=3 print(i)
with open('model.json', 'r') as f: loaded_model_json = f.read() loaded_model = model_from_json(loaded_model_json) loaded_model.load_weights('modelweights.h5') print('Loaded model from disk')
for rounds in range(NUM_ROUNDS): pred = '' for i in range(90): ret,frame = cap.read()
# Countdown if i//20 < 3 : frame = cv2.putText(frame,str(i//20+1),(320,100),cv2.FONT_HERSHEY_SIMPLEX,3,(250,250,0),2,cv2.LINE_AA)
# Prediction elif i/20 < 3.5: pred = arr_to_shape[np.argmax(loaded_model.predict(prepImg(frame[50:350,100:400])))]
我们已经成功地实现并学习了这个项目的工作原理,所以请继续使用我的实现进行其它实验学习。我做的一个主要的改进可能是增加了手部检测,所以我们不需要显式地绘制目标区域,模型将首先检测手部位置,然后进行预测。我鼓励你改进这个项目,并给我你的建议。精益求精!原文链接:https:///building-a-rock-paper-scissors-ai-using-tensorflow-and-opencv-d5fc44fc8222 ☆ END ☆