У меня есть модель распознавания лиц, которая прекрасно работает, когда на нее передается изображение, в виде отдельного файла или захвата с веб-камеры. Однако я переместил его в приложение для браузера basd и отправил изображение веб-камеры на сервер с кодом python, работающим Flask.
Я проверил, правильно ли обрабатывается изображение, запустил на нем cv2.imread()
, который работал нормально. Но когда я передал это изображение для прогнозирования модели, я получил эту ошибку:
ValueError ("Tensor% s не является элементом этого графа."% Obj) ValueError: Tensor Tensor ("dens_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
часть является новой
Как мне устранить эту ошибку?