Docling-OCR-Engines

Es gibt keine einzelne „beste“ OCR-Engine — die richtige hängt von Plattform, Sprachen und Setup-Bereitschaft ab. Diese Seite vergleicht jede Engine, zeigt Installation + CLI + Python je Engine, erklärt das portable iso:-Sprachsystem, deckt GPU-Backends ab und liefert Rezepte zum Kopieren. Engine-Fakten sind gegen die offiziellen OCR-Konzepte und die native Engine-Referenz geprüft.

1
Step 1

1. Welche Engine wählen?

Digitale (Text-)PDFs brauchen oft gar kein OCR — erst --no-ocr für Maximaltempo probieren und nur für gescannte Seiten eine Engine ergänzen.

SituationWahlWarum
Standard / unsicherRapidOCRNur-pip-Installation, CPU-freundlich, mehrsprachig, GPU-fähig. Die sicherste erste Wahl.
100+ Sprachen oder eigene traineddataTesseract (CLI oder tesserocr)Bewährte Engine, Schriftmodelle (script/Latin), Vertikal-Japanisch (jpn_vert), eigene trainierte Dateien.
Auf einem Mac, ohne SetupOcrMacNutzt Apple Vision auf dem Gerät; keine Binärdateien, keine Modell-Downloads.
Einfaches CJK + Latein, leichte InstallationEasyOCRNur pip mit selbst geladenen Gen2-Modellen; nimmt mehrere Sprachen zugleich.
NVIDIA-Serverfarm, max. DurchsatzNemotron OCRGPU-beschleunigt; Englisch- + mehrsprachige Modelle (Linux x86_64, CUDA 13.x).
OCR läuft auf einem anderen ServiceKServe v2Docling ruft den eigenen Remote-Endpunkt; Sprachcodes sind die der Bereitstellung.
Nischenmodell nötigPlugin (OnnxTR, SuryaOCR)Installation via Plugin-System mit --allow-external-plugins.
2
Step 2

2. Wie OCR in die Pipeline passt (Modi & Flags)

OCR ist standardmäßig an (--ocr). Drei Flags steuern, wo es läuft und welche Engine es ausführt. Python-Entsprechung: PdfPipelineOptions().do_ocr = True plus eine der RapidOcrOptions / EasyOcrOptions / TesseractOcrOptions / TesseractCliOcrOptions / OcrMacOptions / NemotronOcrOptions mit mode=OcrMode.FULL_PAGE für Vollseiten-Verhalten. Mit --debug-visualize-ocr debuggen, was OCR sieht.

FlagWerte / StandardBedeutung
--ocr / --no-ocrStandard anHauptschalter. --no-ocr überspringt OCR komplett — schnellste für digitale PDFs.
--ocr-modedefault, full_page, layout_regions, pdf_aware_layout_regionsWelche Regionen an die Engine gehen. full_page OCRt jede Seite Ende-zu-Ende (langsamer, beste für Scans). --force-ocr ist veraltet — --ocr-mode full_page nutzen.
--ocr-engineauto (Standard), rapidocr, easyocr, tesseract, tesserocr, ocrmac, nemotron-ocr, kserve_v2_ocrWelche Engine. auto wählt aus dem Installierten je Plattform.
--ocr-langKommaliste, z. B. ch, deu, iso:deSprachen, nativ oder portabel (siehe Abschnitt 11). Leer (--ocr-lang "") lässt die Engine entscheiden.
--psm0–13Page Segmentation Mode für die OCR-Engine.
3
Step 3

3. Engine-Vergleichstabelle

