OCR im Jahr 2026: Klassische Pipelines, VLMs und Document AI
Automatische Übersetzung Dieser Artikel wurde automatisch aus der englischen Originalversion übersetzt.
Artikel-Update
Ursprünglich veröffentlicht am 4. März 2026. Überprüft und aktualisiert am 6. September 2026. Das Update ergänzt neuere OCR- und Vision-Model-Kandidaten, Benchmark-Referenzen und Hinweise zur Interpretation von Ergebnissen der Dokumentextraktion.
OCR-Leaderboards widersprechen sich, weil sie unterschiedliche Dokumente, Outputs und Judges testen. Die versionierte Benchmark-Tabelle von OmniDocBench und die Live-Präferenzabstimmungen der OCR Arena können zu unterschiedlichen Reihenfolgen führen; die Scores sind nicht austauschbar, aber die Abweichung ist aufschlussreich. Für eine Produktionsentscheidung werden Dokumente und Metriken aus dem tatsächlichen Workload benötigt.
Vision-Language-Modelle (VLMs) können Layout, Handschrift, Tabellen und beschädigte Bilder verarbeiten, an denen eine einfache Texterkennungspipeline scheitert. Traditionelle Engines bleiben bei sauberem Druck konkurrenzfähig, insbesondere wenn CPU-Latency und Betriebskosten wichtig sind. Der untenstehende, zeitgebundene Snapshot umfasst PaddleOCR-VL 1.6 und dots.mocr mit unterschiedlichen Trade-offs bei Hardware, Datenschutz und Output. Prüfen Sie jedes Projekt, bevor Sie eine aktuelle Entscheidung treffen.
Begleit-Repository: The OCR Gauntlet enthält drei anleitende Notebooks und fünf heruntergeladene Samples. Es handelt sich um eine Smoke-Demo, nicht um ein validiertes Engine-Ranking. In der untersuchten Revision wählen Docling-Labels die beworbene Pipeline nicht zuverlässig aus, Referenzen zur Receipt-Erkennung enthalten Annotation-Keys, Fehler verschwinden aus den Durchschnittswerten, und der Gemini-Request verwendet
gemini-2.5-flash, obwohl das Notebook ihn als Gemini 3 Flash bezeichnet. Auch die ANLS- und Kostenszenarien für ganze Seiten müssen separat interpretiert werden. Diese Implementierungsfehler müssen behoben werden, bevor die Scores zur Auswahl eines Models verwendet werden.
Die kompakte Version zur Model-Auswahl finden Sie unter Best OCR Models in 2026: Classical OCR, PaddleOCR-VL, VLMs.
OCR bestimmt inzwischen die nachgelagerte Qualität
OCR unterstützt seit Langem Archive, Postsysteme, Accessibility-Tools und Dokumentenmanagement. RAG und Dokument-Agents haben seine Fehlermodi für eine größere Gruppe von Engineers sichtbar gemacht: Ein nachgelagertes Model kann Text oder Tabellenstruktur nicht wiederherstellen, die bei der Extraktion verworfen wurden.
Die Retrieval-Qualität Ihres RAG-Systems ist durch die OCR-Qualität begrenzt. Wenn die Extraktion eine Tabelle beschädigt, ein Datum falsch liest oder einen Absatz auslässt, können spätere Änderungen an Chunking und Embedding die fehlenden Informationen nicht wiederherstellen. Solche Fehler können eine Vertragsklausel verbergen, einen Rechnungsbetrag verändern oder eine medizinische Akte beschädigen.
OCR ist daher neben Parsing, Chunking, Embedding und Indexierung Teil der Retrieval- und Agent-Infrastruktur. Seine Fehler benötigen eine eigene Evaluation, statt in einem einzigen End-to-End-Score aufzugehen.
Was OCR im Zeitalter von Foundation Models bedeutet
OCR wandelt Text in einem Bild in maschinenlesbare Zeichen um. Document AI ist das umfassendere System darum herum: Layoutanalyse, Parsing von Tabellen und Formeln, Feldextraktion, semantisches Reasoning, Provenance und Validierung. Einige Papers verwenden „OCR-2.0“ für End-to-End-Modelle, die mehrere dieser Stufen kombinieren. Dieses Label sollte jedoch die Unterscheidung zwischen Recognition und Dokumentverständnis nicht verwischen.
Die traditionelle OCR-Pipeline besteht aus drei Kernstufen:
- Text Detection: Regionen mit Text lokalisieren (z. B. CRAFT, DBNet).
- Text Recognition: erkannte Regionen in Zeichenfolgen umwandeln (z. B. CRNN).
- Post-Processing: Rechtschreibprüfung und Korrektur durch ein Language Model.
Das funktioniert gut bei sauberen Dokumenten, aber Fehler bei Detection, Recognition und Post-Processing können sich aufaddieren. Messen Sie sowohl die Zeichengenauigkeit als auch die nachgelagerte Feldgenauigkeit, damit eine lesbare Seite keinen falschen Betrag oder Identifier verdeckt.
Einige End-to-End-VLM-Pfade fassen größere Teile dieser Pipeline in einem Vision Encoder und einem Language Decoder zusammen. Models wie GOT-OCR 2.0 können Text und Struktur gemeinsam ausgeben, während allgemeine VLMs Felder auch auf ein angefordertes Schema abbilden können. Die Trade-offs hängen vom Workload ab: Latency, GPU- oder API-Kosten und das Risiko plausiblen Texts, der im Bild nicht vorhanden ist.
Praktischer Hinweis: Ein Image-only Model benötigt gerasterte Seiten, während ein Service, der PDF akzeptiert, die Konvertierung intern übernehmen kann. Deskewing, Rescaling und Bereinigung sind pipelinespezifische Experimente, keine zwingenden Verbesserungen. AWS Textract empfiehlt, unterstützte Eingaben beizubehalten, statt sie pauschal zu konvertieren oder herunterzuskalieren. Output-Parsing und Validierung gehören weiterhin zur Anwendung.
Was OCR-Benchmarks messen – und was nicht
Die folgenden Datasets zeigen, wie OCR-Aufgaben unterschiedliche Metriken hervorbringen. Dataset-Größen und Metriken beschreiben die jeweils genannte Dataset-Version; für Model-Scores ist das aktuelle Leaderboard des jeweiligen Projekts maßgeblich.
| Dataset | Jahr | Testgröße | Sprachen | Primäre Metrik |
|---|---|---|---|---|
| FUNSD | 2019 | 50 Docs | Englisch | F1 |
| SROIE | 2019 | 400 Testbilder | Englisch | F1 |
| CORD | 2019 | 100 Receipts | Indonesisch | F1 |
| IAM | 1999 | Split-abhängig | Englisch | CER |
| OCRBench v2 | 2024 | 10.000 QA-Paare | EN + CN | Score /100 |
| OmniDocBench v1.6 | 2026 | 1.651 Seiten | EN + CN | Composite |
Die Zeilenanzahl von IAM hängt vom gewählten Writer-Split und Recognition-Protokoll ab; hier wird keine einzelne Anzahl von Testzeilen vorausgesetzt.
Die Lücke zwischen „Benchmark“ und „Arena“
Automatisierte Benchmark-Rankings können mit menschlichen Präferenzen kollidieren, weil sich Input-Verteilung und Bewertungskriterien unterscheiden.
In der OCR Arena stimmen User blind über Head-to-Head-Outputs ab. Die Live-Reihenfolge ändert sich mit neuen Battles und ist daher kein reproduzierbarer historischer Benchmark-Snapshot. Die versionierte OmniDocBench-Tabelle weiter unten beantwortet mit Dataset-Metriken eine andere Frage. Kombinieren Sie die beiden Leaderboards nicht zu einem einzigen Score.
Zu den wahrscheinlichen Einflussfaktoren gehören Dokumentmix, Output-Formatierung, Sprachabdeckung und Kriterien des Judges. Veröffentlichte Zahlen eignen sich für ein Screening, die finale Auswahl benötigt jedoch ein Held-out-Set aus dem Ziel-Workload.
Traditionelle OCR-Engines: weiterhin relevant
Wenn traditionelle Engines bei komplexen Daten schlechter sind, warum sollte man sie verwenden? Weil sie bei sauberen strukturierten Daten schnell und günstig sind.
Traditionelle Engines sind nützliche Baselines, da sie lokal auf der CPU laufen können. Ihre Latency und Accuracy hängen vom gewählten Model, der Seitenauflösung, der Sprache, dem Preprocessing und der Hardware ab. Benchmarken Sie sie daher auf denselben gelabelten Seiten, die auch für die VLM-Evaluation verwendet werden.
| Engine | Deployment | Nützliche Baseline für |
|---|---|---|
| Tesseract 5.5 | Lokale CPU | Sauberen Drucktext und etablierte Schriften |
| EasyOCR | Lokales PyTorch auf CPU oder GPU | Prototypen und Scene Text |
| PaddleOCR 3.x | Lokale CPU, GPU und Mobile-Varianten | Multilinguales OCR und Deployment-Toolchains |
Tesseract für sauberen Druck
Tesseract (v5.5.x, Apache 2.0) ist eine ausgereifte, primär CPU-basierte Engine mit über 100 Language Packs. Die Accuracy bei sauberem Druck kann nach geeigneter Rasterisierung und Preprocessing hoch sein, doch Handschrift, Scene Text und komplexe Layouts müssen separat getestet werden. Der wichtigste Vorteil ist ein kleines lokales CPU-Deployment. Experimenteller OpenCL-Support belegt keinen allgemeinen Performancevorteil.
EasyOCR
EasyOCR kombiniert einen CRAFT-Detector mit einem CRNN-Recognizer. Mit vollständiger PyTorch-GPU-Beschleunigung ist es eine schnelle Option für schnelles Prototyping und Scene Text.
Das Snippet benötigt pip install easyocr, PyTorch, die heruntergeladenen Model Weights von EasyOCR und ein lokales receipt.jpg. Es wurde auf Syntax geprüft, aber vom Markdown-Runner des Repositorys nicht ausgeführt.
import easyocr
# Three lines for complete OCR
reader = easyocr.Reader(["en"])
result = reader.readtext("receipt.jpg")
# Returns: [(bbox, text, confidence), ...]
PaddleOCR 3
PaddleOCR 3 bündelt gepflegte OCR-, Dokument-Parsing- und Deployment-Pipelines. Der aktuelle Quick Start verwendet die predict()-API und explizite Orientation-Einstellungen. Pinnen Sie das paddleocr-Package und die ausgewählte Pipeline, da Beispiele aus 2.x mit .ocr(..., cls=True) nicht zur 3.x-API passen.
Das Snippet benötigt pip install "paddleocr>=3,<4", eine kompatible PaddlePaddle-Runtime, heruntergeladene Model Weights und ein lokales receipt.jpg. Es wurde auf Syntax geprüft, aber vom Markdown-Runner des Repositorys nicht ausgeführt.
from paddleocr import PaddleOCR
ocr = PaddleOCR(
use_doc_orientation_classify=False,
use_doc_unwarping=False,
use_textline_orientation=False,
)
for result in ocr.predict("receipt.jpg"):
result.print()
result.save_to_json("output")
Spezialisierte und allgemeine VLM-Optionen
Schiefe Receipts, verzogene Produktetiketten, Handschrift und dichte Layouts sind die Fälle, in denen spezialisierte oder allgemeine VLMs einen Test gegen traditionelle Engines rechtfertigen.
Die Welle spezialisierter OCR-Modelle
Die Model-Liste in diesem Abschnitt wurde am 06.09.2026 geprüft. Sie ist kein aktuelles Ranking. Zu den spezialisierten Dokument-Parsing-Modellen, die zwischen 2024 und 2026 veröffentlicht wurden, gehören:
- PaddleOCR-VL 1.6: Eine zweistufige Pipeline, die zunächst eine Layoutanalyse durchführt und anschließend eine 0.9B-VLM-Komponente auf erkannten Regionen einsetzt. PaddleOCR meldet 109 Sprachen und 96,3 auf OmniDocBench v1.6; ordnen Sie dieses Vendor-Ergebnis weiterhin der genannten Pipeline und Benchmark-Version zu.
- dots.mocr (3B): Das Rebranding von dots.ocr-1.5 vom März 2026 parst Text und strukturierte Grafiken, einschließlich einer SVG-orientierten Variante. Das ursprüngliche dots.ocr bleibt ein separates Model von 2025.
- GOT-OCR 2.0: Ein vereinheitlichtes Model mit 580M Parametern, das Plain Text und formatierte Outputs wie Markdown und LaTeX ausgibt. Das offizielle Repository veröffentlicht keine minimale VRAM-Angabe. Messen Sie daher den Spitzenverbrauch mit der gewählten Runtime, Precision, Bildgröße und dem Output-Limit.
- DeepSeek-OCR2: Der im offiziellen Repository zum Snapshot-Zeitpunkt dokumentierte Checkpoint, der auf das ursprüngliche DeepSeek-OCR-Model der 3B-Klasse folgt, mit dem „contextual optical compression“ eingeführt wurde. Behandeln Sie Throughput-Angaben für beide Generationen als hardware- und datasetspezifisch.
- Mistral OCR 4.1 (
mistral-ocr-4-1): Die Model Card datiert die Veröffentlichung auf den 16. Juli 2026; der Changelog vermerkt die allgemeine Verfügbarkeit am 31. August. Ergänzt wurden Block-Confidence sowie Absatz-Boxen und Strukturlabels. Kalibrieren Sie die Confidence anhand der Feldkorrektheit, bevor Sie Ergebnisse automatisch akzeptieren. Der OCR-3-Identifier des Begleitprojekts ist historischer Ausführungskontext, nicht das aktuelle Candidate-Model oder der aktuelle Preis. Pinnen Sie für Vergleiche eine explizite Version; einlatest-Alias kann sich ändern. - Granite-Docling 258M: Gibt DocTags aus, die in ein strukturiertes
DoclingDocumentkonvertiert werden können. Doclings VLM-Pipeline muss explizit ausgewählt werden; ein Default-Converter ist kein Beleg dafür, dass dieses Model ausgeführt wurde. - MinerU und olmOCR: Kandidaten für strukturierte Konvertierung beziehungsweise Dokument-Linearisierung. Prüfen Sie die vollständigen Pipelines und die Lizenzen der ausgewählten Models. Die Model-Bedingungen von MinerU ergänzen die Apache-2.0-Basis um weitere Bedingungen; allein die Lizenz der Library klärt daher die Deployment-Rechte nicht.
Frontier VLMs
Allgemeine VLMs sind eine weitere Option, wenn die Aufgabe Extraktion mit visuellem oder semantischem Reasoning verbindet. Diese Kandidaten wurden am 06.09.2026 geprüft und werden im folgenden Gateway-Beispiel verwendet. Sie sind eine erste Shortlist, kein OCR-Ranking:
- Gemini 3.8 Flash (Google): Ein allgemein verfügbares multimodales Model mit Bildeingabe und Structured Outputs. Verwenden Sie beim Start eines neuen Vergleichs die stabile ID statt des älteren Beispiels mit Gemini 3 Flash Preview.
- Claude Sonnet 5 (Anthropic): Eine neuere Sonnet-Generation für einen gehosteten Vergleich. Testen Sie Transkriptionsgenauigkeit und Feldextraktion mit eigenen Dokumenten; Verbesserungen beim allgemeinen Reasoning belegen keine OCR-Accuracy.
- Qwen3.8-27B (Alibaba): Ein Open-Weight-Vision-Language-Model, das über ein Gateway oder self-hosted getestet werden kann. Die Größe von 27B macht es zu einer anderen Deployment-Option als das frühere Qwen3-VL 8B, das bei begrenztem Speicher weiterhin eine nützliche kleinere Baseline darstellt.
Eine neuere Veröffentlichung gehört in das Testset, ist aber keine automatische Beförderung in die Produktion. Vergleichen Sie unter demselben Protokoll Feldkorrektheit, Abstention, Latency und Kosten pro akzeptiertem Dokument.
Latency nach Tier messen
Messen Sie die Seiten-Latency mit der tatsächlichen Auflösung, Batch-Größe, Hardware oder Provider-Region und Output-Länge. Beziehen Sie Preprocessing und Retries in die Gesamtsumme ein; ein reines Model-Timing kann keine erfolgreiche Seite bepreisen.
Metriken: das Wesentliche messen
Wählen Sie eine Metrik, die zum Output-Typ passt:
- CER und WER für Plain Text. Character und Word Error Rate hängen von Normalisierungsentscheidungen wie Groß-/Kleinschreibung, Whitespace und Interpunktion ab. Legen Sie daher vor dem Model-Vergleich das Vergleichsprotokoll fest.
- Field Exact Match und Field F1 für Formulare und Receipts. Exact Match ist für ein einzelnes Feld binär; seine Rate ist der Anteil der evaluierten Felder, die bestehen. Berichten Sie die All-Fields-Korrektheit auf Dokumentebene separat. Definieren Sie für Field F1 Key/Value-Matching, Normalisierung, doppelte und fehlende Felder sowie Aggregation; ein korrekter Betrag, der der falschen Zeile zugeordnet ist, ist ein Fehler.
- TEDS für Tabellen. Tree-Edit-Distance-based Similarity vergleicht vorhergesagte und referenzierte HTML-Bäume und erkennt Struktur- und Zellinhaltsfehler, die CER verborgen bleiben.
- Reading-Order-Vergleich, wenn der Consumer eine lineare Sequenz benötigt. Vergleichen Sie geordnete Blöcke oder Spans direkt oder verwenden Sie eine order-aware Metrik; OmniDocBench evaluiert die Reading Order separat. Korrekte Zeichen und Tabellenzellen belegen nicht die Reihenfolge einer mehrspaltigen Seite.
- ANLS für Document VQA. Average Normalized Levenshtein Similarity bewertet Antworten gegen akzeptierte Referenzen. Die ursprüngliche ST-VQA-Definition vergibt
1 − normalized_distancenur, wenn die Distanz strikt unter 0,5 liegt, andernfalls null; verwendet wird der beste Score unter den akzeptierten Referenzen, anschließend wird über die Fragen gemittelt. DocVQA verwendet ANLS. Pinnen Sie bei der Reproduktion eines Scores die Normalisierung von Case, Whitespace und Distanz des Evaluators. Das Begleitprojekt bewertet stattdessen Strings ganzer Seiten und schließt die 0,5-Grenze ein; seine Variante entspricht daher nicht dem Benchmark-Protokoll.
CER/WER zählen Substitutionen, Löschungen und Einfügungen, geteilt durch Referenzzeichen beziehungsweise -wörter. Bei vielen Einfügungen können sie größer als eins werden. Geben Sie an, ob die Aggregation Corpus-Fehler und Referenzlängen summiert oder Dokument-Scores mittelt. Bewahren Sie Seite, Block, Bounding Box, Originaltext und Normalisierungshistorie auf, damit ein falsches Feld bis zum Bild zurückverfolgt werden kann.
Für Implementierungen: jiwer unterstützt CER/WER direkt, und TEDS-Implementierungen befinden sich im OmniDocBench-Repository.
VLMs mit OpenRouter testen
OpenRouter stellt ein OpenAI-kompatibles Gateway zu Models verschiedener Provider bereit. Model-IDs und unterstützte Request-Features ändern sich; prüfen Sie sie daher vor der Ausführung des Beispiels im aktuellen Katalog des Gateways.
Das Snippet benötigt pip install openai, ein OPENROUTER_API_KEY, Netzwerkzugriff, ein lokales receipt.jpg und von OpenRouter weiterhin unterstützte Model-IDs. Es wurde auf Syntax geprüft, aber vom Markdown-Runner des Repositorys nicht ausgeführt.
import base64
import os
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
def extract_text(image_path: str, model: str) -> str:
with open(image_path, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
response = client.chat.completions.create(
model=model,
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Extract all text from this image, preserving layout as markdown."},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_b64}"}},
],
}],
max_tokens=4096,
)
choice = response.choices[0]
if choice.finish_reason != "stop":
raise RuntimeError(f"{model} did not finish: {choice.finish_reason}")
if not choice.message.content:
raise RuntimeError(f"{model} returned no text (finish_reason={choice.finish_reason})")
return choice.message.content
# Compare models by changing one string
models = [
"google/gemini-3.8-flash",
"anthropic/claude-sonnet-5",
"qwen/qwen3.8-27b",
]
for model in models:
print(f"\n--- {model} ---\n{extract_text('receipt.jpg', model)[:200]}...")
Der OpenRouter-Model-Katalog führte am 06.09.2026 google/gemini-3.8-flash, anthropic/claude-sonnet-5 und qwen/qwen3.8-27b mit Bildeingabe und Structured-Output-Parametern. Katalog-Support beweist nicht, dass dieser exakte Request an jedem gerouteten Endpoint erfolgreich ist; für dieses Update wurde keine kostenpflichtige Inference ausgeführt.
Für Structured Extraction verwenden Sie response_format mit einem JSON Schema, wenn das ausgewählte Model und Gateway dies unterstützen. Dadurch kann die Response parsbar werden; extrahierte Werte werden dadurch nicht gegen das Bild validiert. Bei OpenRouter sorgt provider.require_parameters dafür, dass der Request fehlschlägt, wenn kein gerouteter Endpoint alle angeforderten Parameter unterstützt, statt auf einen Endpoint auszuweichen, der das Schema nicht einhalten kann. Der folgende Block wiederholt sein Setup, damit er unabhängig lesbar ist. Er benötigt weiterhin pip install openai, ein OPENROUTER_API_KEY, Netzwerkzugriff, ein lokales receipt.jpg und ein Model mit JSON-Schema-Unterstützung; der Repository-Runner prüft nur die Syntax.
import base64
import json
import os
from openai import OpenAI
with open("receipt.jpg", "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key=os.environ["OPENROUTER_API_KEY"],
)
response = client.chat.completions.create(
model="google/gemini-3.8-flash",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Extract only visible receipt fields. Copy amounts as source strings. Use null for absent or unreadable values; do not infer them. Use null for an unreadable item list, and [] only when no items are present."},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_b64}"}},
],
}],
max_tokens=4096,
response_format={
"type": "json_schema",
"json_schema": {
"name": "receipt",
"strict": True,
"schema": {
"type": "object",
"properties": {
"vendor": {"type": ["string", "null"]},
"date": {"type": ["string", "null"]},
"items": {
"type": ["array", "null"],
"items": {
"type": "object",
"properties": {
"description": {"type": ["string", "null"]},
"amount": {"type": ["string", "null"]},
},
"required": ["description", "amount"],
"additionalProperties": False,
},
},
"total": {"type": ["string", "null"]},
},
"required": ["vendor", "date", "items", "total"],
"additionalProperties": False,
},
},
},
extra_body={"provider": {"require_parameters": True}},
)
def completed_text(response, label: str) -> str:
choice = response.choices[0]
if choice.finish_reason != "stop":
raise RuntimeError(f"{label} did not finish: {choice.finish_reason}")
if not choice.message.content:
raise RuntimeError(
f"{label} returned no text (finish_reason={choice.finish_reason})"
)
return choice.message.content
receipt = json.loads(completed_text(response, "receipt extraction"))
Bewahren Sie die kopierten Betragsstrings zusammen mit den normalisierten Werten auf. Parsen Sie Geldbeträge nachgelagert mit Decimal- oder Integer-Arithmetik für Minor Units unter Angabe von Währung und Locale; Schema-Validität validiert keinen Zahlungsbetrag. Leiten Sie kritische Felder mit Nullwert zur Prüfung weiter.
Benchmark-Ergebnisse: Was die Zahlen tatsächlich zeigen
Die folgende Tabelle ist ein versionierter Snapshot: OmniDocBench v1.6_full, offizielles README beim Commit 09ba2b606662695b16aafe5f5e36b7ef020e11a8, veröffentlicht am 10.04.2026 und abgerufen am 09.08.2026. Alle vier Zeilen stammen aus dieser gepinnten Tabelle. Die Tabelle mischt keine Werte aus früheren Paper-Tabellen oder anderen Leaderboards.
| Model | Größe | Overall ↑ | Text Edit ↓ | Table TEDS ↑ |
|---|---|---|---|---|
| PaddleOCR-VL-1.5 | 0.9B | 94.93 | 0.038 | 91.67 |
| GLM-OCR | 0.9B | 95.22 | 0.044 | 92.83 |
| Gemini 3 Flash | — | 92.62 | 0.066 | 89.29 |
| dots.ocr | 3B | 90.77 | 0.048 | 87.18 |
Die Schlussfolgerung ist auf diese OmniDocBench-Version beschränkt: Die Model-Größe allein sagt den Score beim Dokument-Parsing nicht voraus. OmniDocBench verzeichnete später v1.7 und eine EvalScope-Integration. Änderungen beim Matching von Prediction und Reference können Scores auch bei identischem Model-Output verändern. Bewahren Sie die historischen Zeilen oben auf und vergleichen Sie neue Runs nur unter einem gepinnten Evaluator. Das Composite umfasst Text Edit Distance, Table TEDS und Formula CDM; die Reading Order benötigt ihr separates Ergebnis.
Das Begleitprojekt berechnet illustrative Metriken auf fünf Samples. Korrigieren Sie vor der Interpretation einer Zeile als vergleichbare Evidenz zunächst Pipeline-Identität, Recognition-Referenzen, Fehlerbehandlung, Model-Namen, Metrikprotokoll und Kostenannahmen.
OCR in Produktion deployen
Eine tiered Architektur kann CPU-Preprocessing von GPU- oder API-Inference trennen und teure Pfade für Dokumente reservieren, die sie benötigen.
Hinweis zur Orchestration: Tools wie Docling können Konvertierung und Batch-Processing koordinieren. Die Retry-Policy gehört weiterhin in die umgebende Anwendung oder den Service; auch Routing benötigt eigene Qualitätslabels und Schwellenwerte.
Das tiered Fallback-Muster
Beginnen Sie mit dem günstigsten Pfad, der das Qualitätsziel erreicht, und kalibrieren Sie das Routing auf gelabelten Seiten:
- Auf eingebetteten Text prüfen (Tier 0). Bei PDFs die Textebene mit
PyMuPDFoderpdfplumberprüfen, bevor Sie rastern; validieren Sie jedoch, dass die Ebene vollständig und korrekt geordnet ist. - Einen schnellen Model-Versuch starten. Verwenden Sie für Dokumentklassen, bei denen es das Ziel erreicht, eine traditionelle Engine.
- Kalibrierte Confidence evaluieren. Kombinieren Sie Model-Confidence mit Dokumentklasse, Feldkritikalität und Validierungsregeln.
- Auf ein stärkeres Model eskalieren. Leiten Sie unsichere Seiten an ein spezialisiertes oder allgemeines VLM weiter.
- Fehler mit hohem Risiko an einen Menschen eskalieren. Human Review ist eine separate Tier für Werte, deren Fehlerkosten den Automatisierungsvorteil übersteigen.
Hinweis zur Confidence: Rohe Zeichenwahrscheinlichkeiten sind nicht automatisch auf Feldkorrektheit kalibriert. Die untenstehende flächengewichtete Funktion ist eine Baseline für die Aggregation auf Seitenebene, kein universeller Router. Kalibrieren Sie sie anhand gelabelter Seiten und geben Sie kritischen Feldern eigene Regeln, da ein Seitendurchschnitt eine falsche ID oder einen falschen Gesamtbetrag verbergen kann.
def area_weighted_confidence(page):
"""Compute area-weighted confidence from one PaddleOCR 3.x result."""
total_area, weighted_sum = 0, 0
for (x_min, y_min, x_max, y_max), score in zip(
page["rec_boxes"], page["rec_scores"]
):
width = int(x_max) - int(x_min)
height = int(y_max) - int(y_min)
area = width * height
weighted_sum += score * area
total_area += area
return weighted_sum / total_area if total_area > 0 else 0
assert area_weighted_confidence({
"rec_boxes": [[0, 0, 300, 300]], "rec_scores": [0.5]
}) == 0.5
Bewahren Sie für jedes geplante Engine-/Dokument-Paar ein Ergebnis mit Status „success“, „error“ oder „skipped“ auf. Fehlgeschlagene, leere und abgeschnittene Outputs bleiben zusammen mit ihren angefallenen Kosten im Nenner der versuchten Dokumente. Berichten Sie Completion Rate, Fehler kritischer Felder unter den automatisch akzeptierten Ergebnissen, Review-Anteil, p50/p95 End-to-End-Latency und Kosten pro erfolgreich verarbeitetem Dokument. Verwenden Sie Converter-Objekte für Warm-Timings wieder und erfassen Sie die Initialisierung separat.
Kostenanalyse im großen Maßstab
Es gibt keinen universellen Break-even bei der Seitenmenge zwischen einer API und Self-Hosting. Erstellen Sie den Vergleich aus demselben Workload:
| Kostenkomponente | API-Pfad | Self-hosted-Pfad |
|---|---|---|
| Inference | Aktueller seiten- oder tokenbasierter Preis | GPU-Stunden bei gemessenen Seiten/Stunde |
| Idle-Kapazität | Üblicherweise vom Provider absorbiert | Auslastung und Kapazitätsreserve |
| Engineering | Integration und Provider-Monitoring | Deployment, Upgrades, Observability und On-Call |
| Datenverarbeitung | Transfer-, Aufbewahrungs- und Regionsbedingungen | Storage-, Netzwerk- und Compliance-Kontrollen |
| Qualitätsfehler | Retries und Human Review | Retries und Human Review |
Verwenden Sie eine gemeinsame Formel: monthly pages × cost per successful page + review cost + fixed operating cost. Eine „erfolgreiche Seite“ muss auf beiden Pfaden dieselben Text-, Tabellen- und Feldkriterien erfüllen. Providerpreise und GPU-Mieten ändern sich zu schnell, um eine dauerhaft belastbare Beschaffungsschätzung einzubetten.
Fehlerbehandlung: das Hallucination-Problem
VLM-Fehler können kontextuell plausibel und faktisch falsch sein. Aus einem Receipt-Betrag von „$42.50“ könnte „$45.20“ werden: syntaktisch gültig, aber für eine Rechtschreibprüfung unsichtbar.
Synthetisches Fehlerbeispiel: Ein VLM extrahiert drei Receipt-Positionen und einen angegebenen Gesamtbetrag, die untereinander konsistent sind, aber eine Ziffer weicht vom Bild ab. Die interne Arithmetik besteht, obwohl die Extraktion falsch ist. Deshalb benötigt die Validierung bildverankerte Labels oder einen unabhängigen Review-Pfad, nicht nur Konsistenzprüfungen.
Einige praktische Gegenmaßnahmen:
- Arithmetischer Abgleich. Wenn das Schema die Werte enthält, prüfen Sie
subtotal + tax + fees + shipping - discountsinnerhalb der Rundungstoleranz der Währung gegen den angegebenen Gesamtbetrag. Leiten Sie fehlende Komponenten oder Abweichungen zur Prüfung weiter. - Regex-Sanity-Checks für Datumsangaben (kein Monat 13), Telefonnummern (korrekte Stellenanzahl) und Währungsformate.
- Cross-Model-Verifikation. Lassen Sie kritische Felder durch zwei unterschiedliche Models laufen und markieren Sie Abweichungen.
- Unabhängiger OCR-Gegencheck. Führen Sie für kritische Zahlen einen zweiten Extraktionspfad aus und markieren Sie Abweichungen. Übereinstimmung erhöht die Confidence nur, wenn die beiden Pfade hinreichend unterschiedliche Fehlermodi haben; sie ist kein Beweis für Korrektheit.
Zentrale Erkenntnisse
- Passen Sie die Model-Tier an eine gelabelte Dokumentklasse an. Traditionelle Engines können für sauberen Text ausreichen; spezialisierte und allgemeine VLMs sollten ihre zusätzlichen Kosten auf schwierigeren Seiten rechtfertigen.
- Vermischen Sie unterschiedliche Leaderboards nicht. OmniDocBench-Metriken und OCR-Arena-Präferenzen beantworten verschiedene Fragen.
- Kalibrieren Sie das Routing. Confidence-Schwellenwerte, Dokumentklassen, Feldkritikalität und Human-Review-Policy gehören in eine gemeinsame Evaluation.
- Validieren Sie plausiblen Output. Schema-Konformität und interne Arithmetik können nicht beweisen, dass ein Wert im Bild vorkommt.
- Bepreisen Sie erfolgreiche Seiten. Berücksichtigen Sie beim Vergleich von APIs und Self-Hosting Retries, Review, fixe Betriebskosten und Qualitätsprüfungen.
Preprocessing und Detection bleiben wichtig, aber produktives OCR erfordert inzwischen zusätzlich Routing, aufgabenspezifische Evaluation und Schutzmaßnahmen gegen plausible Extraktionsfehler.
Referenzen
- OCR Arena Leaderboard – Crowdsourced Head-to-Head-Model-Battles
- The OCR Gauntlet Repository – Ausführbare Notebooks zum Vergleichen von OCR-Engines, Prüfen von Docling-Output und Schätzen von Kosten
- OmniDocBench – End-to-End-Eval für Dokument-Parsing
- dots.ocr – Rund 3B Gesamtparameter einschließlich eines 1.7B Language Models
- PaddleOCR – Traditionelles OCR-Toolkit und Models
- OpenRouter – Einheitliches Access-Gateway für A/B-Tests von Models