본문 바로가기
AI 개발 도구

PP-OCRv5 한국어 PDF OCR 파이썬 사용법 (2026)

by 정부우르사 2026. 6. 7.
반응형

"한국어 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이 충돌한다.

CPU 설치 · bash / PowerShell

# 가상환경
python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate

# PaddlePaddle CPU
python -m pip install --upgrade pip
python -m pip install paddlepaddle==3.0.0

# PaddleOCR 본체 (한국어 OCR만 필요하면 이것으로 충분)
pip install paddleocr

# 또는 PDF → Markdown, KIE, 번역까지 모두 쓸 때
pip install "paddleocr[all]"

GPU 설치 · bash / PowerShell

# NVIDIA GPU(CUDA 12.x) 환경
python -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate

python -m pip install --upgrade pip
python -m pip install paddlepaddle-gpu==3.2.0
pip install paddleocr

# 설치 확인
python -c "import paddle; paddle.utils.run_check()"

마지막 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" 한 번만 지정하면 한국어 모델이 자동 다운로드된다.

ocr_basic.py · Python

from paddleocr import PaddleOCR

ocr = PaddleOCR(
    use_doc_orientation_classify=False,
    use_doc_unwarping=False,
    use_textline_orientation=False,
    lang="korean",
)

# 이미지 한 장
result = ocr.predict("sample.png")

for res in result:
    res.print()                  # 인식 결과를 콘솔에 출력
    res.save_to_img("output/")   # 박스가 그려진 시각화 이미지 저장
    res.save_to_json("output/")  # 좌표·텍스트·신뢰도 JSON 저장

PDF는 입력 경로만 바꾸면 된다. v5부터는 외부 변환 없이 그대로 predict()에 넣을 수 있다.

ocr_pdf.py · Python

from paddleocr import PaddleOCR

ocr = PaddleOCR(lang="korean")

result = ocr.predict("report_2026Q1.pdf")  # 여러 페이지도 OK

for i, page in enumerate(result):
    page.save_to_img(f"output/page_{i:03d}/")
    page.save_to_json(f"output/page_{i:03d}/")
    # Markdown 추출이 필요할 때:
    # page.save_to_markdown(f"output/page_{i:03d}/")

CLI도 동일한 결과를 한 줄로 낸다. 빠르게 정확도만 확인할 때 편하다.

terminal · bash

paddleocr ocr -i sample.png --lang korean

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 세 가지만 미리 알면 셋업이 매끄럽다.

🚀 지금 바로 할 일

  1. Python 3.9 이상의 새 가상환경을 만들고 paddlepaddle==3.0.0(또는 GPU 버전) + paddleocr 설치
  2. 한국어 PDF 1장으로 위 ocr_pdf.py 코드를 실행해 output/에 JSON·이미지가 떨어지는지 확인
  3. EasyOCR 또는 Tesseract와 같은 입력으로 비교해 본인 도메인에서 정확도 차이가 위 표와 일치하는지 측정

💬 의견

한국어 OCR을 어디에 붙여 쓰는지(예: 사내 위키 검색, 영수증, 계약서) 그리고 어떤 엔진을 쓰다 갈아탔는지 댓글로 공유 부탁한다.


🔗 참고 자료


작성자: OCR·문서 자동화 파이프라인을 2년간 운영해온 한국어 기술 블로거. 본문 비교 표와 함정 정리는 Windows 11 + Python 3.11 + PaddlePaddle 3.0.0(CPU) / 3.2.0(GPU, RTX 4060 8GB) + PaddleOCR 3.x 환경에서 직접 측정한 결과다. 입력은 사내에서 자주 다루던 인쇄 PDF·손글씨 회의록·표 스캔본을 익명화해 사용했다.

반응형