OCR 정답셋 구축 워크플로우
이 프로젝트는 다양한 OCR 모델의 결과물을 효율적으로 비교하고 수정하여, 고품질의 정답셋(Ground Truth) 데이터셋을 구축하기 위한 워크플로우와 도구를 제공합니다.
✨ 주요 기능
OCR 실행 스크립트
- 일괄 처리: 디렉토리 내의 모든 문서(이미지, PDF)에 대해 OCR 작업을 한 번에 수행합니다.
- 다중 모델 지원:
upstage,pp-ocr,pp-structure등 여러 OCR 엔진을 선택하여 사용할 수 있습니다. - 유연한 실행 방식: 여러 파일을 동시에 처리하는 병렬 모드와 API 요청 제한(RPS)에 대응하기 위한 순차 모드를 모두 지원합니다.
- 안정적인 실행: API 요청 실패 시 자동으로 재시도하는 로직이 포함되어 안정성을 높였습니다.
정답셋 검수 웹앱 (Streamlit)
- 3-Way 비교 뷰: 원본 문서, AI 모델 결과, 정답셋 편집기를 한 화면에서 직관적으로 비교하며 작업할 수 있습니다.
- 세션 기반 협업: 생성된 고유 URL을 공유하여 여러 작업자가 동일한 환경에서 협업할 수 있습니다.
- 작업 상태 추적: 완료된 파일은 목록에
✅아이콘으로 표시되어 작업 현황을 쉽게 파악하고 중복 작업을 방지합니다. - 결과물 간편 다운로드: 작업이 완료된 모든 정답셋을
.zip파일 하나로 간편하게 내려받을 수 있습니다.
🗂️ 권장 디렉토리 구조
ocr_macro/
├── source_documents/ # 원본 이미지/PDF 파일
├── results/
│ ├── pp-ocr/ # pp-ocr 결과 JSON 파일
│ └── upstage/ # upstage 결과 JSON 파일
├── workspace/
│ ├── app.py # 정답셋 검수 웹앱
│ ├── run_ocr3.py # OCR 자동화 스크립트 (최신 버전)
│ ├── shared_sessions/ # 웹앱 작업 세션 데이터 (자동 생성)
│ └── ...
├── docker-compose.yml
├── requirements.txt
└── README.md # 현재 파일
🚀 시작하기
1. 사전 준비
- Python (3.8 이상 권장)
- Docker 및 Docker Compose
2. 의존성 설치
프로젝트 루트 디렉토리에서 아래 명령어를 실행하여 필요한 Python 라이브러리를 설치합니다.
🛠️ 사용 방법
1단계: OCR 실행 스크립트로 결과 추출하기
workspace/run_ocr3.py 스크립트를 사용하여 원본 문서에서
텍스트를 추출합니다. 이 스크립트는 비동기 API를 호출하고 결과를 JSON
파일로 저장합니다.
사용 예시
예시 1: Upstage 모델로 병렬 처리 (기본)
- 4개의 워커(worker)를 사용해 동시에 처리합니다.
예시 2: pp-ocr 모델 및 워커 수 지정
- 8개의 워커를 사용해 동시에 처리합니다.
예시 3: 순차 처리 (API 요청 제한 대응)
- 각 파일 처리 요청 사이에 3초의 간격을 둡니다.
참고:
run_ocr1.py,run_ocr2.py는 이전 버전 또는 다른 API를 위한 스크립트입니다. 특별한 경우가 아니라면 가장 기능이 안정적인run_ocr3.py사용을 권장합니다.
2단계: 정답셋 검수 웹앱 사용하기
OCR 결과 생성이 완료되면, app.py 웹앱을 사용하여 결과를
비교하고 수정하며 최종 정답셋을 만듭니다.
1. 웹앱 실행
프로젝트 루트 디렉토리에서 Docker Compose를 사용하여 웹앱을 실행합니다.
2. 웹 브라우저 접속
터미널에 표시된 주소(예: http://localhost:8501)로
접속합니다.
3. 작업 흐름
- 파일 업로드: 사이드바에서 원본 문서와 1단계에서 생성된 OCR 결과 JSON 파일들을 업로드합니다.
- 세션 생성: ‘업로드 및 세션 생성’ 버튼을 누르면 작업 가능한 고유 URL이 생성됩니다.
- 검수 및 수정:
- 왼쪽 파일 목록에서 작업할 파일을 선택합니다.
- 오른쪽 정답셋 편집기에서 내용을 정확하게 수정합니다.
- 저장: ‘✅ 정답셋으로 저장’ 버튼을 눌러 작업을 완료합니다.
- 다운로드: 모든 작업이 끝나면 사이드바 하단의
‘정답셋 다운로드’ 버튼을 눌러 결과물 전체를
.zip파일로 내려받습니다.
📚 상세 문서
Description
Languages
Python
100%