← AI Document Processing
🔤

09 / 11

PaddleOCR 도입

PaddleOCR 도입 배경, 학습 구조, 환경 설정, 교체 전략, 배치 추론

PaddleOCRRecognitionKorean OCR
개요환경 구성OCR 파이프라인모델 학습모델 / 데이터 처리LayoutLM 분석성능 관리배포 & 운영PaddleOCR 도입BIO 라벨 & 학습 개선문제 해결

PaddleOCR 도입 배경

기존 Tesseract OCR의 한국어 인식 한계를 보완하기 위해 PaddleOCR 도입을 검토. LayoutXLM이 레이블 매핑을, PaddleOCR이 OCR을 담당하는 구조.

LayoutXLM

레이블 매핑 (문서 이해)

PaddleOCR

OCR (글자 인식)

PaddleOCR 학습 구조

PaddleOCR은 Detection과 Recognition이 분리된 구조. 테스트 결과 Detection은 이미 잘 되지만 Recognition이 문제.

Detection

글자 영역 찾기

✅ 이미 잘 됨

Recognition

글자 읽기

⚠️ 개선 필요

학습 목표: Recognition 오류 줄이기

공급받는져공급받는자
2024.0l.152024.01.15

Recognition 학습 전략

1

bbox 그대로 활용

2

→ crop 이미지 생성

3

→ 텍스트 학습

Label Studio에서 텍스트 교정

기존 Label Studio 인터페이스에는 OCR 텍스트를 수정할 수 있는 필드가 없었음. "정답 텍스트 입력용 필드"를 따로 만들어야 함.

Labeling Interface 핵심 변경

transcription→ OCR 원본 텍스트 (읽기 전용)
corrected_text→ 정답 텍스트 입력 (편집 가능)

✅ Tesseract 기반 기존 아키텍처에 적용 테스트 완료 — 텍스트 수정 필드가 정상 동작

동작 방식:

1

기존 OCR 결과 텍스트가 각 region에 표시됨

2

사용자는 그 아래 정답 텍스트 입력 칸에 올바른 텍스트를 직접 입력

3

Submit 시 OCR 원본 텍스트 + 사람이 수정한 정답 텍스트 + 필드 라벨 + bbox가 같이 저장됨

두 종류의 학습

A. LayoutLM 학습

입력: OCR 결과 텍스트 + bbox + 라벨

목적: 이 토큰이 어떤 필드인지 분류

"공급받는자"가 OCR로 잘 들어왔다고 가정하고 → 이게 어떤 엔티티(label)인지 학습

B. PaddleOCR 학습 (Recognition)

입력: crop 이미지 (bbox 영역)

목적: 이미지에서 글자를 정확히 읽기

OCR 원본 "공급받는져"는 버리고, 사람이 고친 "공급받는자"를 정답(label)으로 사용

Recognition 학습 데이터 생성

Label Studio에서 교정된 데이터를 기반으로 PaddleOCR Recognition 학습용 데이터셋을 생성. bbox 영역을 crop하여 이미지를 만들고, corrected_text를 정답(ground truth)으로 사용.

데이터 구조

images/→ bbox crop 이미지 파일들
label.txt→ 이미지 경로 + 정답 텍스트 (탭 구분)

label.txt 형식 예시

images/crop_001.jpg 공급받는자images/crop_002.jpg 2024.01.15

bbox 수정 시 학습/추론 반영

bbox는 LayoutLM과 PaddleOCR에서 서로 다른 역할을 수행. 수정 시 양쪽 모두에 영향을 미치므로 주의가 필요.

LayoutLM에서의 bbox

position embedding으로 사용

→ 토큰의 문서 내 위치 정보를 학습에 반영

PaddleOCR에서의 bbox

crop 영역으로 사용

→ 해당 영역을 잘라서 Recognition 입력으로 사용

⚠️ bbox를 수정하면 LayoutLM의 위치 임베딩과 PaddleOCR의 crop 영역이 동시에 변경됨

Tesseract → PaddleOCR 교체 전략

현재 구조는 Tesseract에 종속된 것이 아니라 OCR 출력 포맷에 종속. 출력 형식만 맞추면 교체가 가능한 구조.

교체 체크리스트

1

PaddleOCR 출력 → Tesseract 호환 포맷 변환 함수 작성

