Aller au contenu principal
Guide développeur

Entraîner Tesseract sur des polices
et données personnalisées (tesstrain, v5).

Un guide éprouvé et orienté décisions pour affiner et entraîner des modèles Tesseract 5 avec tesstrain : compiler depuis les sources, préparer les données de référence, exécuter make training, régler les variables importantes, mesurer le CER avec lstmeval et déployer votre traineddata.

En bref — affiner un modèle existant

Si votre écriture est déjà prise en charge, le fine-tuning est le chemin le plus rapide vers un meilleur modèle.

bash
git clone https://github.com/tesseract-ocr/tesstrain.git
cd tesstrain && make tesseract-langdata
# placez les images de ligne + .gt.txt dans data/myfont-ground-truth/
make training MODEL_NAME=myfont START_MODEL=fra

L'entraînement n'est pas disponible via les installateurs binaires. Il vous faut Linux ou WSL2. Voir l'installation pour compiler depuis les sources.

Arbre de décision : fine-tuning vs couper la couche supérieure vs partir de zéro

Choisir la bonne approche fait gagner des jours d'entraînement gaspillé.

ApprocheÀ utiliser quandDonnées nécessairesTemps
Fine-tuning (FINETUNE_TYPE=1)Même écriture, nouvelle police ou vocabulaire métier1 000–5 000 lignesHeures
Couper la couche supérieure (FINETUNE_TYPE=2)Même écriture, glyphes nettement différents5 000–20 000 lignesHeures–jours
Partir de zéroNouvelle écriture ou alphabet très différent50 000+ lignesJours

Commencez par l'option la plus légère qui puisse fonctionner, évaluez, et ne montez en puissance que si le CER est inacceptable. La plupart des problèmes de polices personnalisées se règlent par le fine-tuning.

Prérequis

L'entraînement nécessite la compilation depuis les sources, pas le binaire précompilé.

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   # récupère langdata_lstm + tessdata_best

Préparer les données de référence

Les données de référence sont des images de ligne associées à leur texte exact.

tesstrain attend une image par ligne de texte dans data/<MODEL_NAME>-ground-truth/, chacune accompagnée d'un fichier .gt.txt contenant la transcription exacte. Générez les images à partir d'un fichier texte et d'une police avec text2image, et découpez les longs textes en lignes avec split_training_text.py de langdata_lstm.

bash
# Générez des images de ligne depuis un corpus + une police
text2image --text=corpus.txt \
  --outputbase=data/myfont-ground-truth/myfont \
  --font='Ma Police Personnalisée' --fonts_dir=/usr/share/fonts \
  --ptsize=14

# text2image génère aussi des fichiers .box ; convertissez-les en .gt.txt
# (tesstrain/training/ contient des scripts, ou renommez après vérification)

Quelle quantité : 100–500 lignes pour valider la chaîne, 1 000–5 000 pour la production. La précision vient de la variété — polices, tailles, espacements et bruit différents — plus que du volume brut.

Polices et sélection du unicharset

Le jeu de caractères doit couvrir tout ce que le modèle verra.

Lancer l'entraînement

Une seule commande pilote tout le pipeline Makefile.

bash
make training \
  MODEL_NAME=myfont \
  START_MODEL=fra \
  TESSDATA_PREFIX=../tessdata_best \
  MAX_ITERATIONS=10000
VariableSignificationValeur typique
START_MODELModèle à partir duquel continuer (fine-tuning)eng, fra…
TESSDATA_PREFIXRépertoire contenant le modèle de départ../tessdata_best
MAX_ITERATIONSLimite supérieure des étapes d'entraînement10000–100000
LEARNING_RATEPas d'apprentissage ; plus petit est plus sûr en fine-tuning0.0001–0.001
FINETUNE_TYPE0 de zéro, 1 fine-tuning, 2 couper la couche supérieure1
NET_SPECSpécification de l'architecture réseaulaisser par défaut
RATIO_TRAINRépartition entraînement/validation0.9
TARGET_ERROR_RATECible de CER pour l'arrêt précoce0.01

Checkpoints, stop_training et best vs fast

Évaluation : taux d'erreur caractère avec lstmeval

Jugez le modèle sur des données qu'il n'a jamais vues.

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

Suivez le CER sur un ensemble réservé. Quand il cesse de baisser — ou remonte alors que la perte d'entraînement continue de chuter — il y a surapprentissage ; arrêtez et utilisez le checkpoint précédent.

Déployer le modèle entraîné

Copiez le traineddata, pointez le moteur dessus et testez.

bash
# Copiez dans un répertoire tessdata
cp data/myfont.traineddata /usr/share/tesseract-ocr/5/tessdata/
# ou définissez un préfixe personnalisé
export TESSDATA_PREFIX=/chemin/vers/tessdata
tesseract echantillon.png stdout -l myfont

Vous pouvez combiner votre modèle avec une langue de base, par ex. -l myfont+fra. En Python, passez la même valeur à pytesseract ; voir le guide Python.

Dépannage

SymptômeCauseSolution
Boîtes incorrectes / données de référence mal alignéesMétriques de police incorrectes ou images de ligne trop grandesRégénérez avec le bon --font et --ptsize ; vérifiez quelques images à l'œil.
Caractères manquants dans la sortieCaractère absent du unicharsetAjoutez les glyphes à vos données de référence et reconstruisez le unicharset.
La perte diverge / NaNTaux d'apprentissage trop élevéRéduisez LEARNING_RATE et reprenez depuis un checkpoint antérieur.
Mémoire insuffisante (OOM)Lot trop grand pour la RAM/GPURéduisez BATCH_SIZE/la taille du réseau, ou utilisez une machine avec plus de mémoire.
Le CER de validation monte alors que la perte baisseSurapprentissageArrêtez plus tôt, ajoutez des données de référence plus variées ou utilisez un taux d'apprentissage plus faible.

Questions fréquentes sur l'entraînement

Puis-je entraîner Tesseract sans le compiler depuis les sources ?

Non. Les outils d'entraînement ne sont pas dans les installateurs binaires ; utilisez Linux ou WSL2 avec libtesseract-dev et le dépôt tesstrain.

Combien d'échantillons faut-il ?

Environ 100–500 lignes pour valider la chaîne et 1 000–5 000 pour la production. Le fine-tuning demande moins que l'entraînement depuis zéro.

Fine-tuning ou partir de zéro ?

Fine-tuning pour une nouvelle police ou un vocabulaire dans une écriture existante ; partir de zéro uniquement pour une écriture réellement nouvelle.

Quand arrêter l'entraînement ?

Quand le CER de validation cesse de s'améliorer, pas quand la perte d'entraînement se stabilise. Cet écart est le surapprentissage.

Où placer le modèle ?

Copiez <MODEL_NAME>.traineddata dans un répertoire tessdata (ou définissez TESSDATA_PREFIX) et exécutez tesseract image.png stdout -l myfont.