EngineAm besten fürPlattformHinweiseDocs
auto (default) Docling eine verfügbare Engine wählen lassen.AllStandardwert von --ocr-engine. Docling wählt anhand von Installation und Plattform. Python: ocr_options einfach weglassen. Dokumentation
RapidOCR Leichtgewichtiges, CPU-freundliches mehrsprachiges OCR; gute Standardwahl.Cross-platformONNX-Runtime-Backend als Standard (auch openvino/paddle/torch). pip install "docling[rapidocr]". Eine Sprache pro Durchlauf; PP-OCR-v4/v5/v6-Tokens inkl. Schriftfamilien latin/cyrillic/arabic/devanagari. Python: RapidOcrOptions. Dokumentation
Tesseract (CLI) Bewährtes OCR mit über 100 Sprachen; eigene traineddata.Cross-platform (system binary)Braucht Tesseract-Systembinärdatei plus Sprachdaten (TESSDATA_PREFIX mit / am Ende). Für CLI-Nutzung kein pip-Extra nötig. Python: TesseractCliOcrOptions. Leere lang löst OSD-Skripterkennung aus (braucht osd-Datei). Dokumentation
Tesseract (tesserocr) Gleiche Tesseract-Genauigkeit, schneller via Python-Bindings.Cross-platform (compiled)Nach der Systembinärdatei pip install "docling[tesserocr]". Unter Windows ggf. C++ Build Tools nötig. Python: TesseractOcrOptions. Dokumentation
EasyOCR Einfaches mehrsprachiges Setup; CJK- und lateinische Schriften.Cross-platformpip install "docling[easyocr]". Lädt eigene Gen2-Modelle. Nimmt mehrere Sprachen gleichzeitig — Liste kurz halten (en allein schlägt en+de). Python: EasyOcrOptions. Dokumentation
OcrMac Müheloses natives OCR auf Macs (Apple Vision).macOS onlypip install "docling[ocrmac]". Keine Modelle im Paket — Sprachumfang hängt von der macOS-Version ab. Python: OcrMacOptions. Dokumentation
Nemotron OCR GPU-beschleunigtes OCR im großen Maßstab auf NVIDIA-Servern.Linux x86_64 + CUDA 13.xpip install "docling[feat-ocr-nemotron]" mit cu130-Index (Python 3.12; v2.0.2 ergänzt 3.11/3.13). english oder multilingual (+ ca. 170 lateinische Best-Effort-Codes). Python: NemotronOcrOptions. Dokumentation
KServe v2 OCR Einen OCR-Microservice aufrufen.ServiceVerbindet sich mit einem KServe-v2-Endpunkt. lang wird wörtlich gesendet (nur erster Eintrag) — Codes der eigenen Bereitstellung verwenden. Keine Prüfung, kein Mapping. Dokumentation
4
Step 4

4. Jede Engine installieren

Tesseract-Systembinärdatei je BS: Vollständige Schritte je BS in der Installationsübersicht und den OS-Anleitungen. OCR-Modelle für Offline- oder CI-Rechner vorab laden: docling-tools models download --all oder gezielt --easyocr-lang de / --rapidocr-backend-lang onnxruntime:el. Siehe die CLI-Referenz.

brew install tesseract leptonica pkg-config
sudo apt-get install -y tesseract-ocr tesseract-ocr-eng libtesseract-dev libleptonica-dev pkg-config
sudo dnf install -y tesseract tesseract-devel tesseract-langpack-eng tesseract-osd leptonica-devel
EngineInstallationSystemabhängigkeit?
RapidOCRpip install "docling[rapidocr]" (oder pip install rapidocr onnxruntime)Nein — nur pip.
EasyOCRpip install "docling[easyocr]" (oder pip install easyocr)Nein — lädt eigene Modelle beim ersten Einsatz.
Tesseract CLINur Systembinärdatei (unten); kein pip-Extra nötigJa — Binärdatei + TESSDATA_PREFIX (mit / am Ende).
Tesseract (tesserocr)Erst Systembinärdatei, dann pip install "docling[tesserocr]"Ja — plus Compiler unter Windows fürs Binding.
OcrMacpip install "docling[ocrmac]"Nur macOS; keine Modelle — Vision ist Teil des OS.
Nemotronpip install "docling[feat-ocr-nemotron]" --extra-index-url https://download.pytorch.org/whl/cu130 --index-strategy unsafe-best-matchLinux x86_64 + Python 3.12 + CUDA 13.x.
OnnxTR (Plugin)pip install "docling-ocr-onnxtr[cpu]" + --allow-external-pluginsNein — Plugin-System.

