Я следил за обучением Deeplizard на YouTube по развертыванию нейронной сети Keras для веб-службы Flask, но застрял.
Я нашел несколько предложений по подобным проблемам, которые помогли другим (например, этот и этот ), но по какой-то причине они не работают для меня. Или, может быть, я неправильно их применяю.
Это расстроено линией image = Image.open(io.BytesIO(decoded))
.
Вот код, который у меня есть (извините, он не минимален, я не уверен, как упростить его, не опуская детали, которые могут иметь значение).
Если у вас есть предложения, пожалуйста, дайте мне знать.
Очень ценится.
app = Flask(__name__)
def get_model():
global model, graph
model = load_model('model.h5')
print(' * Model loaded!')
graph = tf.Graph()
def preprocess_image(image, target_size):
if image.mode != 'RGB':
image = image.convert('RGB')
image = image.resize(target_size)
image = img_to_array(image)
image = np.expand_dims(image, axis=0)
return image
print(' * Loading model...')
get_model()
@app.route('/predict', methods=["POST"])
def predict():
message = request.get_json(force=True)
encoded = message['image']
decoded = base64.b64decode(encoded)
with graph.as_default():
image = Image.open(io.BytesIO(decoded))
preprocessed_image = preprocess_image(image, target_size(50, 50))
prediction = model.predict(preprocessed_image).tolist()
response = {
'prediction': {
'food': prediction[0][0],
'notfood': prediction[0][1]
}
}
return jsonify(response)
Я подозреваю, что это может быть потому, что моя модель принимает входные данные как:
model.predict_classes(i.reshape((-1, 50, 50, 3)), batch_size=32, verbose=0)[0]
но изображения, загруженные пользователем через html, не меняются ... Я пытался найти это в коде, но пока не повезло.