Zum Hauptinhalt springen
Entwickleranleitung

Tesseract OCR in Python
mit pytesseract.

Eine komplette, getestete Anleitung zu pytesseract: Installation, Kern-API, Bildvorverarbeitung, PDFs, Konfidenzwerte, PSM/OEM-Konfiguration, Performance und die häufigsten Fehler.

Schnellstart (drei Zeilen)

Installieren Sie zuerst die Engine und führen Sie dies aus. Die vollständige Einrichtung folgt unten.

ocr.py
import pytesseract
from PIL import Image

text = pytesseract.image_to_string(Image.open("image.png"))
print(text)

pytesseract installieren

pytesseract ist nur ein Wrapper — es ruft das Tesseract-Binary auf, also muss die Engine zuerst installiert sein.

bash
pip install pytesseract pillow
# optional, für Vorverarbeitung:
pip install opencv-python numpy
# optional, für PDF-Eingabe:
pip install pdf2image

Wenn die Engine nicht im PATH liegt (unter Windows üblich), verweisen Sie explizit darauf:

python
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"

Neu bei der Engine? Siehe die Installationsanleitung für Windows, macOS, Linux, Docker und WSL.

Kern-API

pytesseract bietet eine Funktion pro Ausgabetyp. Wählen Sie die passende.

FunktionLiefertVerwenden, wenn
image_to_stringReiner TextSie nur den erkannten Text brauchen
image_to_dataBoxen + Konfidenz pro WortText hervorheben, unsichere Wörter filtern
image_to_boxesBoxen pro ZeichenGeometrie auf Zeichenebene
image_to_pdf_or_hocrDurchsuchbares PDF oder hOCRDurchsuchbare PDFs oder Web-Overlays
image_to_osdAusrichtungs- und SchrifterkennungRotation oder Schrift vor dem OCR erkennen
image_to_alto_xmlALTO XMLArchiv- / Bibliotheks-Pipelines

Konfiguration: PSM, OEM, Sprachen und Whitelist

Übergeben Sie Optionen als leerzeichengetrennte Zeichenkette an config=.

config.py
# Ein Textblock, LSTM-Engine, Deutsch
text = pytesseract.image_to_string(img, lang="deu", config="--oem 3 --psm 6")

# Nur Ziffern (Belegsummen, Zählerstände)
text = pytesseract.image_to_string(img, config="--psm 7 -c tessedit_char_whitelist=0123456789.")

# Kombinierte Sprachen
text = pytesseract.image_to_string(img, lang="eng+deu")
PSMModusIdeal für
3Vollautomatisch (Standard)Standarddokumente
4Eine Spalte mit variablen GrößenArtikel, einspaltige Seiten
6Ein gleichmäßiger TextblockAbsätze, Etiketten
7Eine einzelne TextzeileEinzeilige Überschriften, einzelne Felder
8Ein einzelnes WortEinzelne Wörter
11Sparse-TextBelege, verstreuter UI-Text
13RohzeileEine Zeile ohne Tesseract-Tricks

OEM-Modi: --oem 1 (nur LSTM, Standard in v5), --oem 0 (Legacy), --oem 3 (automatisch). Vollständige Referenz in der Dokumentation.

Bildvorverarbeitung

Saubere Eingaben sind der größte Genauigkeitsfaktor. Diese Schritte zählen am meisten.

vorverarbeitung.py
import cv2, numpy as np, pytesseract
from PIL import Image