Windows: UB-Mannheim-Build installieren, zu PATH hinzufügen und TESSDATA_PREFIX auf dessen tessdata\-Ordner setzen. Scheitert tesserocr beim Bauen: pip uninstall tesserocr, dann pip install --no-binary :all: tesserocr.

5
Step 5

5. RapidOCR im Detail (Backends, PP-OCR-Versionen, Sprachen)

RapidOCR kapselt PP-OCR-Modelle. Zwei Dinge variieren unabhängig: das Backend (Runtime) und die PP-OCR-Version (Modellgeneration).

Sprach-Tokens (native Codes): v4: arabic, ch, chinese_cht, cyrillic, devanagari, en, japan, ka, korean, latin, ta, te. v5: arabic, ch, cyrillic, devanagari, el, en, eslav, korean, latin, ta, te, th. v6: ch, chinese_cht, en, japan + ca. 45 europäische Codes (de, fr, es, it, pt, nl, pl …) mit Aliasen zh→ch, zh_cn→ch, zh_tw→chinese_cht, ja/jp→japan, ko→korean (Achtung: Koreanisch existiert in v6 nur als Alias). de/german und fr/french existieren jeweils doppelt.

Schriftfamilien (ein Token deckt viele Sprachen ab): cyrillic (34: Russisch, Ukrainisch, Kasachisch … + Englisch), devanagari (14: Hindi, Marathi, Sanskrit … + Englisch), arabic (9: Arabisch, Persisch, Urdu … + Englisch), eslav (Ostslawisch: Russisch, Belarussisch, Ukrainisch + Englisch).

Eine Sprache pro Durchlauf: RapidOCR nutzt den ersten lang-Eintrag und warnt vor dem Rest. Python: RapidOcrOptions(lang=["eslav"], backend="onnxruntime"); eigene Checkpoints werden unterstützt (siehe Custom-Models-Beispiel).

docling convert scan.pdf --ocr-engine rapidocr --ocr-mode full_page
BackendPP-OCR-VersionenHinweise
onnxruntime (Standard)v4, v5, v6Vollste Abdeckung — einziges Backend mit PP-OCRv5-eslav/cyrillic.
openvinov4, v5, v6Intel-Hardware-Pfad.
paddlev4, v5, v6PaddlePaddle-Runtime.
torchv4, v5 (nur Chinesisch), v6PP-OCRv5 auf torch kann nur Chinesisch.
6
Step 6

6. EasyOCR im Detail (Sprachliste kurz halten)

EasyOCR (Gen2-Checkpoints, craft_mlt_25k.pth-Detektor) nimmt mehrere Sprachen zugleich — doch die Auflösung wählt den einen Checkpoint, der alle gewünschten Sprachen deckt. Eine unnötige Sprache stuft das Modell still herab: ["en"] wählt das genaue english_g2.pth, während ["en","de"] auf das breitere latin_g2.pth zurückfällt.

docling convert scan.pdf --ocr-engine easyocr --ocr-lang en
CheckpointDeckt ab
english_g2.pthen
latin_g2.pthEuropäisch/Latein-Familie (de, fr, es, it, pt, nl, pl …)
zh_sim_g2.pthch_sim + en
japanese_g2.pth / korean_g2.pthja / ko + en
telugu.pth / kannada.pthte / kn + en
cyrillic_g2.pthru, be, bg, uk, mn … + en
7
Step 7

7. Tesseract im Detail (CLI vs. tesserocr, traineddata)

docling convert scan.pdf --ocr-engine tesseract --ocr-lang deu+eng
TESSDATA_PREFIX=/opt/homebrew/share/tessdata/ docling convert scan.pdf --ocr-engine tesserocr
  • Zwei Geschmacksrichtungen, eine Engine: tesseract ruft die System-CLI auf (kein pip-Extra); tesserocr bindet die Bibliothek in-process ein (schneller, braucht das kompilierte Binding). Gleiche Genauigkeit, gleiche traineddata.
  • Sprache = traineddata-Stamm: deu, chi_sim, chi_tra, srp_latn, aze_cyrl, deu_latf, frk, jpn_vert, script/Latin, script/Cyrillic — plus jede selbst trainierte Datei. Was an .traineddata-Dateien installiert ist, ist nutzbar.
  • Prüfung zur Bauzeit: Fehlende Dateien scheitern sofort mit dem installierten Satz in der Fehlermeldung — nicht mitten in der Umwandlung.
  • Leere lang = Skripterkennung: --ocr-lang "" startet Orientierungs-/Skripterkennung je Seite, die die osd-traineddata braucht.
  • Automatische Spracherkennung zeigt das offizielle Beispiel.
