Instructions to use plaincompute/ppocr-mlx with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use plaincompute/ppocr-mlx with MLX:
# Download the model from the Hub pip install huggingface_hub[hf_xet] huggingface-cli download --local-dir ppocr-mlx plaincompute/ppocr-mlx
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
PP-Structure / PP-OCR Models β MLX
This repository is an MLX conversion of the
PaddlePaddle PP-Structure and PP-OCR model families. Every subdirectory holds a
converted MLX weights file (model.mlx.safetensors) alongside the original source weights
and configs, so the models can run natively and efficiently on Apple Silicon (M-series).
The models are converted from the official PaddlePaddle / Hugging Face
transformers safetensors checkpoints. They
cover the full document-intelligence pipeline: layout analysis, text detection &
recognition, orientation & rectification, table recognition, and formula recognition.
See each subdirectory's own
README.mdfor model-specific details, accuracy metrics, and the original PaddlePaddle usage examples.
Repository layout
Models are grouped by pipeline stage. Below, β³ links each folder to its source model.
Document layout analysis
| Folder | Model | Description |
|---|---|---|
doclayoutv3/ |
PP-DocLayoutV3 | RT-DETR-style detector (HGNetV2-L backbone) for 25 document layout regions (title, text, figure, table, formula, β¦). |
Text detection (PP-OCRv5 / v6)
| Folder | Model | Description |
|---|---|---|
det/ |
PP-OCRv5_mobile_det | Legacy mobile text-line detector (LCNetV3 backbone, scale 0.75). |
det_v6_medium/ |
PP-OCRv6_medium_det | Largest v6 detector β LCNetV4 backbone + RepLKFPN neck, 15.5M params. |
det_v6_small/ |
PP-OCRv6_small_det | Mid-tier v6 detector, 2.48M params. |
det_v6_tiny/ |
PP-OCRv6_tiny_det | Smallest v6 detector, 0.43M params. |
Text recognition (PP-OCRv5 / v6)
| Folder | Model | Description |
|---|---|---|
rec/ |
PP-OCRv5_mobile_rec | Legacy mobile recognizer (LCNetV3 backbone). |
en_rec/ |
PP-OCRv5_mobile_rec (EN) | English-dictionary variant of the mobile recognizer. |
server_rec/ |
PP-OCRv5_server_rec | Server-grade recognizer for ZH/EN/JA + handwriting, vertical text, pinyin, rare characters. |
rec_v6_medium/ |
PP-OCRv6_medium_rec | Largest v6 recognizer β LCNetV4 + EncoderWithLightSVTR, CTC+NRTR heads, 50 languages, 19M params. |
rec_v6_small/ |
PP-OCRv6_small_rec | Mid-tier v6 recognizer, 5.2M params, 50 languages. |
rec_v6_tiny/ |
PP-OCRv6_tiny_rec | Smallest v6 recognizer, 1.1M params, 49 languages. |
Orientation & rectification
| Folder | Model | Description |
|---|---|---|
ori/ |
PP-LCNet_x1_0_doc_ori | Document image orientation classifier (0Β°/90Β°/180Β°/270Β°), 99.06% avg accuracy. |
uvdoc/ |
UVDoc | Document image unwarping / geometric rectification (CER 0.179 on DocUNet benchmark). |
Table recognition
| Folder | Model | Description |
|---|---|---|
table_cls/ |
PP-LCNet_x1_0_table_cls | Wired vs. wireless table classifier, 94.2% Top-1. |
table_structure/ |
SLANet | Legacy table-structure recognition (LCNet backbone, scale 1). |
table_wired/ |
SLANeXt_wired | Wired-table structure recognition, 69.65% accuracy, 351M. |
table_wireless/ |
SLANeXt_wireless | Wireless-table structure recognition, 69.65% accuracy, 351M. |
table_cell_wired/ |
RT-DETR-L_wired_table_cell_det | Wired-table cell detector (RT-DETR-L), 82.7% Top-1, 124M. |
table_cell_wireless/ |
RT-DETR-L_wireless_table_cell_det | Wireless-table cell detector (RT-DETR-L), 82.7% Top-1, 124M. |
Formula recognition
| Folder | Model | Description |
|---|---|---|
formula/ |
PP-FormulaNet_plus-L | Encoder-decoder vision-language model that converts formula images to LaTeX (~182M params, 50k-token vocabulary). |
Pipeline
These modules compose into the standard PP-Structure document pipeline:
ββββββββββββββ
page image β β doc ori β (optional) orient the page
βββββββ¬βββββββ
βββββββΌβββββββ
β uvdoc β (optional) dewarp the page
βββββββ¬βββββββ
βββββββΌβββββββ
β doclayoutv3β detect layout regions
βββββββ¬βββββββ
βββββββββββΌβββββββββββ
βΌ βΌ βΌ
text branch table formula
ββββββββ βββββββββ βββββββββ
β det β β cls β βformulaβ
ββββ¬ββββ βββββ¬ββββ βββββββββ
β βββββ΄βββββββ
βΌ βΌ βΌ
ββββββ cell det structure
βrec β (wired/ (wired/
ββββββ wireless) wireless)
For the OCR sub-pipeline, PP-OCRv6 pairs det_v6_* with the matching rec_v6_* tier
(e.g. det_v6_medium + rec_v6_medium), selectable across medium / small / tiny for
server-to-edge trade-offs.
Loading the MLX weights
Each folder follows the same convention β the MLX weights live in model.mlx.safetensors
and the architecture in config.json:
<model>/
βββ model.mlx.safetensors # MLX-converted weights (load with mlx.nn / mlx-vlm)
βββ model.safetensors # original source weights
βββ config.json # architecture config
βββ preprocessor_config.json (or processor_config.json)
Load with MLX (Python):
import mlx.core as mx
from mlx.utils import tree_unflatten
weights = mx.load("det_v6_medium/model.mlx.safetensors")
params = tree_unflatten(list(weights.items()))
These are weight conversions only. A matching MLX model implementation (e.g. via mlx-vlm or a custom MLX module) is required to run inference. Refer to each subdirectory's
config.jsonfor the exact architecture.
Model sources
Original checkpoints and documentation from the PaddleOCR project and the PaddlePaddle Hugging Face organization.
License
Apache 2.0. See the LICENSE of the upstream PaddleOCR project for details.
Quantized