Zum Hauptinhalt springen
Entwickler-Leitfaden

Tesseract mit eigenen Schriftarten
und Daten trainieren (tesstrain, v5).

Ein getesteter, entscheidungsorientierter Leitfaden zum Fine-Tuning und Trainieren von Tesseract-5-Modellen mit tesstrain: aus dem Quellcode bauen, Ground Truth vorbereiten, make training ausführen, die wichtigen Variablen abstimmen, CER mit lstmeval messen und das traineddata einsetzen.

TL;DR — ein vorhandenes Modell fine-tunen

Wenn Ihre Schrift bereits unterstützt wird, ist Fine-Tuning der schnellste Weg zu einem besseren Modell.

bash
git clone https://github.com/tesseract-ocr/tesstrain.git
cd tesstrain && make tesseract-langdata
# Zeilenbilder + .gt.txt in data/myfont-ground-truth/ ablegen
make training MODEL_NAME=myfont START_MODEL=deu

Das Training ist nicht über die Binärinstaller verfügbar. Sie brauchen Linux oder WSL2. Siehe Installation für den Quellcode-Build.

Entscheidungsbaum: Fine-Tuning vs. obere Schicht abschneiden vs. von Grund auf

Die richtige Wahl spart Tage verschwendeten Trainings.

AnsatzVerwenden wennBenötigte DatenZeit
Fine-Tuning (FINETUNE_TYPE=1)Gleiche Schrift, neue Schriftart oder Fachvokabular1.000–5.000 ZeilenStunden
Obere Schicht abschneiden (FINETUNE_TYPE=2)Gleiche Schrift, deutlich andere Glyphen5.000–20.000 ZeilenStunden–Tage
Von Grund aufNeue Schrift oder stark abweichendes Alphabet50.000+ ZeilenTage

Beginnen Sie mit der leichtesten Option, die funktionieren könnte, bewerten Sie und eskalieren Sie nur, wenn der CER inakzeptabel ist. Die meisten Probleme mit eigenen Schriftarten lösen sich durch Fine-Tuning.

Voraussetzungen

Das Training erfordert den Quellcode-Build, nicht das fertige Binärpaket.

bash
sudo apt update
sudo apt install -y git make automake pkg-config g++ \
  libleptonica-dev libtesseract-dev tesseract-ocr

git clone https://github.com/tesseract-ocr/tesstrain.git
cd tesstrain
make tesseract-langdata   # holt langdata_lstm + tessdata_best

Ground Truth vorbereiten

Ground Truth sind Zeilenbilder, die mit ihrem exakten Text gepaart sind.

tesstrain erwartet ein Bild pro Textzeile in data/<MODEL_NAME>-ground-truth/, jeweils mit einer passenden .gt.txt-Datei, die die exakte Transkription enthält. Erzeugen Sie Bilder aus einer Textdatei und einer Schriftart mit text2image und teilen Sie langen Text mit split_training_text.py aus langdata_lstm in Zeilen.

bash
# Zeilenbilder aus einem Korpus + einer Schriftart erzeugen
text2image --text=corpus.txt \
  --outputbase=data/myfont-ground-truth/myfont \
  --font='Meine Schriftart' --fonts_dir=/usr/share/fonts \
  --ptsize=14

# text2image erzeugt auch .box-Dateien; konvertieren Sie sie zu .gt.txt
# (tesstrain/training/ enthält Hilfsskripte, oder umbenennen nach Prüfung)

Wie viel Daten: 100–500 Zeilen zum Validieren der Pipeline, 1.000–5.000 für die Produktion. Genauigkeit entsteht durch Vielfalt — verschiedene Schriftarten, Größen, Abstände und Rauschen — mehr als durch reine Menge.

Schriftarten und unicharset-Auswahl

Der Zeichensatz muss alles abdecken, was das Modell sehen wird.

Training ausführen

Ein einziger Befehl steuert die gesamte Makefile-Pipeline.

bash
make training \
  MODEL_NAME=myfont \
  START_MODEL=deu \
  TESSDATA_PREFIX=../tessdata_best \
  MAX_ITERATIONS=10000
VariableBedeutungTypischer Wert
START_MODELModell, von dem fortgesetzt wird (Fine-Tuning)eng, deu…
TESSDATA_PREFIXVerzeichnis mit dem Startmodell../tessdata_best
MAX_ITERATIONSObergrenze der Trainingsschritte10000–100000
LEARNING_RATESchrittweite; kleiner ist beim Fine-Tuning sicherer0.0001–0.001
FINETUNE_TYPE0 von Grund auf, 1 Fine-Tuning, 2 obere Schicht abschneiden1
NET_SPECSpezifikation der NetzarchitekturStandard belassen
RATIO_TRAINAufteilung Training/Validierung0.9
TARGET_ERROR_RATECER-Ziel für frühen Stopp0.01

Checkpoints, stop_training und best vs. fast

Bewertung: Zeichenfehlerrate mit lstmeval

Beurteilen Sie das Modell anhand von Daten, die es nie gesehen hat.

bash
lstmeval --model data/myfont_checkpoint \
  --traineddata ../tessdata_best/deu.traineddata \
  --eval_listfile data/myfont-ground-truth/eval_files.txt

Beobachten Sie den CER auf einem zurückgehaltenen Satz. Wenn er nicht mehr sinkt — oder steigt, während der Trainingsverlust weiter fällt — liegt Overfitting vor; stoppen Sie und nutzen Sie den früheren Checkpoint.

Trainiertes Modell einsetzen

Kopieren Sie das traineddata, zeigen Sie den Motor darauf und testen Sie.

bash
# In ein tessdata-Verzeichnis kopieren
cp data/myfont.traineddata /usr/share/tesseract-ocr/5/tessdata/
# oder ein eigenes Präfix setzen
export TESSDATA_PREFIX=/pfad/zu/tessdata
tesseract probe.png stdout -l myfont

Sie können Ihr Modell mit einer Basissprache kombinieren, z. B. -l myfont+deu. In Python übergeben Sie denselben Wert an pytesseract — siehe Python-Leitfaden.

Fehlerbehebung

SymptomUrsacheLösung
Schlechte Boxen / verschobene Ground TruthFalsche Schriftmetriken oder zu große ZeilenbilderMit korrektem --font und --ptsize neu erzeugen; einige Bilder visuell prüfen.
Fehlende Zeichen in der AusgabeZeichen nicht im unicharsetFügen Sie die Glyphen Ihrer Ground Truth hinzu und bauen Sie das unicharset neu.
Verlust divergiert / NaNLernrate zu hochLEARNING_RATE senken und von einem früheren Checkpoint fortsetzen.
Speicher voll (OOM)Batch zu groß für RAM/GPUBATCH_SIZE/Netzgröße reduzieren oder eine Maschine mit mehr Speicher verwenden.
Validierungs-CER steigt, während der Verlust fälltOverfittingFrüher stoppen, vielfältigere Ground Truth hinzufügen oder eine niedrigere Lernrate verwenden.

Häufige Fragen zum Training

Kann ich Tesseract trainieren, ohne es aus dem Quellcode zu bauen?

Nein. Die Trainingswerkzeuge sind nicht in den Binärinstallern enthalten; nutzen Sie Linux oder WSL2 mit libtesseract-dev und dem tesstrain-Repository.

Wie viele Beispiele brauche ich?

Etwa 100–500 Zeilen zum Validieren der Pipeline und 1.000–5.000 für die Produktion. Fine-Tuning braucht weniger als Training von Grund auf.

Fine-Tuning oder von Grund auf?

Fine-Tuning für eine neue Schriftart oder ein Vokabular in einer bestehenden Schrift; von Grund auf nur für eine wirklich neue Schrift.

Wann sollte ich das Training stoppen?

Wenn der Validierungs-CER nicht mehr besser wird, nicht wenn der Trainingsverlust flach wird. Diese Lücke ist Overfitting.

Wohin kommt das Modell?

Kopieren Sie <MODEL_NAME>.traineddata in ein tessdata-Verzeichnis (oder setzen Sie TESSDATA_PREFIX) und führen Sie tesseract image.png stdout -l myfont aus.