8
Step 8

8. OcrMac im Detail (nur macOS)

OcrMac ist ein dünner Wrapper um Apples Vision-Framework: keine Binärdateien, keine ladbaren Modelle — die Erkenner sind Teil des OS, daher ist der Sprachumfang eine Eigenschaft der eigenen macOS-Version, nicht des ocrmac-Releases.

docling convert scan.pdf --ocr-engine ocrmac --ocr-mode full_page
  • Installieren: pip install "docling[ocrmac]"; Python: OcrMacOptions.
  • Abgleich per BCP-47 mit Regionen: iso:de findet de-DE, iso:pt findet pt-BR, iso:zh-CN findet zh-Hans.
  • Kuriose Regionscodes wie vi-VT müssen nativ (ohne Präfix) übergeben werden. Leere lang lässt Vision automatisch wählen.
9
Step 9

9. Nemotron OCR im Detail (Linux + CUDA)

Braucht Linux x86_64 mit CUDA 13.x und den cu130-torch-Index (Installationszeile in Abschnitt 4). Eine Sprache pro Durchlauf (erster Eintrag gewinnt). Python: NemotronOcrOptions.

Nemotron-VersionPythonSprachen
v2.0.0nur 3.12english (Alias en), multilingual (Alias multi: en, zh sim+trad, ja, ko, ru) + ca. 170 lateinische Best-Effort-Codes (warnt, von NVIDIA ungetestet)
v2.0.23.11, 3.12, 3.13wie oben
10
Step 10

10. KServe v2 + Plugin-Engines (OnnxTR, SuryaOCR)

  • KServe v2: Für Teams, deren OCR als Remote-Microservice läuft. lang wird weder geprüft noch gemappt — der erste Eintrag geht wörtlich raus, der Rest wird mit Warnung verworfen. Die Codes der eigenen Bereitstellung nutzen; iso: geht nur, falls der Server es spricht (keiner tut es).
  • OnnxTR-Plugin: pip install "docling-ocr-onnxtr[cpu]", --allow-external-plugins aktivieren, mit dem Engine-Namen des Plugins wählen. Siehe das docling-OCR-OnnxTR-Repo.
  • SuryaOCR mit eigenen Modellen zeigt das offizielle Beispiel; Drittanbieter-Optionen mit --show-external-plugins listen.
11
Step 11

11. Sprachen: native Codes vs. portable iso:-Tags

Jede Engine nimmt Sprachen über ein Feld, OcrOptions.lang. Jeder Eintrag hat genau zwei Formen:

Nativer Code (ohne Präfix) — die engine-eigene Schreibweise, wörtlich durchgereicht: ch (PP-OCR-Chinesisch), deu (Tesseract-Deutsch), ch_sim (EasyOCR), en-US (Vision).

Portabler Tag — BCP-47 hinter iso:, auf die Engine gemappt: iso:de, iso:en-US, iso:zh-Hant. Das Skript immer angeben, wenn es nicht Standard ist: Serbisch-Latein muss iso:sr-Latn sein (Standard-Serbisch ist Kyrillisch).

Jede Engine meldet, was sie kann: supported_ocr_languages() liefert native + BCP-47-Codes in einer Schreibweise, die sich direkt in lang einfügen lässt. Docling ersetzt nie still — eine nicht bedienbare Sprache wirft einen Fehler und nennt, was die Engine kann. RapidOCR und Nemotron laufen eine Sprache zur Zeit (erster Tag gewinnt, Rest warnt).

