openocr-mlt ONNX Models
ONNX inference models for multilingual OCR with the openocr-mlt Python package. The bundle combines ScriptMoE text recognition with PP-OCRv6 medium text detection and supports cropped text recognition and whole-page OCR.
Model Details
| Property | Value |
|---|---|
| Recognition | ScriptMoE, autoregressive Prefill/Decode with KV caching |
| Detection | PP-OCRv6 medium ONNX |
| Precision | FP32 |
| Effective batch size | 1 |
| Maximum recognition length | 100 decoding steps |
| Validated runtime | ONNX Runtime 1.20.0 |
| Compatible package | openocr-mlt 0.3.0.dev15 |
The archive contains 40 files: recognition graphs, shared weights, a character dictionary, a model manifest, and the detector. The CUDA Prefill stage uses 33 partitioned graphs with shared weights. The Python package selects the CPU or CUDA execution path.
Files
| File | Description |
|---|---|
| scriptmoe-medium-fp32-20261101-v1.tar.gz | Complete model bundle |
| model-bundle.json | Model file sizes and SHA256 checksums |
| SHA256SUMS | Repository file checksums |
| THIRD_PARTY_NOTICES.md | Model sources and licensing information |
Archive size: 213,794,128 bytes.
Archive SHA256: ee43e7358066ddf1286f61983024dc407808e350b1dd57eb986523eaf9417ad3.
Usage
Install the compatible openocr-mlt wheel with the CPU or CUDA extra. Download the model archive to the working directory and import it into a local cache:
python -m openocr_mlt fetch-models \
--source ./scriptmoe-medium-fp32-20261101-v1.tar.gz \
--cache-dir ./models-cache --offline
Run OCR on an image:
from openocr_mlt import OpenOCRMLT, fetch_models
models = fetch_models(cache_dir="./models-cache", offline=True)
with OpenOCRMLT(
model_dir=models["recognition_dir"],
det_model_dir=models["detector_dir"],
device="cpu",
) as ocr:
print(ocr.ocr("/path/to/your/image.png").to_dict())
Replace the image path with an existing image. For CUDA, use the CUDA installation and set device="cuda:0". Model loading and OCR use local files; the import command verifies the archive and model checksums.
Evaluation
The following results use the same FP32 recognition graphs and detector as this bundle. Recognition quality was evaluated with openocr-mlt 0.3.0.dev14; the CC-OCR CPU evaluation was completed on November 1, 2026 with the same version.
| Task | Data | Metric | Result |
|---|---|---|---|
| Recognition, CUDA | TextMuSS, 10,899 crops | Official normalized weighted accuracy | 85.0812% |
| Recognition, CUDA | TextMuSS, 10,899 crops | Ten-group macro accuracy | 81.0928% |
| Whole-page OCR, CPU and CUDA | CC-OCR, 100 held-out pages | Macro text F1 | 72.5849% |
| Whole-page OCR, CPU and CUDA | CC-OCR, 100 held-out pages | Micro text F1 | 79.4545% |
The CC-OCR evaluation covers a fixed 200-page subset across ten languages, with 100 development pages and 100 held-out pages. Evaluation uses FP32, batch size 1, recognition threshold 0.7, maximum page side 2,000 pixels, and a recognition length limit of 100. The standard API recognition threshold is 0.5 and page resizing is disabled by default.
Runtime and Limitations
Validated on Linux x86_64 with Python 3.10.12, ONNX Runtime 1.20.0, an Intel Xeon Gold 6226R CPU, and an NVIDIA RTX 3090 GPU. Images are processed serially with effective batch size 1. One cross-device recognition whitespace difference was observed on TextMuSS. Accuracy and runtime depend on image content and the execution environment.
Sources and Licensing
Recognition derives from ScriptMoE, upstream revision 5dde99867aaee6b4af3e75a3020b225eab17ac53. Detection uses PP-OCRv6_medium_det_onnx.tar from Paddle's official model storage. Component sources and licensing information are listed in THIRD_PARTY_NOTICES.md.