Files
breakpilot-lehrer/docs-src/services/klausur-service/TrOCR-ONNX.md
Benjamin Admin be7f5f1872 feat: Sprint 2 — TrOCR ONNX, PP-DocLayout, Model Management
D2: TrOCR ONNX export script (printed + handwritten, int8 quantization)
D3: PP-DocLayout ONNX export script (download or Docker-based conversion)
B3: Model Management admin page (PyTorch vs ONNX status, benchmarks, config)
A4: TrOCR ONNX service with runtime routing (auto/pytorch/onnx via TROCR_BACKEND)
A5: PP-DocLayout ONNX detection with OpenCV fallback (via GRAPHIC_DETECT_BACKEND)
B4: Structure Detection UI toggle (OpenCV vs PP-DocLayout) with class color coding
C3: TrOCR-ONNX.md documentation
C4: OCR-Pipeline.md ONNX section added
C5: mkdocs.yml nav updated, optimum added to requirements.txt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-23 09:53:02 +01:00

2.3 KiB

TrOCR ONNX Runtime

Uebersicht

TrOCR (Transformer-based OCR) kann sowohl mit PyTorch als auch mit ONNX Runtime betrieben werden. ONNX bietet deutlich reduzierten RAM-Verbrauch und schnellere Inferenz — ideal fuer den Offline-Betrieb auf Hardware Tier 2 (8 GB RAM).

Export-Prozess

Voraussetzungen

  • Python 3.10+
  • optimum>=1.17.0 (Apache-2.0)
  • onnxruntime (bereits installiert via RapidOCR)

Export ausfuehren

python scripts/export-trocr-onnx.py --model both

Dies exportiert:

  • models/onnx/trocr-base-printed/ (~85 MB fp32 → ~25 MB int8)
  • models/onnx/trocr-base-handwritten/ (~85 MB fp32 → ~25 MB int8)

Quantisierung

Int8-Quantisierung reduziert Modellgroesse um ~70% mit weniger als 2% Genauigkeitsverlust.

Runtime-Konfiguration

Umgebungsvariablen

Variable Default Beschreibung
TROCR_BACKEND auto Backend-Auswahl: auto, pytorch, onnx
TROCR_ONNX_DIR (siehe unten) Pfad zu ONNX-Modellen

Backend-Modi

  • auto (empfohlen): ONNX wenn verfuegbar, sonst PyTorch Fallback
  • pytorch: Erzwingt PyTorch (hoeherer RAM, aber bewaehrt)
  • onnx: Erzwingt ONNX (Fehler wenn Modell nicht vorhanden)

Modell-Pfade (Suchpfade)

  1. $TROCR_ONNX_DIR/trocr-base-{variant}/
  2. /root/.cache/huggingface/onnx/trocr-base-{variant}/ (Docker)
  3. models/onnx/trocr-base-{variant}/ (lokale Entwicklung)

Hardware-Anforderungen

Metrik PyTorch float32 ONNX int8
Modell-Groesse ~340 MB ~50 MB
RAM (Printed) ~1.1 GB ~300 MB
RAM (Handwritten) ~1.1 GB ~300 MB
Inferenz/Zeile ~120 ms ~40 ms
Mindest-RAM 4 GB 2 GB

Benchmark

# PyTorch Baseline (Sprint 1)
python scripts/benchmark-trocr.py > benchmark-baseline.json

# ONNX Benchmark
python scripts/benchmark-trocr.py --backend onnx > benchmark-onnx.json

Benchmark-Vergleiche koennen im Admin unter /ai/model-management eingesehen werden.

Verifikation

Der Export-Script verifiziert automatisch, dass ONNX-Output weniger als 2% von PyTorch abweicht. Manuelle Verifikation:

# Im Container
python -c "
from services.trocr_onnx_service import is_onnx_available, get_onnx_model_status
print('Available:', is_onnx_available())
print('Status:', get_onnx_model_status())
"