FastAPI(CNN 모델)와 Django(웹 구현)연동 - 다중 이미지 input

2023. 4. 5. 21:52·Develop/FastAPI
728x90
SMALL

Django에서 웹을 만들고 FastAPI에서 딥러닝 모델을 돌리기 위해서 서버를 분리했다.

Django에서 FastAPI API를 연결해서 데이터를 주고 받았고, 이미지를 다중으로 받아야 했기 때문에 리스트 형태로 받았다.

 

1) FastAPI 함수 구성

@app.post('/cnn_model')
async def cnn_model(uploaded_files: List[UploadFile] = File(...)) -> JSONResponse:
    # 결과와 이미지를 딕셔너리에 담아 리스트에 추가
    image_with_results = []
    # 업로드된 파일의 객체를 바이너리로 이미지 데이터를 읽는다.
    for uploaded_file in uploaded_files:
        content = await uploaded_file.read()

    	# 바이너리 데이터를 이미지로 디코딩를 한다.
        decode_img = cv2.imdecode(np.frombuffer(content, np.uint8), cv2.IMREAD_COLOR)
        
        
        # 이후에는 본인이 구현해놓은 모델에 맞게 돌린다.
        """
        모델
        """
        
        
    return JSONResponse(content=image_with_results)

FastAPI에서 이미지 파일은 UploadFile = File(...) 형태로 받고 Json형태로 받을 것이기 때문에 JSONResponse를 넣었다.

 

2) Django 함수 구성

def service(request):
    if request.method == "POST":
        if 'user_food' in request.FILES:
            # 전송할 데이터 설정 (multipart/form-data 형태)
            # html에서 form태그에 enctype="multipart/form-data" 옵션이 있어야 한다.
            user_foods = request.FILES.getlist('user_food')

            file_bytes_list = []
            for user_food in user_foods:
                file_bytes = user_food.read()  # 파일 내용을 바이너리로 읽어옴
                file_bytes_list.append(file_bytes)  # 바이너리를 바이트 리스트에 추가함
                
            # FastAPI 서버 URL 설정
            url = 'http://127.0.0.1:10000/cnn_model'
            uploaded_files = [('uploaded_files', file_bytes) for file_bytes in file_bytes_list]
            response = requests.post(url, files=uploaded_files)

            if response.status_code == 200:
                # FastAPI에서 반환한 JSON을변수에 저장
                image_with_results = response.json()

POST로 값을 주고 받고 FastAPI의 데이터 유효성 검사에 맞게 형태를 맞춰서 이미지 데이터를 전달했다.

이때 장고에서 ('uploaded_files', file_bytes)의 키 값과 FastAPI에서 async def cnn_model(uploaded_files ......)의

키 값이 일치 해야한다. 그래야 데이터를 주고 받을 수가 있다.

 

이후에 image_with_results 변수로 이미지 데이터를 다루면 된다.

728x90
SMALL
저작자표시 비영리 변경금지

'Develop > FastAPI' 카테고리의 다른 글

FastAPI 프로젝트 마무리(Render, Elephantsql, 배포하기) - 97  (0) 2023.02.02
FastAPI 프로젝트 git 올리기(git 명령어) - 96  (0) 2023.02.01
FastAPI 프로젝트 진행(비밀번호 변경, 라우터 추가) - 95  (0) 2023.01.31
FastAPI 프로젝트 진행(코드 정리) - 94  (0) 2023.01.29
FastAPI 프로젝트 진행(회원가입 기능 구현) - 93  (0) 2023.01.29
'Develop/FastAPI' 카테고리의 다른 글
  • FastAPI 프로젝트 마무리(Render, Elephantsql, 배포하기) - 97
  • FastAPI 프로젝트 git 올리기(git 명령어) - 96
  • FastAPI 프로젝트 진행(비밀번호 변경, 라우터 추가) - 95
  • FastAPI 프로젝트 진행(코드 정리) - 94
동석해요
동석해요
공부하고 싶은게 많은, 사소한 IT 지식들 공유
    250x250
  • 동석해요
    개발로 자기계발
    동석해요
  • 전체
    오늘
    어제
    • 분류 전체보기 (226)
      • Develop (126)
        • 기초지식 (12)
        • FastAPI (102)
        • Django (11)
      • Database & Data (62)
        • 기초지식 (16)
        • MySQL (29)
        • PostgreSQL (8)
        • 데이터 분석 (9)
      • 인공지능 (11)
        • PyTorch (9)
      • Cloud (8)
        • AWS (4)
        • GCP (2)
      • 버그처리 (14)
      • 회고 & 일상 (5)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
동석해요
FastAPI(CNN 모델)와 Django(웹 구현)연동 - 다중 이미지 input
상단으로

티스토리툴바