我有一个面部识别模型,当将图像传递给它时,无论是作为单独的文件还是摄像头,它都可以正常工作。但是,我将其移至基于浏览器的应用程序,并将网络摄像头图像发送至服务器,这是运行Flask的python代码。
我测试了一下图像是否得到正确处理,然后在其上运行cv2.imread()
,效果很好。但是当我通过该图像进行模型预测时,出现了以下错误:
ValueError(“张量%s不是此图的元素。”%obj) ValueError:张量Tensor(“ dense_4 / Softmax:0”,shape =(?, 7), dtype = float32)不是该图的元素。
否则不会发生这种情况,即当我以纯Python代码(从终端而不是作为浏览器应用程序)运行代码时。这是代码:
@app.route('/image',methods=['POST'])
def image():
json_file = open(f'{model_path}/fer.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
loaded_model.load_weights(f"{model_path}/fer.h5")
i=request.files['image']
f = ('%s.jpeg' % time.strftime("%Y%m%d-%H%M%S"))
i.save('%s/%s' % (path, f))
full_size_image = cv2.imread(f"{path}/{f}")
try:
gray=cv2.cvtColor(full_size_image,cv2.COLOR_RGB2GRAY)
except Exception as e:
gray = full_size_image
face = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")
faces = face.detectMultiScale(gray, 1.3 , 10)
artist,track=None,None
for (x, y, w, h) in faces:
print("face detected")
roi_gray = gray[y:y + h, x:x + w]
cropped_img = np.expand_dims(np.expand_dims(cv2.resize(roi_gray, (48, 48)), -1), 0)
cv2.normalize(cropped_img, cropped_img, alpha=0, beta=1, norm_type=cv2.NORM_L2, dtype=cv2.CV_32F)
yhat= loaded_model.predict(cropped_img) #THIS IS WHERE THE ERROR OCCURS
break
return Response("%s saved"%f)
在上面代码中发生错误的行旁边,我已添加了注释。
该功能完全没有更改,只有@app.route
部分是新的
如何解决此错误?