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.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support