2

testOCR.py에서 Tesseract 호출부를 PaddleOCR로 교체

3

bbox 좌표계 통일 (xyxy 형식)

4

confidence score 필터링 기준 설정

5

LayoutLM 입력 형식에 맞게 변환 로직 검증

6

기존 테스트 케이스로 결과 비교

7

배치 추론 스크립트 업데이트

PaddleOCR 환경 설정

Python 3.11 가상환경 기반으로 PaddleOCR 및 관련 패키지를 설치.

핵심 패키지

Python3.11
paddlepaddle3.2.2
paddleocr3.0.1
torch2.1.0

venv 설정

python3.11 -m venv paddle_envsource paddle_env/bin/activatepip install paddlepaddle==3.2.2 paddleocr==3.0.1

PaddleOCR 결과 → LayoutLM 입력 변환

PaddleOCR 출력을 LayoutLM이 기대하는 입력 형식으로 변환하는 매핑 규칙.

필드 매핑

rec_textswords
rec_polysbbox (xyxy)
img.shapeH, W

💡 rec_polys는 4점 좌표(polygon)이므로 min/max로 xyxy 형식의 bbox로 변환 필요

testOCR.py 핵심 작업

testOCR.py는 PaddleOCR 결과를 LayoutLM에 전달하기 위한 전처리 스크립트. 4단계로 구성.

1

세로 분할 OCR

이미지를 세로로 분할하여 PaddleOCR 실행

2

score < 0.70 필터링

신뢰도 낮은 결과 제거

3

포맷 변환

PaddleOCR 출력 → LayoutLM 입력 형식 변환

4

LayoutLM 추론

변환된 데이터로 LayoutLM 모델 추론 실행

⚠️ score 0.70 미만은 노이즈로 판단하여 필터링 — 임계값은 테스트 결과에 따라 조정 가능

단계별 진행 Phase

PaddleOCR 도입부터 운영까지 8단계 로드맵. Phase 0~4(OCR 교체 및 검증)는 완료되었으며, Phase 5~7(Recognition 파인튜닝)은 운영 환경을 고려하여 진행 예정입니다.

Phase 0

사전 준비

환경 설정, PaddleOCR 설치 및 기본 테스트

✅ 완료
Phase 1

단건 테스트

단일 이미지로 PaddleOCR → LayoutLM 파이프라인 검증

✅ 완료
Phase 2

연결 테스트

testOCR.py 통합 및 전체 흐름 연결

✅ 완료
Phase 3

배치 테스트

다수 문서 배치 추론 테스트

✅ 완료
Phase 4

결과 검토

Tesseract 대비 정확도 비교 및 분석

✅ 완료
Phase 5

학습 데이터 생성

Recognition 학습용 crop 이미지 + label.txt 생성

⏳ 예정
Phase 6

Recognition 학습

PaddleOCR Recognition 모델 fine-tuning

⏳ 예정
Phase 7

성능 비교

학습 전/후 Recognition 정확도 비교

⏳ 예정

언어별 모델 분기

문서 언어에 따라 서로 다른 PaddleOCR Recognition 모델을 사용.

영어 / 스페인어 (Latin)

latin_PP-OCRv3_mobile_rec

EN, ES 등 라틴 문자 기반 문서

한국어 (Korean)

korean_PP-OCRv3_mobile_rec

KR 한글 문서 전용

💡 언어 감지는 문서 메타데이터 또는 프로젝트 설정 기반으로 자동 분기

사전 검증 단계

PaddleOCR 교체 전, 기존 checkpoint 기반으로 사전 검증을 수행하여 안정성 확인.

검증 설정

checkpoint→ checkpoint-740 기반
model_version→ LayoutLM-paddle-v1

✅ 기존 Tesseract 기반 결과와 PaddleOCR 기반 결과를 동일 문서로 비교하여 품질 검증

배치 추론 스크립트

PaddleOCR 기반 배치 추론을 위한 전용 스크립트. 테스트 단계에서는 특정 프로젝트만 대상으로 실행.

스크립트 정보

파일명layout_batch_predict_paddle.py
대상project id=34 (테스트용)

⚠️ 테스트 단계에서는 project id=34만 대상으로 제한하여 안전하게 검증 후 전체 확대 예정

배포 & 운영BIO 라벨 & 학습 개선