FastAPI에서 사물 감지 기능 구현하기

이번 글에서는 FastAPI를 사용하여 사물 감지 기능을 구현하는 방법에 대해 알아보겠습니다. 사물 감지는 컴퓨터 비전 분야에서 매우 중요한 기술로, 주어진 이미지나 비디오에서 특정 객체를 식별하고 위치를 찾는 작업입니다. Python의 FastAPI는 간단하게 RESTful API를 만들 수 있어, 사물 감지 모델을 쉽게 구현하고 배포할 수 있습니다.

필요한 패키지 설치

먼저, 필요한 패키지를 설치해야 합니다. 이를 위해 터미널에서 다음 명령어를 실행합니다.

$ pip install fastapi opencv-python-headless uvicorn

사물 감지 모델 준비

사물 감지 모델은 이미 학습된 모델을 사용할 수도 있고, 직접 학습시켜야 할 수도 있습니다. 여기서는 간단한 예제를 들기 위해 이미 학습된 모델을 사용하겠습니다.

FastAPI 앱 구현

사물 감지 기능을 가진 FastAPI 앱을 구현해보겠습니다. 프로젝트 디렉토리 내에 main.py 파일을 생성하고 다음 코드를 추가합니다.

import cv2
from fastapi import FastAPI, UploadFile, File

app = FastAPI()

@app.post("/detect_objects")
async def detect_objects(image: UploadFile = File(...)):
    image_bytes = await image.read()
    nparr = np.frombuffer(image_bytes, np.uint8)
    img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

    # 사물 감지 모델 적용 코드 추가

    return {"message": "사물 감지 완료"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

이 코드는 /detect_objects 엔드포인트로 POST 요청을 받아들이는 FastAPI 앱입니다. 업로드된 이미지를 받고, 해당 이미지에서 사물 감지를 수행합니다. 사물 감지를 수행하는 부분은 해당 모델에 맞는 코드로 대체되어야 합니다.

앱 실행

터미널에서 다음 명령어를 실행하여 FastAPI 앱을 실행합니다.

$ uvicorn main:app --reload

앱이 성공적으로 실행되면 다음과 같은 로그가 출력됩니다.

INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

FastAPI 앱은 http://localhost:8000 에서 접속할 수 있습니다.

요청 테스트

API를 테스트하기 위해 cURL을 사용하거나, Postman과 같은 API 테스트 도구를 사용할 수 있습니다. 다음은 cURL을 사용하여 /detect_objects 엔드포인트에 이미지를 업로드하는 예시입니다.

$ curl -X POST -F "image=@test.jpg" http://localhost:8000/detect_objects

여기서 test.jpg는 테스트용 이미지 파일입니다. 업로드된 이미지로부터 사물 감지 결과를 받을 수 있습니다.

위에서 설명한 방법을 참고하여 FastAPI에서 사물 감지 기능을 구현해 보세요!

#FastAPI #사물감지