TagBedeutetStattdessen sagen
mulmehrere SprachenDer engine-eigene Code fürs mehrsprachige Modell (z. B. Nemotron-multilingual)
undunbestimmtLeere Liste oder eine Sprache in der gewünschten Schrift
zxxkein SprachinhaltOCR abschalten: --no-ocr / do_ocr=False
from docling.datamodel.pipeline_options import TesseractCliOcrOptions
TesseractCliOcrOptions(lang=["deu", "eng"])       # nativ: tesseract -l deu+eng
TesseractCliOcrOptions(lang=["iso:de", "iso:en"]) # portabel: dasselbe

Was eine leere Sprachliste je Engine bedeutet — und Codes, die einen Sprach-Tag überschatten (nackt = das Modell; iso: = die Sprache):

Enginelang=[] (--ocr-lang "")
Tesseract (beide)Orientierungs- + Skripterkennung je Seite (braucht osd-Datei)
EasyOCREnglisch (en)
RapidOCRStandard Vereinfachtes Chinesisch (ch)
NemotronEnglisch-Modell
OcrMacVisions Automatik
KServeSendet en
CodeNackt erreichtiso: bedeutet
chPP-OCR Chinesisch (vereinfacht)ch-Latn = Chamorro
kaPP-OCR Kannadaka-Geor = Georgisch (kann PP-OCR nicht — Fehler)
angEasyOCR AngikaAltenglisch
frkTesseract Deutsch-FrakturFränkisch
tabEasyOCR Tabasaranisch (kyrillisch)Tabasaranisch (lateinisch)
mahEasyOCR MagahiMarshallesisch
12
Step 12

12. GPU-Beschleunigung für OCR

  • RapidOCR auf CUDA: GPU-ONNX-Runtime installieren — pip install "docling[onnxruntime]" — prüfen, dass CUDAExecutionProvider in ort.get_available_providers() steht, dann onnxruntime-Backend mit CUDA-Gerät nutzen. Das torch-Backend ist die Alternative (Achtung: PP-OCRv5 + torch = nur Chinesisch).
  • Nemotron ist konstruktionsbedingt GPU-only (CUDA 13.x, Linux x86_64).
  • EasyOCR / Tesseract / OcrMac sind praktisch CPU-gebunden — auf eine schnelle CPU setzen und GPU-Budget lieber in Layout-/Tabellenstufen stecken. Feintuning (Batch-Größen, VLM-Server) steht in der offiziellen GPU-Anleitung.
import onnxruntime as ort
assert "CUDAExecutionProvider" in ort.get_available_providers()

from docling.datamodel.accelerator_options import AcceleratorDevice, AcceleratorOptions
from docling.datamodel.pipeline_options import PdfPipelineOptions, RapidOcrOptions
pipeline_options = PdfPipelineOptions(
    accelerator_options=AcceleratorOptions(device=AcceleratorDevice.CUDA),
    ocr_options=RapidOcrOptions(backend="onnxruntime", lang=["eslav"]),
)
13
Step 13

13. Rezepte zum Kopieren (CLI + Python)

Gescanntes PDF, Vollseiten-OCR. Engine explizit wählen. OCR für digitale PDFs überspringen (schnellste). OCR auf Deutsch + Englisch, portable Tags:

Mehr ausgearbeitete Beispiele: Vollseiten-OCR erzwingen, Tesseract-Spracherkennung, RapidOCR-eigene-Modelle, lokale Beispielbibliothek und der Konfigurator.

docling convert scan.pdf --ocr-mode full_page
docling convert scan.pdf --ocr-engine rapidocr
docling convert report.pdf --no-ocr --to md
docling convert scan.pdf --ocr-engine rapidocr --ocr-lang iso:de,iso:en
from docling.datamodel.base_models import InputFormat
from docling.datamodel.pipeline_options import (
    OcrMode, PdfPipelineOptions, RapidOcrOptions,
)
from docling.document_converter import DocumentConverter, PdfFormatOption

