Ошибка получения значения для модели keras при работе в flask - Python 3 - PullRequest
0 голосов
/ 01 мая 2020

У меня есть модель распознавания лиц, которая прекрасно работает, когда на нее передается изображение, в виде отдельного файла или захвата с веб-камеры. Однако я переместил его в приложение для браузера 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 часть является новой

Как мне устранить эту ошибку?

1 Ответ

0 голосов
/ 02 мая 2020

Я нашел исправление в этом , в котором говорится, что веб-запрос Flask создает свой собственный сеанс Tensorflow, а не сеанс по умолчанию, поэтому вам нужно заставить его использовать сеанс по умолчанию.

Однако это породило еще одну ошибку в духе «Расположение контейнера не существует». Исправление было найдено здесь , которое в сочетании с решением из первой ссылки решило мою проблему

...