Skip to content

Introduction

EasyOCR’s accuracy. Rust’s speed and footprint.

EasyOCR is an accurate, widely used OCR toolkit — but it’s a PyTorch stack: a Python interpreter, a multi-gigabyte runtime, and a heavy process to keep warm. sceptre reimplements EasyOCR’s pipeline from scratch in Rust — CRAFT text detection followed by gen2 CRNN recognition with CTC decoding, run over ONNX — and drops the Python/torch dependency entirely, while matching EasyOCR’s output on every script it supports.

What you get
Parity accuracyValidated against real EasyOCR output across all eight gen2 scripts — text (word/char-F1) and boxes (IoU).
Substantially faster, less memoryHigher throughput and a fraction of the peak RSS of the Python + torch process, measured like-for-like. See Benchmarks.
One binary, no PythonA single executable. Models download once from Hugging Face, cache locally, and run offline thereafter.
Three surfacesThe same engine as a Rust library, a CLI (sceptre), and an MCP server for agents.
Native or pure-RustONNX Runtime (ort) for native speed, or a pure-Rust backend (tract) for WASM/Android, behind one seam.
  • Library — add sceptre as a dependency and call Reader::builder().build() from your own Rust code. See Library guide.
  • CLI — install the sceptre binary and run OCR from the command line or a shell pipeline. See CLI guide.
  • MCP server — run sceptre mcp to expose a readtext tool to any MCP-capable agent. See MCP server guide.

sceptre targets EasyOCR’s current, actively maintained path:

  • Detection: the CRAFT model only.
  • Recognition: all eight gen2 (*_g2) recognizers — English, Latin, Chinese (simplified), Japanese, Korean, Cyrillic, Telugu, Kannada.
  • Decoding: greedy CTC decoding.

Legacy gen1 recognizer models, DBNet detection, and beam-search decoding are out of scope. Model ONNX artifacts are first-party exports built from EasyOCR’s weights and hosted on the sceptre-ocr Hugging Face org (Apache-2.0). See Models & parity and ADR 0002 for the full rationale.