Kiuyha/paddleocr-onnx
PP-OCR ONNX Models
Multilingual OCR models from PaddleOCR, converted to ONNX format for production deployment.
Use as a complete pipeline: Integrate with monkt.com for end-to-end document processing.
Source: PaddlePaddle PP-OCRv5 Collection Format: ONNX (optimized for inference) License: Apache 2.0
Overview
16 models covering 48+ languages:
- 11 PP-OCRv5 models (latest, highest accuracy)
- 5 PP-OCRv3 models (legacy, additional language support)
Quick Start
Download from HuggingFace
pip install huggingface_hub rapidocr-onnxruntime<details> <summary><b>Download specific language models</b></summary>
from huggingface_hub import hf_hub_download
# Download English models
det_path = hf_hub_download("monkt/paddleocr-onnx", "detection/v5/det.onnx")
rec_path = hf_hub_download("monkt/paddleocr-onnx", "languages/english/rec.onnx")
dict_path = hf_hub_download("monkt/paddleocr-onnx", "languages/english/dict.txt")
# Use with RapidOCR
from rapidocr_onnxruntime import RapidOCR
ocr = RapidOCR(det_model_path=det_path, rec_model_path=rec_path, rec_keys_path=dict_path)
result, elapsed = ocr("document.jpg")</details>
<details> <summary><b>Download entire language folder</b></summary>
from huggingface_hub import snapshot_download
# Download all French/German/Spanish (Latin) models
snapshot_download("monkt/paddleocr-onnx", allow_patterns=["detection/v5/*", "languages/latin/*"])
# Download Arabic models (v3)
snapshot_download("monkt/paddleocr-onnx", allow_patterns=["detection/v3/*", "languages/arabic/*"])</details>
<details> <summary><b>Clone entire repository</b></summary>
git clone https://huggingface.co/monkt/paddleocr-onnx
cd paddleocr-onnx</details>
Basic Usage
from rapidocr_onnxruntime import RapidOCR
ocr = RapidOCR(
det_model_path="detection/v5/det.onnx",
rec_model_path="languages/english/rec.onnx",
rec_keys_path="languages/english/dict.txt"
)
result, elapsed = ocr("document.jpg")
for line in result:
print(line[1][0]) # Extracted textAvailable Models
PP-OCRv5 Recognition Models
PP-OCRv3 Recognition Models (Legacy)
Detection Models
Note: Use v5 detection with v5 recognition models. Use v3 detection with v3 recognition models.
Preprocessing Models (Optional)
Language Support
PP-OCRv5 Languages (40+)
Latin Script (32 languages): English, French, German, Spanish, Italian, Portuguese, Dutch, Polish, Czech, Slovak, Croatian, Bosnian, Serbian, Slovenian, Danish, Norwegian, Swedish, Icelandic, Estonian, Lithuanian, Hungarian, Albanian, Welsh, Irish, Turkish, Indonesian, Malay, Afrikaans, Swahili, Tagalog, Uzbek, Latin
Cyrillic: Russian, Bulgarian, Ukrainian, Belarusian
East Asian: Chinese (Simplified, Traditional), Japanese (Hiragana, Katakana, Kanji), Korean
Southeast Asian: Thai
Other: Greek
PP-OCRv3 Languages (8)
South Asian: Hindi, Marathi, Nepali, Sanskrit, Tamil, Telugu
Middle Eastern: Arabic, Urdu, Persian/Farsi
Usage Examples
<details> <summary><b>PP-OCRv5 Models (English, Latin, East Asian, etc.)</b></summary>
from rapidocr_onnxruntime import RapidOCR
# English
ocr = RapidOCR(
det_model_path="detection/v5/det.onnx",
rec_model_path="languages/english/rec.onnx",
rec_keys_path="languages/english/dict.txt"
)
# French, German, Spanish, etc. (32 languages)
ocr = RapidOCR(
det_model_path="detection/v5/det.onnx",
rec_model_path="languages/latin/rec.onnx",
rec_keys_path="languages/latin/dict.txt"
)
# Russian, Bulgarian, Ukrainian, Belarusian
ocr = RapidOCR(
det_model_path="detection/v5/det.onnx",
rec_model_path="languages/eslav/rec.onnx",
rec_keys_path="languages/eslav/dict.txt"
)
# Korean
ocr = RapidOCR(
det_model_path="detection/v5/det.onnx",
rec_model_path="languages/korean/rec.onnx",
rec_keys_path="languages/korean/dict.txt"
)
# Chinese/Japanese
ocr = RapidOCR(
det_model_path="detection/v5/det.onnx",
rec_model_path="languages/chinese/rec.onnx",
rec_keys_path="languages/chinese/dict.txt"
)
# Thai
ocr = RapidOCR(
det_model_path="detection/v5/det.onnx",
rec_model_path="languages/thai/rec.onnx",
rec_keys_path="languages/thai/dict.txt"
)
# Greek
ocr = RapidOCR(
det_model_path="detection/v5/det.onnx",
rec_model_path="languages/greek/rec.onnx",
rec_keys_path="languages/greek/dict.txt"
)</details>
<details> <summary><b>PP-OCRv3 Models (Hindi, Arabic, Tamil, Telugu)</b></summary>
from rapidocr_onnxruntime import RapidOCR
# Hindi, Marathi, Nepali, Sanskrit
ocr = RapidOCR(
det_model_path="detection/v3/det.onnx",
rec_model_path="languages/hindi/rec.onnx",
rec_keys_path="languages/hindi/dict.txt"
)
# Arabic, Urdu, Persian/Farsi
ocr = RapidOCR(
det_model_path="detection/v3/det.onnx",
rec_model_path="languages/arabic/rec.onnx",
rec_keys_path="languages/arabic/dict.txt"
)
# Tamil
ocr = RapidOCR(
det_model_path="detection/v3/det.onnx",
rec_model_path="languages/tamil/rec.onnx",
rec_keys_path="languages/tamil/dict.txt"
)
# Telugu
ocr = RapidOCR(
det_model_path="detection/v3/det.onnx",
rec_model_path="languages/telugu/rec.onnx",
rec_keys_path="languages/telugu/dict.txt"
)</details>
Full Pipeline with Preprocessing
<details> <summary><b>Optional preprocessing for rotated/distorted documents</b></summary>
Preprocessing models improve accuracy on rotated or distorted documents:
from rapidocr_onnxruntime import RapidOCR
# Complete pipeline with preprocessing
ocr = RapidOCR(
det_model_path="detection/v5/det.onnx",
rec_model_path="languages/english/rec.onnx",
rec_keys_path="languages/english/dict.txt",
# Optional preprocessing
use_angle_cls=True,
angle_cls_model_path="preprocessing/textline-orientation/PP-LCNet_x1_0_textline_ori.onnx"
)
result, elapsed = ocr("rotated_document.jpg")When to use preprocessing:
- Document Orientation (
doc-orientation/): Scanned documents with unknown rotation (0°/90°/180°/270°) - Text Line Orientation (
textline-orientation/): Upside-down text lines (0°/180°) - Document Unwarping (
doc-unwarping/): Curved pages, warped documents, camera photos
Performance impact: +10-30% accuracy on distorted images, minimal speed overhead.
</details>
Repository Structure
.
├── detection/
│ ├── v5/
│ │ ├── det.onnx # 84 MB - PP-OCRv5 detection
│ │ └── config.json
│ └── v3/
│ ├── det.onnx # 2.3 MB - PP-OCRv3 detection
│ └── config.json
│
├── languages/
│ ├── english/
│ │ ├── rec.onnx # 7.5 MB
│ │ ├── dict.txt
│ │ └── config.json
│ ├── latin/ # 32 languages
│ ├── eslav/ # Russian, Bulgarian, Ukrainian, Belarusian
│ ├── korean/
│ ├── chinese/ # Chinese, Japanese
│ ├── thai/
│ ├── greek/
│ ├── hindi/ # Hindi, Marathi, Nepali, Sanskrit (v3)
│ ├── arabic/ # Arabic, Urdu, Persian (v3)
│ ├── tamil/ # Tamil (v3)
│ └── telugu/ # Telugu (v3)
│
└── preprocessing/
├── doc-orientation/
├── textline-orientation/
└── doc-unwarping/Model Selection
Technical Specifications
- Framework: PaddleOCR → ONNX
- ONNX Opset: 11
- Precision: FP32
- Input Format: RGB images (dynamic size)
- Inference: CPU/GPU via onnxruntime
Detection Model
- Input:
(batch, 3, height, width)- dynamic - Output: Text bounding boxes
Recognition Model
- Input:
(batch, 3, 32, width)- height fixed at 32px - Output: CTC logits → decoded with dictionary
Performance
Accuracy (PP-OCRv5)
FAQ
Q: Which version should I use? A: Use PP-OCRv5 models for best accuracy. Use PP-OCRv3 only for South Asian languages not available in v5.
Q: Can I mix v5 and v3 models? A: No. Use detection/v5/det.onnx with v5 recognition models, and detection/v3/det.onnx with v3 recognition models.
Q: GPU acceleration? A: Install onnxruntime-gpu instead of onnxruntime for 10x faster inference.
Q: Commercial use? A: Yes. Apache 2.0 license allows commercial use.
Credits
- Original Models: PaddlePaddle Team
- Conversion: paddle2onnx
- Source: PP-OCRv5 Collection
Links
- PaddleOCR GitHub
- PaddleOCR Documentation
- ONNX Runtime
- monkt.com - Document processing pipeline
License: Apache 2.0
