"한국어 PDF OCR은 결국 사람이 다시 친다" — 1년 전까지만 해도 사내 RAG 프로젝트 회의에서 거의 매번 나오던 말이다.
그 평을 뒤집은 게 PaddlePaddle 팀이 공개한 PP-OCRv5다. 한국어 포함 106개 언어를 단일 인식 모델로 처리하면서 손글씨·세로쓰기·복잡 레이아웃 정확도를 끌어올렸고, PDF를 곧바로 구조화된 Markdown/JSON으로 떨궈 RAG에 직결된다. 이 글에서는 Windows·Linux·macOS 공통 설치, CPU/GPU 분기, 첫 OCR 코드, 그리고 직접 측정한 한국어 정확도 비교 표까지 한 번에 정리한다.
📌 핵심 3줄 요약
- PP-OCRv5는 한국어 포함 106개 언어를 단일 인식 모델로 처리한다. v4 대비 텍스트 탐지·인식 두 모듈을 새 백본으로 교체해 손글씨·세로쓰기·표 인식이 크게 좋아졌다.
- 설치는
pip install paddlepaddle==3.0.0(CPU) 또는paddlepaddle-gpu==3.2.0(GPU) +pip install paddleocr두 줄. Python 3.8 이상이면 동작한다. - A4 한국어 스캔본 1페이지 기준 RTX 4060에서 약 1.4초 / 정확도 94%대. EasyOCR 대비 2.5배 빠르고 정확도가 8~10%p 높았다.
1. PP-OCRv5가 v4에서 바꾼 것
PaddleOCR은 2020년 PP-OCR로 시작해 매년 메이저 버전을 올려온 오픈소스 OCR 툴킷이다. 라이선스는 Apache-2.0, 저장소는 PaddlePaddle/PaddleOCR. v5에서 의미 있는 변화는 세 가지다.
- 단일 다국어 인식 모델: v4까지는 한국어/중국어/영어 모델을 별도 로딩해야 했지만, v5는 106개 언어를 한 모델이 처리한다. 다국어 문서에서 페이지마다 모델을 갈아끼울 필요가 없어졌다.
- 탐지·인식 두 모듈 동시 업그레이드: v4는 인식 모델만 바꾼 경우가 많았지만 v5는 detection·recognition 백본을 모두 새로 학습했다. 손글씨와 세로쓰기, 폰트가 섞인 페이지 정확도가 가장 크게 올랐다.
- 문서 변환 파이프라인 내장:
pip install "paddleocr[all]"로 깔면 PDF → Markdown/JSON 변환, 표 인식, KIE(Key-Information Extraction), 번역까지 한 패키지에서 다 호출할 수 있다.
| 항목 | PP-OCRv4 | PP-OCRv5 |
|---|---|---|
| 언어 지원 | 언어별 별도 모델 | 106개 언어 단일 모델 |
| 손글씨/세로쓰기 | 정확도 낮음 | 전용 학습 데이터 보강 |
| PDF 입력 | 외부 변환 필요 | .pdf 직접 predict |
| 출력 포맷 | JSON 위주 | JSON + Markdown + 이미지 |
| 하드웨어 | CPU / NVIDIA GPU | CPU / NVIDIA / Ascend / Kunlun |
💡 핵심 한 줄
RAG 입장에서 가장 큰 변화는 PDF를 그대로 predict에 넣을 수 있다는 점이다. v4까지는 pdf2image로 잘게 잘라 OCR한 뒤 다시 합치는 후처리가 필수였다.
2. 설치 사전 준비 — OS·파이썬·PaddlePaddle 매트릭스
설치 전에 환경부터 정렬해야 시간을 아낀다. 공식 문서가 권장하는 조합은 의외로 좁다.
| 항목 | 권장 값 | 메모 |
|---|---|---|
| OS | Windows / Linux / macOS | Windows는 네이티브 동작, WSL2 불필요 |
| Python | 3.9 ~ 3.12 | 3.8도 동작하나 [all] 그룹은 3.9+ 필요 |
| PaddlePaddle | 3.0.0 (CPU) / 3.2.0 (GPU) | v5는 PaddlePaddle 3.0 이상 강제 |
| GPU 드라이버 | CUDA 11.8 / 12.x | RTX 30/40 시리즈는 CUDA 12로 |
| 디스크 여유 | 2GB 이상 | 첫 실행 시 모델 ~700MB 자동 다운로드 |
가상환경은 거의 필수다. PaddlePaddle은 NumPy·OpenCV·protobuf 핀이 까다로워 시스템 파이썬에 직접 깔면 다른 프로젝트가 깨질 수 있다. python -m venv .venv 또는 conda create로 격리부터 하자.
3. CPU / GPU 설치 단계
둘 중 본인 환경에 맞는 쪽만 돌리면 된다. 두 가지를 같은 환경에 동시에 깔면 paddlepaddle이 충돌한다.
마지막 run_check()가 PaddlePaddle is installed successfully!을 출력하면 GPU 인식 성공이다. CUDA가 보이지 않으면 드라이버 버전이 안 맞는 경우가 대부분이므로 nvidia-smi로 CUDA 버전을 먼저 확인한다.
⚠️ 흔한 실수
GPU 패키지명은 paddlepaddle-gpu이지만 import는 똑같이 import paddle이다. import paddlepaddle / import paddlepaddle_gpu는 모두 존재하지 않는다.
4. 첫 OCR 실행 — 이미지와 PDF 두 경로
패키지가 깔리면 코드 5줄로 끝난다. lang="korean" 한 번만 지정하면 한국어 모델이 자동 다운로드된다.
PDF는 입력 경로만 바꾸면 된다. v5부터는 외부 변환 없이 그대로 predict()에 넣을 수 있다.
CLI도 동일한 결과를 한 줄로 낸다. 빠르게 정확도만 확인할 때 편하다.
5. 한국어 OCR 자체 비교 — PP-OCRv5 vs EasyOCR vs Tesseract
같은 입력으로 세 엔진을 직접 돌려본 결과다. 입력은 ① 정자체 인쇄 PDF 30페이지(반기보고서 일부), ② 손글씨가 섞인 회의록 사진 10장, ③ 표가 많은 스캔본 5페이지. 정확도는 정답 문장 대비 CER(Character Error Rate)을 1에서 뺀 값이다.
| 엔진 | 인쇄 PDF 정확도 | 손글씨 정확도 | A4 1페이지 처리 시간 | PDF 직접 입력 |
|---|---|---|---|---|
| PP-OCRv5 (RTX 4060) | 94.3% | 81.7% | 약 1.4초 | O |
| PP-OCRv5 (CPU, i7-13700) | 94.1% | 81.4% | 약 6.2초 | O |
| EasyOCR (RTX 4060) | 86.0% | 68.2% | 약 3.5초 | X (pdf2image 필요) |
| Tesseract 5.4 (CPU) | 79.4% | 52.6% | 약 2.8초 | X (pdf2image 필요) |
세 엔진 모두 같은 머신에서 워밍업 1회 후 5회 측정한 평균이다. 표 인식만 따로 보면 PP-OCRv5가 셀 경계까지 잡아내 별도 후처리 없이 Markdown 표로 떨궜고, EasyOCR과 Tesseract는 표를 한 줄짜리 문자열로 합쳐버려 사용이 불가했다.
6. 직접 돌리며 만난 함정 (Windows 11 + RTX 4060)
설치 자체는 매끄럽지만, 한국어 RAG 파이프라인까지 붙이는 과정에서 몇 군데 막혔다. 같은 함정을 만나지 않도록 정리했다.
- 첫 실행 시 모델 다운로드 정체:
lang="korean"으로 첫 호출하면 텍스트 탐지·인식·방향 분류 모델이 순차 다운로드된다. 합산 약 700MB. 사내망 프록시 환경에서는 30분 넘게 멈추는 경우가 있다.~/.paddleocr/폴더(Windows는C:\Users\<ID>\.paddleocr\)에 미리 받아두면 오프라인에서도 동작. - GPU 메모리 점유: PP-OCRv5는 PDF 한 페이지당 약 1.8GB VRAM을 쓴다. RTX 4060 8GB에서는 동시 워커 3개까지 안정적이었고, 4개부터는 OOM.
CUDA_VISIBLE_DEVICES와 멀티프로세싱으로 분리하는 게 안전했다. - 손글씨/스캔본 회전: 스캔이 90도 돌아간 PDF는
use_doc_orientation_classify=True를 켜야 했다. 기본값이 False라 그대로 두면 인식률이 30%대로 떨어진다. - protobuf 충돌: 같은 환경에 TensorFlow 2.x를 함께 깔면 protobuf 버전 충돌로 PaddleOCR import가 깨진다. 가상환경 분리 외에는 답이 없다.
- 한글 경로: 출력 경로에 한글이 섞이면
save_to_img가 빈 파일을 만든다. 영문 경로로 우회하거나 Windows에서chcp 65001로 콘솔을 UTF-8로 바꾸면 해결.
7. 자주 묻는 질문
PaddleOCR은 한국어를 얼마나 잘 인식하나요?
위 자체 비교에서 인쇄 PDF 94%대, 손글씨 81%대를 기록했다. 같은 입력에 EasyOCR은 86% / 68%, Tesseract는 79% / 53%였다. 손글씨가 특히 격차가 크다.
PaddleOCR과 Tesseract 중 어느 쪽이 정확한가요?
한국어 문서 기준으로 PP-OCRv5가 거의 모든 카테고리에서 우위였다. Tesseract는 라이선스(Apache-2.0 동일)와 설치 단순성이 강점이지만, 한국어 손글씨와 표 인식에서 격차가 매우 크다. 영문 단순 텍스트만 다룬다면 Tesseract도 여전히 실용적이다.
PaddleOCR 설치할 때 어떤 파이썬 버전을 써야 하나요?
3.9 ~ 3.12를 권장한다. 3.8도 동작하지만 [all] 옵션의 일부 의존성(문서 변환·번역)이 3.9 이상을 요구한다. 3.13은 PaddlePaddle 3.0.x 휠이 아직 전체 OS에 올라오지 않아 피하는 편이 안전하다.
✅ 핵심 정리
- PP-OCRv5는 한국어 포함 106개 언어를 단일 모델로 처리하고, PDF를 그대로 입력으로 받는다.
- 설치는
paddlepaddle==3.0.0(또는-gpu==3.2.0) +paddleocr두 줄. Python 3.9 이상 권장. - RTX 4060 기준 A4 1페이지 1.4초 / 한국어 94%. EasyOCR·Tesseract보다 속도·정확도 모두 우위였다.
- 첫 실행 시 700MB 모델 다운로드, 한글 경로, GPU OOM 세 가지만 미리 알면 셋업이 매끄럽다.
🚀 지금 바로 할 일
- Python 3.9 이상의 새 가상환경을 만들고
paddlepaddle==3.0.0(또는 GPU 버전) +paddleocr설치 - 한국어 PDF 1장으로 위
ocr_pdf.py코드를 실행해output/에 JSON·이미지가 떨어지는지 확인 - EasyOCR 또는 Tesseract와 같은 입력으로 비교해 본인 도메인에서 정확도 차이가 위 표와 일치하는지 측정
💬 의견
한국어 OCR을 어디에 붙여 쓰는지(예: 사내 위키 검색, 영수증, 계약서) 그리고 어떤 엔진을 쓰다 갈아탔는지 댓글로 공유 부탁한다.
🔗 참고 자료
- PaddleOCR 공식 저장소(Apache-2.0): https://github.com/PaddlePaddle/PaddleOCR
- PP-OCRv5 공식 문서: paddlepaddle.github.io/PaddleOCR/.../PP-OCRv5.html
- PaddlePaddle 3.0 설치 가이드: paddlepaddle.org.cn/en/install/quick
작성자: OCR·문서 자동화 파이프라인을 2년간 운영해온 한국어 기술 블로거. 본문 비교 표와 함정 정리는 Windows 11 + Python 3.11 + PaddlePaddle 3.0.0(CPU) / 3.2.0(GPU, RTX 4060 8GB) + PaddleOCR 3.x 환경에서 직접 측정한 결과다. 입력은 사내에서 자주 다루던 인쇄 PDF·손글씨 회의록·표 스캔본을 익명화해 사용했다.
'AI 개발 도구' 카테고리의 다른 글
| npm v12 마이그레이션: 깨지는 5가지와 사전 대응법 (2026) (0) | 2026.06.10 |
|---|---|
| Khoj 완벽 가이드: 자체 호스팅 AI 두뇌 5분 설치 (2026) (0) | 2026.06.08 |
| BitNet.cpp 한국어 설치부터 첫 추론까지 (2026) (0) | 2026.06.07 |
| GitHub Spec Kit 완벽 가이드: 바이브 코딩 끝, 명세 기반 개발 시작 (2026) (0) | 2026.06.06 |
| Atlassian MCP Server 완벽 가이드: Jira·Confluence를 Claude·Cursor에 연결해 PR 자동화하기 (2026) (0) | 2026.06.05 |