PaddleOCR은 중국 바이두(Baidu)가 만들어 오픈소스로 공개한 OCR(광학 문자 인식) 툴킷이다. 사진이나 PDF를 입력하면 그 안의 글자를 텍스트로 뽑아내고, 더 나아가 표·수식·도장·차트까지 구조를 파악해 LLM이 바로 먹을 수 있는 데이터(Markdown / JSON)로 바꿔준다.
ChatGPT나 Claude 같은 거대 언어 모델은 글자만 다룬다. 회사 계약서, 의료 기록, 옛날 신문 같은 종이 문서를 다루려면 누군가 먼저 그 사진을 글자로 바꿔줘야 한다. PaddleOCR은 그 "관문" 역할을 무료로, 정확하게, 약 109~111개 언어로 해준다.
핵심은 파이프라인 설계다. 한 거대한 신경망이 "사진 → 글자"를 한 번에 처리하는 게 아니라, 작은 모델 여럿이 차례로 한 가지씩만 잘한다. 그래서 한 단계만 교체하거나, 필요 없는 단계는 꺼버릴 수 있다.
구글 비전·AWS Textract는 호출당 과금이라 대량 문서엔 비용이 폭발한다. 무료 대안 Tesseract로 한국어 영수증을 찍으면 받침이 빠지고 자음이 엉뚱하게 바뀐다 — 알파벳 26자 위주로 학습됐기 때문이다.
처음부터 중국어·한국어·일본어 같은 CJK 문자를 가정해 설계됐고, 표·수식·차트·도장까지 한 번에 파악한다. 2026년형 PaddleOCR-VL-1.5는 0.9B 파라미터 비전-언어 모델로 OmniDocBench에서 94.5%, 후속 VL-1.6은 96.3% 정확도를 기록했다(공식 README 수치).
왜 지금 뜨는가? 모든 회사가 "사내 문서를 ChatGPT로 검색하게 해줘"라는 요구를 받고 있어서다. 회의록·계약서·매뉴얼이 대부분 PDF/스캔 이미지로 쌓여 있고, 이걸 AI가 다루려면 ① 문서 사진을 글자로 바꾸고(OCR) → ② 검색 가능한 형태로 정리(임베딩+벡터DB) → ③ 질문 시 관련 문서를 찾아 LLM에 넘긴다. 이 전체 파이프라인이 RAG(검색 증강 생성)이고, 그 맨 앞 관문이 OCR이다.
외국어 문서가 산더미고 사장님(LLM)이 한국어밖에 못 읽는다 치자. 그 앞에 번역사(OCR)가 먼저 서야 한다. 번역사가 숫자 0과 알파벳 O를 헷갈리면 사장님은 잘못된 정보로 보고서를 쓴다. PaddleOCR의 정확도가 중요한 이유가 여기 있다.
| 비교 대상 | PaddleOCR의 위치 |
|---|---|
| 구글 Vision / AWS Textract | 유료 클라우드 API. PaddleOCR은 무료·온프레미스(내 서버에서 실행)라 비용·보안에서 우위 |
| Tesseract | 가장 오래된 오픈소스지만 CJK 정확도가 낮음. PaddleOCR은 동아시아 문자에 특화 |
| EasyOCR | 설치는 쉽지만 표·수식·문서 파싱 같은 구조 분석이 약함. PaddleOCR은 PP-StructureV3로 구조까지 |
| 대형 멀티모달 LLM(예: GPT-4o 직접 입력) | 호출 비용·지연이 큼. PaddleOCR-VL은 0.9B로 가볍게 같은 문서 파싱을 로컬에서 수행 |
※ 위 비율은 일반적인 구성에 근거한 근사치다. PaddleOCR은 사실상 Python 중심 프로젝트이며, 고속 배포 경로에 C++가 섞인다.
| 기술 | 역할 | 상세 |
|---|---|---|
| PaddlePaddle | 딥러닝 프레임워크 | 바이두의 자체 프레임워크. PyTorch·TensorFlow의 바이두판. 3.1.0+ 권장 |
| Python 3.8~3.12 | 주 언어 | 학습·추론·파이프라인이 전부 Python |
| PP-OCRv6 | 경량 텍스트 인식 (현행) | DBNet 검출 + SVTR 인식. tiny(1.5M)/small(7.7M)/medium(34.5M) 3단계, 단일 모델로 50개 언어 지원 (2026-06-11 릴리스, PaddleOCR 3.7.0). PP-OCRv5는 이전 버전 |
| PaddleOCR-VL | 문서 파싱 VLM | 0.9B 비전-언어 모델(ERNIE-4.5-0.3B 언어부). 표·수식·차트까지 |
| PP-StructureV3 | 문서 구조 분석 | 레이아웃 분석 → Markdown/JSON 출력. 페이지 넘는 표 병합까지 |
| 기술 | 역할 | 상세 |
|---|---|---|
| ONNX | 모델 변환 | PaddlePaddle 모델을 표준 포맷으로 변환해 타 런타임에서 실행 |
| ONNX Runtime / OpenVINO | CPU 가속 | GPU 없이도 빠른 추론. 인텔 CPU 최적화(OpenVINO) |
| TensorRT | NVIDIA GPU 가속 | 엔비디아 GPU에서 추론 속도 극대화 |
| MCP Server | AI 에이전트 연동 | mcp_server/ — Claude Code 등이 PaddleOCR을 직접 호출 |
| LangChain / PaddleOCR.js | 생태계 통합 | RAG 파이프라인 연동, 브라우저(JS) SDK |
우체국에 편지가 쏟아질 때, 한 사람이 "주소 읽기·우편번호 분류·지역 배달·수령 확인"을 다 하면 끔찍하다. 실제론 단계마다 다른 직원이 한 가지씩만 한다. PaddleOCR도 작은 모델 다섯이 차례로 한 가지씩 잘한다 — 약한 단계만 교체하면 되고, 필요 없는 단계는 끌 수 있다.
같은 "텍스트 검출" 모듈이 일반 OCR에도, 표 인식·도장 인식 파이프라인에도 그대로 재사용된다. 사용자는 use_seal_recognition=True 같은 불리언 플래그만 켜고 끄면 된다.
검출과 인식을 분리하니, 검출 모델은 그대로 두고 인식 모델만 한국어 데이터로 추가 학습할 수 있다. lang='korean'으로 전환하면 한국어 가중치가 로드된다.
같은 기능 모델을 두 가지 크기로 제공한다. 스마트폰 앱엔 작은 mobile, 정확도가 1%라도 더 필요한 서버엔 큰 server. 무게-정확도를 트레이드오프로 고를 수 있게 한 설계다.
| 구분 | mobile | server |
|---|---|---|
| 용도 | 스마트폰·엣지 기기 | 고성능 서버 |
| 크기/파라미터 | 작음(검출 모델 수 MB대, mobile 약 5M 파라미터급) | 큼(server 모델 수십 MB대) |
| 강점 | 가벼움·빠른 시작 | 정확도 우위 |
※ 구체적 MB 수치는 PP-OCRv5 버전·모듈에 따라 달라진다. mobile 인식 모델이 약 10MB 안팎으로 보고된 사례가 있으나, 정확한 값은 모델 다운로드 페이지에서 확인할 것.
처음 코드를 열면 ppocr/부터 보면 된다 — 검출·인식 모델 정의가 여기 있다. 문서 파싱(표·수식)이 궁금하면 ppstructure/, AI 에이전트 연동이 궁금하면 mcp_server/를 본다. 직접 학습은 tools/train.py + configs/의 YAML 조합으로 돌린다.
배울 것: 거대한 단일 모델 대신 작은 모델을 직렬로 잇는 사고. 각 단계가 독립 모듈이라 교체·제거가 자유로운 구조가 왜 유지보수에 강한지. ppstructure/에서 같은 검출 모듈이 여러 파이프라인에 재사용되는 패턴을 직접 본다.
배울 것: DBNet(검출)이 "글자 위치"를, SVTR(인식)이 "글자 내용"을 맡는 분업. 왜 한 모델로 다 하지 않는지, 트랜스포머 기반 인식이 CRNN 대비 CJK에서 유리한 이유.
배울 것: 같은 모델을 환경별 두 버전으로 내보내는 전략. 32→8비트 양자화의 정확도-속도 트레이드오프. PaddlePaddle 모델을 ONNX로 변환해 OpenVINO·TensorRT로 가속하는 실전 배포 경로.
배울 것: 전통적 OCR(검출+인식)에서 PaddleOCR-VL 같은 0.9B VLM으로 넘어가는 흐름. 작은 비전-언어 모델이 어떻게 표·수식·차트까지 한 번에 구조화하는지, 큰 멀티모달 LLM 대비 비용 우위.
배울 것: 전통적 라이브러리를 MCP 서버로 감싸 Claude·Cursor·Dify 등 어떤 에이전트에서도 호출 가능하게 만드는 방법. "도구를 표준 콘센트로 만드는" 설계 사고.
배울 것: 일반 모델 정확도가 부족한 특수 문서(의료 차트·건설 도면·회사 양식)에 대해 tools/train.py + configs/ YAML로 직접 재학습하는 전체 흐름. 데이터 라벨링 → 학습 → 평가 → 배포 사이클.
| 항목 | 최소 | 권장 |
|---|---|---|
| Python | 3.8 | 3.10~3.12 |
| 프레임워크 | PaddlePaddle 3.1.0+ | 최신 안정 버전 |
| OS | Linux / Windows / macOS | Linux(서버 배포 시) |
| CPU | 일반 CPU로 충분(가벼운 추론) | 다중 코어 + OpenVINO 가속 |
| GPU | 불필요(CPU 추론 가능) | NVIDIA + CUDA 12 (대량/학습 시) |
| RAM | 4GB(기본 OCR) | 8GB+ (문서 파싱·VLM) |
| 가속기(선택) | — | XPU / NPU도 지원 |
| 설치 방법 | 명령 | 비고 |
|---|---|---|
| 기본 | pip install paddleocr | 텍스트 검출+인식. 대부분 여기서 시작 |
| 문서 파싱 | pip install "paddleocr[doc-parser]" | 표·수식·레이아웃 등 구조 분석 추가 |
| 전체 | pip install "paddleocr[all]" | 모든 모듈. 다운로드 수 GB — 필요할 때만 |
※ extras 이름(doc-parser 등)은 버전에 따라 다를 수 있으니 설치 전 공식 문서 확인. GPU 사용 시 paddlepaddle-gpu를 CUDA 버전에 맞춰 별도 설치해야 한다.
스마트폰으로 영수증 한 장 찍어 한글 인식 정확도를 직접 확인한다. GPU 없이 CPU만으로 동작한다.
# 설치
pip install paddleocr
# 3줄 인식
from paddleocr import PaddleOCR
ocr = PaddleOCR(lang='korean')
result = ocr.ocr('영수증.jpg') # 박스+글자+신뢰도 반환
같은 이미지를 mobile과 server 두 버전으로 돌려 처리 시간·정확도 차이를 표로 정리한다. 본인 환경에 맞는 트레이드오프 감각이 생긴다.
CLI 한 줄로 PDF를 마크다운으로 변환하고, 폴더 일괄 처리로 확장한다.
# 단일 파일
paddleocr --input sample.pdf --output result.md --lang korean
# 폴더 일괄 (파이썬에서 glob로 순회)
for f in folder/*.pdf: 변환 → .md 저장
Claude Code 설정에 PaddleOCR MCP를 등록하고 자연어 명령으로 PDF를 처리한다.
mcp_server/ 문서를 따라 서버를 띄우고, .mcp.json에 등록 → AI 에이전트가 PaddleOCR을 직접 호출하는 워크플로를 체험.회사 양식·의료 차트처럼 일반 모델 정확도가 떨어지는 문서에 인식 모델을 재학습한다.
configs/에서 인식 YAML 선택 → tools/train.py -c 설정.yml로 학습 → 평가 → 추론에 새 가중치 적용. ppocr/ 학습 코드가 그대로 들어 있다.| 요일 | 학습 내용 | 실습 |
|---|---|---|
| 월 | OCR이란 무엇인가 | 검출/인식 개념, PaddleOCR 설치 |
| 화 | 기본 추론 API | PaddleOCR(lang='korean')로 한글 인식 |
| 수 | 결과 구조 이해 | 박스 좌표·신뢰도 점수 해석 |
| 목 | 다국어 인식 | 영어·중국어·일본어 섞인 문서 처리 |
| 금 | CLI 사용법 | paddleocr --input … --output … |
| 요일 | 학습 내용 | 실습 |
|---|---|---|
| 월 | 5단계 파이프라인 | 방향·왜곡·검출·인식 단계 끄고 켜기 |
| 화 | DBNet 검출 원리 | ppocr/modeling 검출 코드 읽기 |
| 수 | SVTR 인식 원리 | 트랜스포머 인식 vs CRNN 비교 |
| 목 | mobile/server 비교 | 두 모델 속도·정확도 측정 |
| 금 | 양자화 개념 | INT8 모델로 속도 변화 관찰 |
| 요일 | 학습 내용 | 실습 |
|---|---|---|
| 월 | PP-StructureV3 | 표·레이아웃 분석으로 Markdown 추출 |
| 화 | 수식·도장·차트 인식 | use_*_recognition 플래그 실험 |
| 수 | ONNX 변환 | 모델을 ONNX로 내보내 실행 |
| 목 | OpenVINO/TensorRT | CPU/GPU 가속 추론 비교 |
| 금 | 서빙 배포 | deploy/ 경로로 API 서버 구성 |
| 요일 | 학습 내용 | 실습 |
|---|---|---|
| 월 | PaddleOCR-VL | VLM으로 복잡 문서 파싱 |
| 화 | RAG 파이프라인 | OCR → 임베딩 → 벡터DB 흐름 설계 |
| 수 | LangChain 통합 | langchain-paddleocr로 RAG 연결 |
| 목 | MCP 서버 | Claude Code에서 PaddleOCR 호출 |
| 금 | 종합 프로젝트 | "PDF 폴더 → 검색 가능한 지식베이스" 완성 |
| 키워드 | 설명 |
|---|---|
| OCR | Optical Character Recognition. 이미지 속 글자를 텍스트로 변환하는 기술 |
| PaddlePaddle | 바이두의 딥러닝 프레임워크. PaddleOCR이 그 위에서 동작 (PyTorch의 바이두판) |
| 파이프라인 | 데이터가 작은 단계를 차례로 거치며 처리되는 구조. 각 단계가 독립 모듈 |
| DBNet | Differentiable Binarization. 텍스트 "위치"를 박스로 찾는 검출 모델 |
| SVTR | Scene-text Visual Transformer. 박스 안 글자를 읽는 트랜스포머 인식 모델 |
| CRNN | 구버전 인식 모델(CNN+RNN). v5에서 SVTR로 대체됨 |
| PP-OCRv5 / PP-OCRv6 | 경량 OCR 모델 세대. PP-OCRv6(2026-06-11, PaddleOCR 3.7.0)이 현행 — tiny(1.5M)/small(7.7M)/medium(34.5M) 3단계. PP-OCRv5는 이전 세대(mobile 약 5M 파라미터급/server) |
| PaddleOCR-VL | 0.9B 비전-언어 모델. 표·수식·차트까지 한 번에 구조화 (VL-1.6 96.3%) |
| PP-StructureV3 | 문서 레이아웃·표를 분석해 Markdown/JSON으로 변환하는 구조 분석기 |
| CJK | Chinese-Japanese-Korean. 한·중·일 문자. 종류가 많고 모양이 복잡 |
| 양자화 | 모델 가중치를 32→8비트로 줄여 크기·속도를 개선하는 경량화 기법 |
| ONNX | 딥러닝 모델 표준 교환 포맷. 변환하면 여러 런타임에서 실행 가능 |
| TensorRT / OpenVINO | 각각 NVIDIA GPU / 인텔 CPU용 추론 가속 라이브러리 |
| RAG | 검색 증강 생성. LLM에 답을 시키기 전 관련 문서를 먼저 찾아 넘기는 패턴 |
| MCP | Model Context Protocol. AI 에이전트와 외부 도구를 잇는 표준 약속 |
| 파인튜닝 | 사전학습 모델을 특정 도메인 데이터로 추가 학습해 정확도를 끌어올리는 것 |
| OmniDocBench | 문서 파싱 정확도를 재는 벤치마크. PaddleOCR-VL 성능 보고에 쓰임 |