모델을 불러와서 예측하는 코드를 다른 파일로 분리시켰다.
predict_food.py
from tensorflow import keras
from tensorflow.keras.preprocessing import image
from tensorflow.keras.optimizers import *
import tensorflow.keras.applications.resnet50 as resnet50
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
def predict_food(fname):
img = image.load_img(fname, target_size=(224, 224))
x = image.img_to_array(img)
import numpy as np
img = np.expand_dims(x, axis=0)
img = resnet50.preprocess_input(img)
model = keras.models.load_model("my_model_2.h5")
optimizer = Adam(lr=0.00001)
model.compile(loss='categorical_crossentropy',
optimizer=optimizer,
metrics=['accuracy'])
class_names = ['Chinese', 'Japanese', 'Korean']
classes = np.argmax(model.predict(img), axis=-1)
result = [class_names[i] for i in classes]
print(result)
return result[0]
if __name__ == '__main__':
file_name = 'test_image3.jpg'
results = predict_food(file_name)
print(results)
실행 결과:
upload.py
from flask import Flask, render_template, request
from predict_food2 import predict_food
app = Flask(__name__)
@app.route('/upload')
def basic():
return render_template("upload.html")
@app.route('/predict', methods=['POST'])
def predict():
f = request.files['file']
# Path = "./"
# f.save(Path+f.filename)
result = predict_food(f.filename)
# formatting the results as a JSON-serializable structure:
output = {'result': [result]}
return output
# def post():
# value = request.form['input']
# return render_template('default.html', name=value)
if __name__ == '__main__':
app.run(debug=True)
flask구동 후 실행 결과: