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.
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=fraL'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 quand | Données nécessaires | Temps |
|---|---|---|---|
Fine-tuning (FINETUNE_TYPE=1) | Même écriture, nouvelle police ou vocabulaire métier | 1 000–5 000 lignes | Heures |
Couper la couche supérieure (FINETUNE_TYPE=2) | Même écriture, glyphes nettement différents | 5 000–20 000 lignes | Heures–jours |
| Partir de zéro | Nouvelle écriture ou alphabet très différent | 50 000+ lignes | Jours |
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é.
- Un environnement Linux — natif ou WSL2 sous Windows. macOS n'est pas pris en charge pour l'entraînement.
git,make,pkg-config,automakeet une chaîne d'outils C++.libtesseract-devetlibleptonica-dev(les binaires d'entraînement s'y lient).- Le dépôt
tesstrain, ainsi quelangdata_lstmet un modèle de départ detessdata_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 # récupère langdata_lstm + tessdata_bestPré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.
# 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.
- Installez les polices d'entraînement dans l'environnement ; passez le nom exact de la famille à
--font. - En fine-tuning, conservez le
unicharsetdu modèle de départ pour que la couche de sortie corresponde. - Pour une nouvelle écriture, dérivez le unicharset de vos données de référence afin que chaque glyphe soit représenté.
- Incluez ponctuation, chiffres et majuscules/minuscules si les documents réels les contiennent ; sinon le modèle les abandonnera.
Lancer l'entraînement
Une seule commande pilote tout le pipeline Makefile.
make training \
MODEL_NAME=myfont \
START_MODEL=fra \
TESSDATA_PREFIX=../tessdata_best \
MAX_ITERATIONS=10000| Variable | Signification | Valeur typique |
|---|---|---|
START_MODEL | Modèle à partir duquel continuer (fine-tuning) | eng, fra… |
TESSDATA_PREFIX | Répertoire contenant le modèle de départ | ../tessdata_best |
MAX_ITERATIONS | Limite supérieure des étapes d'entraînement | 10000–100000 |
LEARNING_RATE | Pas d'apprentissage ; plus petit est plus sûr en fine-tuning | 0.0001–0.001 |
FINETUNE_TYPE | 0 de zéro, 1 fine-tuning, 2 couper la couche supérieure | 1 |
NET_SPEC | Spécification de l'architecture réseau | laisser par défaut |
RATIO_TRAIN | Répartition entraînement/validation | 0.9 |
TARGET_ERROR_RATE | Cible de CER pour l'arrêt précoce | 0.01 |
Checkpoints, stop_training et best vs fast
- tesstrain écrit des checkpoints réguliers (par ex.
myfont_checkpoint) que vous pouvez évaluer ou reprendre. - Créez un fichier
stop_trainingdans le répertoire de sortie pour terminer proprement l'exécution à l'itération suivante. - Convertissez un checkpoint en modèle utilisable avec
combine_tessdata -e/convert_to_intdes outils d'entraînement. - Les modèles best sont les plus précis ; les fast sont plus petits et plus rapides. Affinez depuis
tessdata_bestquand la précision compte.
Évaluation : taux d'erreur caractère avec lstmeval
Jugez le modèle sur des données qu'il n'a jamais vues.
lstmeval --model data/myfont_checkpoint \
--traineddata ../tessdata_best/fra.traineddata \
--eval_listfile data/myfont-ground-truth/eval_files.txtSuivez 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.
# 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 myfontVous 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ôme | Cause | Solution |
|---|---|---|
| Boîtes incorrectes / données de référence mal alignées | Métriques de police incorrectes ou images de ligne trop grandes | Régénérez avec le bon --font et --ptsize ; vérifiez quelques images à l'œil. |
| Caractères manquants dans la sortie | Caractère absent du unicharset | Ajoutez les glyphes à vos données de référence et reconstruisez le unicharset. |
| La perte diverge / NaN | Taux 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/GPU | Ré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 baisse | Surapprentissage | Arrê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.