딥러닝 모델을 뭘 고를까 고민하다가, 그냥 각 모델이 추론한 결과를 바탕으로 통계를 내자고 생각하고, 바로 서버 개발로 넘어갔습니다. 서버 개발에는 수많은 프레임워크가 있는데, python에도 Django, Flask등이 있죠. 이 프로젝트에선 Flask로 개발해볼 생각입니다.

이 프레임워크는 개발이 무척이나 빠르고 간단하다는 게 장점입니다. 예측을 위한 REST api는 다음 코드면 충분합니다.

# app.py

from flask import Flask, request, jsonify
from PIL import Image
from yolo_model.model import predict_yolo

app = Flask(__name__)

@app.route('/')
def hello():
    return 'hello'

@app.route('/predict', methods=['POST'])
def predict():
    if request.method == 'POST':
        file = request.files['file']
        img = Image.open(file.stream)
        result = predict_yolo(img)

        return jsonify(result)

우선은 yolov8 모델만 적용해보겠습니다. 서브모듈로 분리하였습니다.

# yolo_model

from ultralytics import YOLO

import os

model = YOLO('./yolo_model/trained/weights/best.pt')

def predict_yolo(image):
    results = model(image)

    probs = results[0].probs

    indices = [results[0].names[i] for i in probs.top5]
    confs = probs.top5conf

    print(indices)
    print(confs)

    return list(zip(indices, confs.tolist()))

테스트도 해볼까요.

result

가장 확률이 높은 순서대로 5개를 반환하도록 했습니다. 일단 잘 돌아가네요. 이제 다른 딥러닝 모델 추론 결과도 함께 적용할 수 있게 해야 할 겁니다. 각 모델의 정확도 향상을 위한 데이터 수집 및 학습도 계속 해야겠죠. 결정적으로 아직 이 프로그램은 제 컴퓨터에서만 돌아간다는 문제가 있습니다.

서버 배포를 하려고 AWS 같은 솔루션도 생각은 해봤는데, 무직 백수가 함부로 플랜을 선택할 수는 없을 것 같아서, 그냥 집에 굴러다니는 라즈베리파이로 서버실을 만들어야겠다! 싶습니다.

다음 포스팅부터는 본격적인 배포 과정이 시작되겠네요.

  • 라즈베리파이 세팅
  • Docker 설치
  • Flask 컨테이너 생성
  • CORS 해결 (높은 확률로 만나게 될 듯?)
  • 프론트, 앱 개발

유저 확보가 되어야 포트폴리오로써의 가치가 있을 것 같은데… 일단 계속 해봐야 알겠죠.