H5 (1)
[FLASK] 저장해둔 h5모델 불러오기
  • 9,600여장을 50epochs 만큼 4categorical 학습 모델을 h5에 저장해둔 것을 사용했습니다. 우리멍청이 
  • keras background는 tensorflow로 설정돼있습니다.

  import lib


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import io                                                         # 파일 경로 접근시 필요한 python 내장 라이브러리
from PIL import Image                                            # Python Imaging Library. 파이썬 인터프리터에 다양한 이미지 파일 형식을 지원,
                                                                # 강력한 이미지처리와 그래픽 기능 제공 오픈소스 라이브러리
import numpy as np
from flask import Flask                                            # python web framework 
from flask import request                                        # 웹 요청 관련 모듈
from flask import render_template, redirect, url_for, request    # flask에서 필요한 모듈
from flask import jsonify                                        # import JSON을 해도되지만 여기서는 flask 내부에서 지원하는 jsonify를 사용
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator
from keras.utils import Sequence                                # 이 모듈이 없으면 사용자가 만든 generator에서 'shape'가 없다고 하는 에러가 발생할 수 있음
import matplotlib.pyplot as plt
 
cs


  • 짜깁기하면서 중복되거나 필요없으리라 생각되는 패키지들은 삭제했으나 더 추릴수 있으면 추려쓰시길 바랍니다.

  Flask 객체


18
app = Flask(__name__)
cs
  • flask 사용할때는 무조건 이 객체를 생성해줘야 합니다. 이름도 웬만하면 app을 쓰는편입니다.

  Flask router 설정


19
20
21
22
23
24
25
26
27
28
29
30
31
32
@app.route("/exam"# 접속 ip혹은 도메인 뒤 붙는 라우터 이름
def predict():
    test_datagen = ImageDataGenerator(rescale=1./255)
    test_generator = test_datagen.flow_from_directory("/이미지 경로/exam",target_size=(100,100), batch_size=100, class_mode='categorical')
    new_model = keras.models.load_model('모델이름.h5')
    new_model.summary()
    loss, acc = new_model.evaluate_generator(test_generator, steps=5
    data = {"success": False} # dictionary 형태의 데이터를 만들어 놓고 (딕셔너리에 데이터 넣는 방법1 : dictionary_name = {key:value}) 
    
    data["loss_accuracy"= acc # 호출한 모델의 정확도를 넣습니다. (딕셔너리에 데이터 넣는 방법2 : dictionary_name[key] = value)
 
    data["success"= True # 같은 방식으로 가지고 있는 key의 value를 바꿀수 있습니다.
            
    return jsonify(str(acc)) # '/exam'으로 요청을 보낸곳으로 값을 반환하는데에 json형태로 만들어 보내는데 jsonify를 하려면 데이터가 str 형태여야 합니다.
cs

  • 우리가 계속 쓰고있는 h5파일에 저장돼있는 모델 불러오는 코드를 flask 라우터로 감싼 형태입니다.
  • 간단하게 URL 접근만 가능한 상태입니다. (GET방식)

  서버 실행문


34
35
36
37
38
39
if __name__ == "__main__"# terminal에서 python 인터프리터로 .py 파일을 실행하면 무조건 이 부분을 찾아 실행합니다.
                           # C의 main
    print(("* Loading Keras model and Flask starting server..."
        "please wait until server has fully started"))
    app.run(host="0.0.0.0"# app.run을 해줘야 flask 서버가 구동됩니다. 
                            # host="0.0.0.0"은 외부에서 해당 서버 ip 주소 접근이 가능하도록 하는 옵션입니다.
cs


  • host="0.0.0.0" 대신 직접적인 주소를 써줄수도 있고(대신 고정IP 설정이 돼있어야함) port='포트번호' 옵션으로 포트번호도 따로 설정 해 줄 수 있습니다.


  python 파일 실행


  • terminal에서 python 파일이름.py  커맨드로 flask 서버 소스를 실행합니다.


  • 이 메시지가 뜨면 해당 서버 ip:5000 으로 접속 할 수 있습니다. 


  외부 접속


  • 서버파일이 실행돼있는 상태에서 ip:5000(port)/exam(router) 로 접속하면 return하도록 설정해두었던 모델의 정확도를 얻을 수 있습니다.


<관련 페이지>

flask 관련 작성 포스트 - [Python3] requests로 웹서버에 데이터 전달하기


  Comments,     Trackbacks
최근 작성 글
최근 작성 댓글
최근 작성 트랙백
프로필
공지사항
글 보관함
캘린더
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
TODAY TOTAL