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.
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=deuDas 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.
| Ansatz | Verwenden wenn | Benötigte Daten | Zeit |
|---|---|---|---|
Fine-Tuning (FINETUNE_TYPE=1) | Gleiche Schrift, neue Schriftart oder Fachvokabular | 1.000–5.000 Zeilen | Stunden |
Obere Schicht abschneiden (FINETUNE_TYPE=2) | Gleiche Schrift, deutlich andere Glyphen | 5.000–20.000 Zeilen | Stunden–Tage |
| Von Grund auf | Neue Schrift oder stark abweichendes Alphabet | 50.000+ Zeilen | Tage |
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.
- Eine Linux-Umgebung — nativ oder WSL2 unter Windows. macOS wird für das Training nicht unterstützt.
git,make,pkg-config,automakeund eine C++-Toolchain.libtesseract-devundlibleptonica-dev(die Trainingsbinaries linken dagegen).- Das
tesstrain-Repository sowielangdata_lstmund ein Startmodell austessdata_best.
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_bestGround 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.
# 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.
- Installieren Sie die Trainingsschriftarten in der Umgebung; übergeben Sie den exakten Familiennamen an
--font. - Beim Fine-Tuning behalten Sie das
unicharsetdes Startmodells bei, damit die Ausgabeschicht passt. - Für eine neue Schrift leiten Sie das unicharset aus Ihrer Ground Truth ab, damit jede Glyphe vertreten ist.
- Nehmen Sie Satzzeichen, Ziffern und Groß-/Kleinschreibung auf, wenn die echten Dokumente sie enthalten; sonst verwirft das Modell sie.
Training ausführen
Ein einziger Befehl steuert die gesamte Makefile-Pipeline.
make training \
MODEL_NAME=myfont \
START_MODEL=deu \
TESSDATA_PREFIX=../tessdata_best \
MAX_ITERATIONS=10000| Variable | Bedeutung | Typischer Wert |
|---|---|---|
START_MODEL | Modell, von dem fortgesetzt wird (Fine-Tuning) | eng, deu… |
TESSDATA_PREFIX | Verzeichnis mit dem Startmodell | ../tessdata_best |
MAX_ITERATIONS | Obergrenze der Trainingsschritte | 10000–100000 |
LEARNING_RATE | Schrittweite; kleiner ist beim Fine-Tuning sicherer | 0.0001–0.001 |
FINETUNE_TYPE | 0 von Grund auf, 1 Fine-Tuning, 2 obere Schicht abschneiden | 1 |
NET_SPEC | Spezifikation der Netzarchitektur | Standard belassen |
RATIO_TRAIN | Aufteilung Training/Validierung | 0.9 |
TARGET_ERROR_RATE | CER-Ziel für frühen Stopp | 0.01 |
Checkpoints, stop_training und best vs. fast
- tesstrain schreibt regelmäßige Checkpoints (z. B.
myfont_checkpoint), die Sie bewerten oder fortsetzen können. - Legen Sie eine Datei
stop_trainingim Ausgabeverzeichnis an, um den Lauf bei der nächsten Iteration sauber zu beenden. - Konvertieren Sie einen Checkpoint mit
combine_tessdata -e/convert_to_intaus den Trainingswerkzeugen in ein nutzbares Modell. - best-Modelle sind am genauesten; fast-Modelle sind kleiner und schneller. Fine-tunen Sie aus
tessdata_best, wenn Genauigkeit zählt.
Bewertung: Zeichenfehlerrate mit lstmeval
Beurteilen Sie das Modell anhand von Daten, die es nie gesehen hat.
lstmeval --model data/myfont_checkpoint \
--traineddata ../tessdata_best/deu.traineddata \
--eval_listfile data/myfont-ground-truth/eval_files.txtBeobachten 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.
# 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 myfontSie 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
| Symptom | Ursache | Lösung |
|---|---|---|
| Schlechte Boxen / verschobene Ground Truth | Falsche Schriftmetriken oder zu große Zeilenbilder | Mit korrektem --font und --ptsize neu erzeugen; einige Bilder visuell prüfen. |
| Fehlende Zeichen in der Ausgabe | Zeichen nicht im unicharset | Fügen Sie die Glyphen Ihrer Ground Truth hinzu und bauen Sie das unicharset neu. |
| Verlust divergiert / NaN | Lernrate zu hoch | LEARNING_RATE senken und von einem früheren Checkpoint fortsetzen. |
| Speicher voll (OOM) | Batch zu groß für RAM/GPU | BATCH_SIZE/Netzgröße reduzieren oder eine Maschine mit mehr Speicher verwenden. |
| Validierungs-CER steigt, während der Verlust fällt | Overfitting | Frü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.