
Upstage 교육에서 FastAPI를 접하였는데 요즘 백엔드씬,AI씬에서 꽤나 각광받는 web framework 이다. 백엔드에 대한 경험을 해보고 싶고 궁금했는데 FastAPI가 입문하는 계기가 되었다.
pip install python-multipart
pip install fastapi
pip install uvicorn
pip install tensorflow
1. 빠르다
Starlette 과 pydantic 라이브러리를 사용해서 속도가 빠르다. 그래서 대용량의 데이터를 다루는 ML 모델을 deploy할 때 유용하다
async / await 문으로 비동기처리(Asynchronous Processing) : 어려운 task과 쉬운 task를 분리해서 쉬운 task 먼저 실행하도록 한다
2. 쉽다
모델 불러오기 - model_loader.py
import tensorflow as tf
# 모델을 불러오기
def load_model():
model = tf.keras.applications.MobileNetV2(weights = 'imagenet')
print("Successfully loaded model")
return model
model = load_model()
다른 모델은 여기를 참고! MovileNet의 성능이 가장 우수한편
https://www.tensorflow.org/api_docs/python/tf/keras/applications
예측결과 가져오기 - predict.py
# input data 전처리
from PIL.Image import Image # pip install pillow
from model_loader import model
# 이미지 사이즈 224 * 224로 조절 => Numpy array로 변환
def predict(image:Image):
image = np.asarray(image.resize((224,224)))[...,:3] # 3가지 RGB 만 선택
image = np.expand_dims(image, 0)
image = (image / 127.5) -1 # 정규화작업 (이미지 픽셀이 0~255 => -1~1)
results= tf.keras.applications.imagenet_utils.decode_predictions(
model.predict(image) , 10
)[0] # top 10 결과에 대해 확률값만 추출
print(results)
# API 생성하는 부분 => {'key':'value','key':'value','key':'value}
result_list = []
for i in results:
result_list.append({
'class' : i[1], # class name
'confidence' : f'{i[2]*100:0.2f}%', # 정확도 %
})
return result_list
FastAPI로 model deploy하기 : main.py
from fastapi import FastAPI, UploadFile, File
app = FastAPI()
app.include_router(books_router)
from PIL import Image
from io import BytesIO
from predict import predict # predict.py
@app.post("/predict/image")
async def predict_image(file:UploadFile = File(...)):
img = Image.open(BytesIO(await file.read()))
result = predict(img)
return result
# 파이썬 동기화 문제 -> 비동기화 async await 로 해결
if __name__ == "__main__": # python main.py
import uvicorn # ASGI server execute
uvicorn.run("main:app",reload = True)
이렇게 실행하면 다음과 같이 서버주소가 나오는데

서버 주소 / docs 로 이동하면 이렇게 모델을 평가해볼 수 있는 페이지로 연결된다 원하는 이미지를 파일선택 해주면 다음과 같이 결과를 확인할 수 있다!


입력한 이미지는 이 친구였다. 너 골든리트리버 맞지...?

Fast API 맛보기로 해보았고 더 꾸며볼수도 있고 데이터베이스를 연동해서 다양한 프로젝트를 진행할 수 있다
점프투 FAST API 책을 보며 더 공부해보자 https://wikidocs.net/175214