Keras模型调用实时视频帧推理时输入形状不兼容报错如何解决
报错原因
你的模型输入要求的是带批次维度的4维张量,形状为(批次大小, 图片高度, 图片宽度, 通道数),也就是你定义的(None, 180, 180, 3),其中第一个None代表批次维度可以是任意大小。
而你从视频流读取处理后的单张帧形状为(180, 180, 3),缺少了第一个批次维度,模型传入时会自动把第一维的180识别为批次大小,导致输入形状变为(None, 180, 3),和要求的形状不匹配。
修复方案
你只需要给处理后的帧添加一个批次维度即可,修改预测前的代码:
vid = cv2.VideoCapture(0) while(True): ret, frame = vid.read() # 可选:OpenCV默认读取的是BGR通道,如果你的模型是用RGB数据训练的,需要先转通道保证预测准确率 frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) frame= cv2.resize(frame, (180,180)) frame = np.asarray(frame) frame = frame.astype('float32') frame /= 255.0 # 新增:添加批次维度,把形状从(180,180,3)转为(1,180,180,3) frame = np.expand_dims(frame, axis=0) print(frame.shape) new_model.predict(frame)
也可以用reshape实现同样的效果:
frame = frame.reshape(1, 180, 180, 3)
内容的提问来源于stack exchange,提问作者user17020095
相关产品推荐
相关产品推荐

