개요
PaddleOCR는 강력한 OCR 툴킷으로, 모든 PDF 또는 이미지를 LLM에서 사용할 수 있는 구조화된 데이터(JSON/Markdown)로 변환할 수 있습니다. 100개 이상의 언어를 지원하며, PP-StructureV3 및 PaddleOCR-VL 모델의 최첨단 문서 파싱 기능을 갖추고 있고, RAG 및 지능형 에이전트 애플리케이션과 원활하게 통합됩니다.
README 미리보기
\n\n \n \n \n\n\n\nGlobal Leading OCR Toolkit & Document AI Engine\n\nEnglish | [简体中文](./readme/README_cn.md) | [繁體中文](./readme/README_tcn.md) | [日本語](./readme/README_ja.md) | [한국어](./readme/README_ko.md) | [Français](./readme/README_fr.md) | [Русский](./readme/README_ru.md) | [Español](./readme/README_es.md) | [العربية](./readme/README_ar.md)\n\n\n\n[](https://pepy.tech/projects/paddleocr)\n[](https://github.com/PaddlePaddle/PaddleOCR/network/dependents)\n\n\n\n\n[](https://www.paddleocr.com)\n[](https://deepwiki.com/PaddlePaddle/PaddleOCR)\n[](../LICENSE)\n\n\n\n\n\n\n\n\n**PaddleOCR converts PDF documents and images into structured, LLM-ready data (JSON/Markdown) with industry-leading accuracy. With 70k+ Stars and trusted by top-tier projects like Dify, RAGFlow, and Cherry Studio, PaddleOCR is the bedrock for building intelligent RAG and Agentic applications.**\n\n\n## 🚀 Key Features\n\n### 📄 Intelligent Document Parsing (LLM-Ready)\n> *Transforming messy visuals into structured data for the LLM era.*\n\n* **SOTA Document VLM**: Featuring **PaddleOCR-VL-1.6 (0.9B)**, the industry's leading lightweight vision-language model for document parsing. It achieves 96.3% accuracy on OmniDocBench v1.6, leads in text, formula, and table recognition, and shows significantly enhanced capabilities in ancient documents, rare characters, seals, and charts, with structured outputs in **Markdown** and **JSON** formats.\n* **Structure-Aware Conversion**: Powered by **PP-StructureV3**, seamlessly convert complex PDFs and images into **Markdown** or **JSON**. Unlike the PaddleOCR-VL series models, it provides more fine-grained coordinate information, including table cell coordinates, text coordinates, and more.\n* **Production-Ready Efficiency**: Achieve commercial-grade accuracy with an ultra-small footprint. Outperforms numerous closed-source solutions in public benchmarks while remaining resource-efficient for edge/cloud deployment.\n\n### 🔍 Universal Text Recognition (S
FAQ (3)
문제 해결PaddleOCR SealRecognition이 빈 도장 결과(seal_res_list: [])를 반환하는 이유는 무엇이며 어떻게 해결할 수 있나요?
근본 원인: SealRecognition은 기본적으로 레이아웃 감지를 활성화하며(use_layout_detection=True), 내장된 PP-DocLayout-L 레이아웃 모델이 빨간색 원형 도장 스탬프를 유효하지 않은 영역으로 분류하여 후속 도장 감지 파이프라인이 중단됩니다. 해결 방법: 파이프라인을 초기화할 때 레이아웃 감지를 비활성화하세요:
from paddleocr import SealRecognition
ocr = SealRecognition(device="gpu", use_layout_detection=False)
result = ocr.predict(input="testpic.png")이렇게 하면 도장 감지가 복원됩니다. 참고: 링 형태 도장의 원형/호형 텍스트는 공식 파이프라인에서 여전히 완전히 지원되지 않습니다(직사각형 크롭으로는 곡선 텍스트를 처리할 수 없고 감지 박스가 어긋날 수 있습니다). PaddleOCR 3.7.0 기준으로 공식 수정 사항은 없으며, 커뮤니티에서 제안하는 접근 방식은 도장 다각형을 추출하고 극좌표 언래핑을 적용하여 인식 전에 호형 텍스트를 펴는 방법이거나, 사용자 정의 도장 감지 모델을 미세 조정하는 것입니다.
문제 해결스마트 따옴표가 포함된 이미지에서 PaddleOCRVL llama-cpp-server HTTP 500 "Failed to parse input" 오류를 해결하는 방법
이 문제는 curly/smart quotes (U+201C/U+201D)가 포함된 PaddleOCR-VL 출력이 잘못된 UTF-8 또는 U+FFFD 바이트로 디코딩될 때 llama.cpp b9637에서 발생하며, 이로 인해 llama-server의 chat-template 파서가 HTTP 500을 반환합니다. 그러면 PaddleOCR 3.7.0이 대기 중인 모든 VLM 블록을 취소하고 전체 predict() 호출을 실패시킵니다.
권장 해결 방법: "chat: sanitize invalid UTF-8 before peg-native parsing"이라는 제목의 업스트림 수정이 포함된 빌드로 llama-server를 업데이트하거나 다시 빌드한 다음, 서버를 재시작하고 predict()를 다시 실행하세요.
임시 PaddleOCR 해결 방법: DocVLMGenAIClientPredictor._genai_client_process()에서 paddlex/inference/models/doc_vlm/predictor.py를 패치하여, 실패한 블록 하나가 모든 future를 취소하고 예외를 다시 발생시키는 대신 빈 콘텐츠를 반환하도록 합니다:
import logging
contents = [""] * len(futures)
for idx, future in enumerate(futures):
try:
contents[idx] = future.result().choices[0].message.content or ""
except Exception as exc:
logging.warning("Skipping failed VLM block %s: %s", idx, exc)
contents[idx] = ""
대기 중인 future를 취소하고 raise를 호출하는 전역 핸들러를 제거하거나 교체하세요. 실패한 단락은 비어 있게 되지만, 나머지 블록과 페이지 출력은 생성됩니다. 설치된 파일의 위치는 다음 명령으로 확인할 수 있습니다:
python -c "import paddlex, os; print(os.path.dirname(paddlex.__file__))"
패치 후 Python을 재시작하세요. llama.cpp를 업데이트하는 것이 파서 오류 자체를 방지하므로 더 바람직합니다.
문제 해결PaddleOCR PP-OCRv3 검출 검증 중 메모리가 계속 증가하면서 BadAlloc/ResourceExhaustedError가 발생하는 GPU OOM 문제를 해결하는 방법은?
이 문제는 보통 검증 이미지가 DetResizeForTest 이후 가변 H/W 크기를 갖기 때문에 발생하며, 이로 인해 PaddlePaddle의 캐싱 할당자가 새로운 shape에 대한 블록을 계속 유지합니다. 또한 학습/옵티마이저 메모리도 T4에 상주합니다. PP-OCRv3 det 설정에서 평가 입력 크기를 줄이거나 고정하세요:
Eval:
loader:
batch_size_per_card: 1
dataset:
transforms:
- DetResizeForTest:
limit_type: max
limit_side_len: 736 # 여전히 OOM이 발생하면 640으로 시도
기본값은 보통 960입니다. 메모리 재사용을 결정적으로 만들려면 32로 나누어떨어지는 고정 shape로 교체하세요. 예를 들면:
- DetResizeForTest:
image_shape: [3, 640, 960]
평가 루프를 수정했다면 추론이 autograd 없이 실행되는지 확인하세요:
model.eval()
with paddle.no_grad():
for batch in eval_loader:
preds = model(images)
임시 해결 방법으로, 학습 전에 CUDA managed memory를 활성화하세요. 이전 오류 메시지에 표시된 false가 아니라 true를 사용해야 합니다:
export FLAGS_use_cuda_managed_memory=true
python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_distill_train.yml
학습 중 검증이 계속 실패하면 옵티마이저 상태와 학습 캐시가 상주하지 않도록 평가를 별도로 실행하세요:
python tools/eval.py \
-c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_distill_train.yml \
-o Global.checkpoints=<output_dir>/best_accuracy
Train.loader.batch_size_per_card를 1로 줄이거나 더 큰 GPU를 사용하는 것도 추가적인 방법입니다.