from flask import Flask, render_template, request
from tensorflow.keras.models import load_model
app = Flask(__name__)
# 내 이름으로 된 웹 서버 앱을 생성해요.
@app.route('/')
# 첫 페이지('/')에 접속하면 input.html을 보여주도록 설정해요.
def main():
# 실제 업로드 처리가 일어나는 주소예요.
return render_template('input.html')
# 함수가 시작돼요.
@app.route('/uploader', methods=['POST'])
# 우리가 열심히 학습시켜 저장해둔 모델 파일을 불러와요.
def upload_image():
# 사용자가 보낸 사진 데이터를 열어요.
model = load_model('c:/data/models/food_best.keras')
# 모델이 배운 크기(96x96)와 똑같이 사진을 조절해요.
img = Image.open(request.files['file'].stream)
# 픽셀 숫자를 0~1로 낮춰 계산하기 좋게 만들어요.
img = img.resize((96, 96))
# 1장임을 알리는 4차원 덩어리로 모양을 바꿔요.
arr = np.array(img) / 255
# 정답 번호와 매칭될 음식 이름 리스트예요.
arr = arr.reshape(1, 96, 96, 3)
# 모델에게 사진을 보여주고 확률을 받아와요.
menu_items = ['치킨', '돌솥비빔밥', '제육볶음', '김치', '삼겹살', '된장찌게']
# 가장 높은 확률을 가진 번호를 골라내요.
pred = model.predict(arr)
# 최종 정답 이름을 웹 화면에 글자로 출력해요.
num = np.argmax(pred, axis=1)
# 포트 8000번에서 서버를 실제로 가동해요.
return '메뉴:' + menu_items[num[0]]
if __name__ == '__main__':
app.run(port=8000, threaded=False)