Advance Guide

Performance & Benchmarks

Inference latency, memory consumption, and benchmark comparison across x86_64, ARM64, and mobile hardware.

RustO! is engineered from the ground up for low-latency, memory-efficient OCR on both server clusters and edge mobile devices.

📊 Cross-Hardware Benchmark Matrix

Measured on standard A4 invoice scans (150 DPI, ~1200×1700 px, ~25 text blocks) using PP-OCRv6 Tiny:

Hardware PlatformDetection LatencyRecognition Latency (Batch 6)Total LatencyPeak Memory (RAM)
AMD Ryzen 9 7950X (16-Core)~32 ms~48 ms⚡ ~80 ms~85 MB
Apple M3 Max (macOS)~28 ms~42 ms⚡ ~70 ms~92 MB
Intel Core i7-13700K~35 ms~52 ms⚡ ~87 ms~88 MB
Apple iPhone 15 Pro (A17 Pro)~45 ms~65 ms⚡ ~110 ms~65 MB
Snapdragon 8 Gen 3 (Android)~52 ms~78 ms⚡ ~130 ms~72 MB
Raspberry Pi 5 (Broadcom 2.4GHz)~140 ms~210 ms⚡ ~350 ms~110 MB

🏎️ Comparison: RustO! vs OpenCV + ONNXRuntime C++

DimensionRustO! (Pure Rust + RTen)OpenCV + ONNX C++ PipelineAdvantage
Core Binary Size~5 MB (Self-contained)~55 MB+ (libopencv, onnxruntime shared libs)📦 10x smaller
Accuracy Parity99.3%+Baseline (100%)🎯 Identical bounding boxes
Peak Memory Overhead~85 MB - 120 MB~250 MB - 350 MB🔒 50%+ lower RAM
C/C++ MarshalingZero overhead (Pure Rust buffers)Continuous Mat-to-Tensor array copying⚡ Eliminates IPC copies
Thread SafetyMemory safe (Rust borrow checker)Manual pointers & thread locks🛡️ Data-race free

⚡ Performance Optimizations in RustO!

1. Pure Rust Image Preprocessing

Traditional OCR pipelines rely on heavy OpenCV shared libraries for resizing, morphological dilation, and contour tracing. RustO! implements these algorithms directly in pure Rust with SIMD auto-vectorization, eliminating inter-library marshalling and memory allocations.

2. Multi-Core Rayon Parallelism

After DBNet detects bounding polygons, perspective affine cropping, rectification, and batch tensor preparation are distributed across available CPU cores via Rayon:

// Internally cropped text candidate boxes are parallelized across threads:
let crop_imgs: Vec<Mat> = padded_boxes.par_iter().map(|b| {
    get_rotate_crop_image(&padded, b).unwrap()
}).collect();

3. Aggressive Release Compiler Profile

The production release profile enables Fat Link-Time Optimization (LTO), single codegen unit compilation, and aggressive dead code elimination:

[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
strip = true
panic = "abort"