pipeline_options = PdfPipelineOptions()
pipeline_options.do_ocr = True
pipeline_options.ocr_options = RapidOcrOptions(mode=OcrMode.FULL_PAGE)
# Je nach Bedarf EasyOcrOptions / TesseractOcrOptions / TesseractCliOcrOptions
# / OcrMacOptions (macOS) / NemotronOcrOptions (Linux CUDA) einsetzen.

converter = DocumentConverter(
    format_options={InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options)}
)
doc = converter.convert("scan.pdf").document
print(doc.export_to_markdown())
14
Step 14

14. OCR-Fehlerbehebung

  • Gescannter Text wird nicht erkannt — OCR ist aus oder der Standardmodus hat die fehlende Textebene übersehen: --ocr-mode full_page erzwingen, andere Engine probieren. Siehe OCR: gescanntes PDF.
  • OCR-Extra installiert nicht — RapidOCR/EasyOCR sind nur pip; Tesseract braucht zuerst Systembinärdatei + TESSDATA_PREFIX. Siehe OCR-Paket-Installationsfehler.
  • Umwandlung ist langsam — OCR- + Anreicherungsmodelle sind die teuersten CPU-Stufen: --no-ocr für digitale PDFs, --table-mode fast oder eine GPU. Siehe Umwandlung ist langsam.
  • GPU ignorierttorch.cuda.is_available() / CUDAExecutionProvider bestätigen, --device cuda nutzen (mps auf Apple Silicon). Siehe GPU wird nicht genutzt.
  • Falsche Sprachausgabe — Shadowing prüfen (ka vs. iso:ka-Geor), EasyOCR-Listen kurz halten, mit supported_ocr_languages() verifizieren.
15
Step 15

15. OCR-FAQ

Welche Engine für Einsteiger?
RapidOCR: ein pip-Extra, keine Systempakete, CPU-freundlich, mehrsprachig und später GPU-fähig. Start mit pip install "docling[rapidocr]" und --ocr-engine rapidocr.
Brauche ich überhaupt OCR?
Nur für gescannte/Bild-PDFs. Digitale PDFs tragen Text — --no-ocr ist schneller und oft genauer. Leere Ausgabe bei einem Scan ist das Zeichen für --ocr-mode full_page.
Nativer Code oder iso:-Tag?
Nativ (ch, deu) ist kürzest, wenn die Engine bekannt ist. Portabel (iso:de, iso:zh-Hant) überlebt Engine-Wechsel und ist für Schriften wie iso:sr-Latn Pflicht. Schatten-Codes wie nacktes ka (Kannada-Modell) vs. iso:ka-Geor (Georgisch) nie verwechseln.
Warum wird EasyOCR schlechter, wenn ich eine Sprache hinzufüge?
Konstruktionsbedingt: EasyOCR wählt einen Checkpoint, der jede gewünschte Sprache deckt — ["en","de"] fällt vom englisch-spezifischen Modell aufs allgemeine Latein-Modell zurück. Nur anfordern, was das Dokument enthält.
Kann RapidOCR mehrere Sprachen zugleich?
Nein — eine Sprache pro Durchlauf (erster Eintrag gewinnt). Schriftfamilien-Token (latin, cyrillic, arabic, devanagari, eslav) decken eine Familie ab, oder Durchläufe je Sprache.
Tesseract findet meine Sprache nicht?
Passende traineddata installieren (tesseract-ocr-<lang>), per tesseract --list-langs bestätigen und TESSDATA_PREFIX mit Schrägstrich am Ende exportieren. Die Konstruktor-Fehlermeldung listet exakt das Installierte.
Welche Engines nutzen die GPU?
RapidOCR (onnxruntime-/torch-Backends mit CUDA) und Nemotron (nur CUDA). EasyOCR, Tesseract und OcrMac sind praktisch CPU-gebunden.
Wie nutze ich ein eigenes OCR-Modell?
RapidOCR und SuryaOCR unterstützen eigene Checkpoints — den RapidOCR-Custom-Models-Beispiel und das SuryaOCR-Beispiel durcharbeiten; Dritt-Engines laden via --allow-external-plugins.

Verifiziert mit Docling v2.129.0 · Zuletzt geprüft 2026-09-22 · Offizielle Quelle