2025-09-09 16:23:09 +09:00
2025-08-12 12:25:56 +09:00
2025-09-09 16:23:09 +09:00
2025-08-12 10:10:59 +09:00
2025-09-09 16:23:09 +09:00
2025-08-12 12:25:56 +09:00
2025-08-12 12:22:42 +09:00
2025-08-12 10:10:59 +09:00
2025-08-12 10:10:59 +09:00
2025-08-12 10:10:59 +09:00
2025-08-12 10:27:39 +09:00
2025-09-09 16:23:09 +09:00

OCR Performance Lab

개요

이 프로젝트는 다양한 OCR(광학 문자 인식) 엔진의 성능을 비교하고 평가하기 위한 비동기 처리 API 서버입니다. FastAPI를 기반으로 구축되었으며, Celery를 사용하여 무거운 OCR 작업을 백그라운드에서 효율적으로 처리합니다. 현재 Paddle OCR과 Upstage OCR을 지원하며, 파일 업로드를 통해 OCR 작업을 요청하고 진행 상태를 추적할 수 있습니다.

주요 기능

  • 비동기 OCR 처리: Celery를 사용하여 OCR 작업을 비동기적으로 처리하므로, 대용량 파일이나 다수의 요청에도 빠른 응답 시간을 보장합니다.
  • 다중 OCR 엔진 지원: Paddle OCR, Upstage OCR 등 여러 OCR 엔진을 지원하며, 새로운 엔진을 쉽게 추가할 수 있는 구조로 설계되었습니다.
  • 실시간 진행 상태 조회: 각 OCR 작업에 대한 고유 ID를 발급하고, 이를 통해 작업의 현재 상태와 최종 결과를 언제든지 조회할 수 있습니다.
  • Docker 기반 환경: Docker Compose를 통해 API 서버, Celery 워커, Redis 등 프로젝트 실행에 필요한 모든 환경을 한 번에 구성할 수 있습니다.

기술 스택

  • API 서버: FastAPI
  • 비동기 작업 큐: Celery
  • 메시지 브로커 및 결과 백엔드: Redis
  • OCR 라이브러리: PaddleOCR, Upstage API
  • 배포: Docker, Docker Compose

프로젝트 설정

요구사항

  • Docker
  • Docker Compose

설치 및 실행

  1. 프로젝트 클론

    git clone https://github.com/your-repository/ocr_performance_lab.git
    cd ocr_performance_lab
  2. 환경 변수 설정

    프로젝트 루트 디렉터리에 .env 파일을 생성하고, Upstage API 키를 추가합니다.

    UPSTAGE_API_KEY=YOUR_UPSTAGE_API_KEY
  3. Docker 컨테이너 실행

    Docker Compose를 사용하여 프로젝트의 모든 서비스를 실행합니다.

    docker compose build ocr_perf_api
    docker compose up -d --build
    • API 서버는 http://localhost:8892에서 실행됩니다.
    • Celery 모니터링 도구인 Flower는 http://localhost:5557에서 확인할 수 있습니다.

API 엔드포인트

API 문서는 서버 실행 후 http://localhost:8892/docs에서 확인할 수 있습니다.

OCR 작업 요청

  • POST /ocr/paddle

    • 설명: Paddle OCR을 사용하여 OCR 작업을 요청합니다.
    • 요청 본문: multipart/form-data 형식의 파일 목록
    • 응답: 접수된 각 파일에 대한 작업 정보 (request_id, task_id 등)
  • POST /ocr/upstage

    • 설명: Upstage OCR API를 사용하여 OCR 작업을 요청합니다.
    • 요청 본문: multipart/form-data 형식의 파일 목록
    • 응답: 접수된 각 파일에 대한 작업 정보 (request_id, task_id 등)

OCR 진행 상태 및 결과 조회

  • GET /ocr/progress/{request_id}
    • 설명: request_id를 사용하여 OCR 작업의 진행 상태와 최종 결과를 조회합니다.
    • 경로 매개변수:
      • request_id (string): 작업 요청 시 발급된 고유 ID
    • 응답: 작업 상태, 진행 로그, 최종 OCR 결과

사용 예시

import requests

# Paddle OCR 요청
files = [('files', open('document.pdf', 'rb'))]
response = requests.post("http://localhost:8892/ocr/paddle", files=files)
print(response.json())

# Upstage OCR 요청
files = [('files', open('image.png', 'rb'))]
response = requests.post("http://localhost:8892/ocr/upstage", files=files)
print(response.json())

# 결과 조회 (위 응답에서 받은 request_id 사용)
request_id = "your_request_id"
response = requests.get(f"http://localhost:8892/ocr/progress/{request_id}")
print(response.json())
Description
No description provided
Readme MIT 80 KiB
Languages
Python 97.9%
Dockerfile 2.1%