image = cv2.imread("beleg.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Kleinen Text auf ~300 DPI skalieren
gray = cv2.resize(gray, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)

# Rauschen entfernen, dann Otsu-Schwellenwert auf Schwarz/Weiß
blur = cv2.GaussianBlur(gray, (5, 5), 0)
_, binary = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

text = pytesseract.image_to_string(Image.fromarray(binary))

Positionen und Konfidenzwerte

Nutzen Sie image_to_data für Boxen pro Wort und einen Konfidenzwert von 0–100 und filtern Sie Rauschen.

konfidenz.py
from pytesseract import Output

data = pytesseract.image_to_data(img, output_type=Output.DICT)
for text, conf in zip(data["text"], data["conf"]):
    if text.strip() and float(conf) > 60:   # unsicheres Rauschen verwerfen
        print(round(float(conf)), text)

PDF in Python per OCR verarbeiten

Tesseract arbeitet mit Bildern, also rasterisieren Sie die PDF-Seiten zuerst mit pdf2image (benötigt poppler).

pdf.py
import io, pytesseract
from pdf2image import convert_from_path
from pypdf import PdfWriter, PdfReader

pages = convert_from_path("scan.pdf", dpi=300)   # benötigt poppler
writer = PdfWriter()
for page in pages:
    pdf_bytes = pytesseract.image_to_pdf_or_hocr(page, extension="pdf")
    writer.add_page(PdfReader(io.BytesIO(pdf_bytes)).pages[0])
with open("scan_durchsuchbar.pdf", "wb") as f:
    writer.write(f)

Unter Windows übergeben Sie den poppler-bin-Ordner mit poppler_path=. Für einen tieferen Workflow siehe die Dokumentation zu Ausgabeformaten.

Performance

pytesseract ruft die CLI bei jedem Aufruf auf, daher hängt der Durchsatz von der Struktur ab.

AnsatzWannKompromiss
pytesseract pro AufrufSkripte und EinzelaufgabenStartet pro Aufruf einen Prozess — langsam in Schleifen
Bündeln in mehrseitiges TIFFViele Seiten, gleiche EinstellungenEin Prozess für viele Seiten
multiprocessingViele unabhängige BilderNutzt alle Kerne; mehr Speicher
tesserocrHohes Volumen, im ProzessNatives Binding, mehr Einrichtung

Fehlerkatalog

Diese Fehler decken die meisten pytesseract-Probleme ab.

FehlerUrsacheLösung
TesseractNotFoundErrorBinary nicht installiert oder nicht im PATHEngine installieren oder pytesseract.pytesseract.tesseract_cmd setzen.
(-215:Assertion failed) src.type() == CV_8UC1Schwellenwert auf 3-Kanal-BildZuerst mit cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) konvertieren.
Error opening data file ...fra.traineddataSprachpaket fehltSprache installieren oder TESSDATA_PREFIX setzen.
Leere AusgabeNiedrige DPI, falscher PSM oder kein TextSkalieren, --psm 6/7/11 testen, vorverarbeiten.
Sehr langsam in SchleifeEin Prozess pro AufrufBündeln, multiprocessing oder tesserocr nutzen.

Genauigkeit messen

Messen Sie Zeichen- und Wortfehlerraten statt die Ausgabe nach Augenmaß zu beurteilen.

eval.py
import pytesseract, jiwer
from PIL import Image

hypothesis = pytesseract.image_to_string(Image.open("beispiel.png"))
reference  = open("beispiel.gt.txt").read()

print("CER:", jiwer.cer(reference, hypothesis))
print("WER:", jiwer.wer(reference, hypothesis))

Halten Sie einen kleinen Satz repräsentativer Bilder mit Referenztext als Regressionstests und führen Sie sie erneut aus, wenn Sie Vorverarbeitung oder Konfiguration ändern.

Python-FAQ

Wie nutze ich Tesseract OCR in Python?

Installieren Sie zuerst die Engine, dann pip install pytesseract pillow. Öffnen Sie das Bild mit Pillow und rufen Sie pytesseract.image_to_string(img) auf.

Warum erhalte ich TesseractNotFoundError?

pytesseract findet das Binary nicht. Installieren Sie die Engine, legen Sie sie in den PATH oder setzen Sie pytesseract.pytesseract.tesseract_cmd auf den vollständigen Pfad.

Wie verbessere ich die Genauigkeit?

Auf ~300 DPI skalieren, Graustufen, Schwellenwert, Entrauschen, Entzerren und der richtige --psm. Nutzen Sie das passende lang= und für feste Felder eine Zeichen-Whitelist.

Wie OCR-e ich ein PDF?

Nutzen Sie pdf2image (mit poppler), um Seiten in Bilder umzuwandeln, führen Sie pytesseract pro Seite aus und kombinieren Sie mit image_to_pdf_or_hocr(..., extension="pdf").

Wie erhalte ich Konfidenzwerte?

Nutzen Sie image_to_data(..., output_type=Output.DICT) und filtern Sie die conf-Liste.

Ist pytesseract langsam?

Jeder Aufruf startet einen Prozess. Bündeln Sie, nutzen Sie multiprocessing oder wechseln Sie zum In-Process-Binding tesserocr.

Gehen Sie tiefer in Engine und Ökosystem.