Vai al contenuto principale
Guida per sviluppatori

Addestra Tesseract su font
e dati personalizzati (tesstrain, v5).

Una guida collaudata e orientata alle decisioni per il fine-tuning e l'addestramento di modelli Tesseract 5 con tesstrain: compilare dai sorgenti, preparare il ground truth, eseguire make training, regolare le variabili importanti, misurare il CER con lstmeval e distribuire il tuo traineddata.

In breve — fine-tuning di un modello esistente

Se il tuo script è già supportato, il fine-tuning è la via più rapida a un modello migliore.

bash
git clone https://github.com/tesseract-ocr/tesstrain.git
cd tesstrain && make tesseract-langdata
# metti immagini di riga + .gt.txt in data/myfont-ground-truth/
make training MODEL_NAME=myfont START_MODEL=ita

L'addestramento non è disponibile tramite gli installer binari. Serve Linux o WSL2. Vedi l'installazione per compilare dai sorgenti.

Albero decisionale: fine-tuning vs taglio dello strato superiore vs da zero

Scegliere l'approccio giusto fa risparmiare giorni di addestramento sprecato.

ApproccioUsalo quandoDati necessariTempo
Fine-tuning (FINETUNE_TYPE=1)Stesso script, nuovo font o vocabolario di dominio1.000–5.000 righeOre
Taglio strato superiore (FINETUNE_TYPE=2)Stesso script, glifi nettamente diversi5.000–20.000 righeOre–giorni
Da zeroNuovo script o alfabeto molto diverso50.000+ righeGiorni

Inizia con l'opzione più leggera che potrebbe funzionare, valuta e passa a soluzioni più pesanti solo se il CER è inaccettabile. La maggior parte dei problemi con font personalizzati si risolve con il fine-tuning.

Prerequisiti

L'addestramento richiede la compilazione dai sorgenti, non il binario preconfezionato.

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   # scarica langdata_lstm + tessdata_best

Preparare il ground truth

Il ground truth è costituito da immagini di riga abbinate al loro testo esatto.

tesstrain si aspetta un'immagine per riga di testo in data/<MODEL_NAME>-ground-truth/, ciascuna con un file .gt.txt contenente la trascrizione esatta. Genera le immagini da un file di testo e un font con text2image, e dividi i testi lunghi in righe con split_training_text.py di langdata_lstm.

bash
# Genera immagini di riga da un corpus + un font
text2image --text=corpus.txt \
  --outputbase=data/myfont-ground-truth/myfont \
  --font='Mio Font Personalizzato' --fonts_dir=/usr/share/fonts \
  --ptsize=14

# text2image genera anche file .box; convertili in .gt.txt
# (tesstrain/training/ contiene script di supporto, o rinomina dopo la verifica)

Quanti dati: 100–500 righe per validare la pipeline, 1.000–5.000 per la produzione. La precisione deriva dalla varietà — font, dimensioni, spaziature e rumore diversi — più che dal volume grezzo.

Font e selezione dell'unicharset

Il set di caratteri deve coprire tutto ciò che il modello vedrà.

Eseguire l'addestramento

Un solo comando guida l'intera pipeline del Makefile.

bash
make training \
  MODEL_NAME=myfont \
  START_MODEL=ita \
  TESSDATA_PREFIX=../tessdata_best \
  MAX_ITERATIONS=10000
VariabileSignificatoValore tipico
START_MODELModello da cui continuare (fine-tuning)eng, ita…
TESSDATA_PREFIXDirectory che contiene il modello di partenza../tessdata_best
MAX_ITERATIONSLimite massimo di passi di addestramento10000–100000
LEARNING_RATEAmpiezza del passo; più piccola è più sicura nel fine-tuning0.0001–0.001
FINETUNE_TYPE0 da zero, 1 fine-tuning, 2 taglio strato superiore1
NET_SPECSpecifica dell'architettura di retelasciare predefinito
RATIO_TRAINDivisione addestramento/validazione0.9
TARGET_ERROR_RATEObiettivo CER per l'arresto anticipato0.01

Checkpoint, stop_training e best vs fast

Valutazione: tasso di errore carattere con lstmeval

Giudica il modello su dati che non ha mai visto.

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

Monitora il CER su un set riservato. Quando smette di scendere — o sale mentre la perdita di addestramento continua a calare — c'è overfitting; fermati e usa il checkpoint precedente.

Distribuire il modello addestrato

Copia il traineddata, punta il motore su di esso e prova.

bash
# Copia in una directory tessdata
cp data/myfont.traineddata /usr/share/tesseract-ocr/5/tessdata/
# oppure imposta un prefisso personalizzato
export TESSDATA_PREFIX=/percorso/verso/tessdata
tesseract campione.png stdout -l myfont

Puoi combinare il tuo modello con una lingua di base, ad es. -l myfont+ita. In Python, passa lo stesso valore a pytesseract; vedi la guida Python.

Risoluzione dei problemi

SintomoCausaSoluzione
Box errati / ground truth disallineatoMetriche del font errate o immagini di riga troppo grandiRigenera con il --font e --ptsize corretti; controlla alcune immagini a occhio.
Caratteri mancanti nell'outputCarattere assente dall'unicharsetAggiungi i glifi al ground truth e ricostruisci l'unicharset.
La perdita diverge / NaNTasso di apprendimento troppo altoRiduci LEARNING_RATE e riprendi da un checkpoint precedente.
Memoria esaurita (OOM)Batch troppo grande per RAM/GPURiduci BATCH_SIZE/dimensione della rete, o usa una macchina con più memoria.
Il CER di validazione sale mentre la perdita scendeOverfittingFermati prima, aggiungi ground truth più vario o usa un tasso di apprendimento più basso.

Domande frequenti sull'addestramento

Posso addestrare Tesseract senza compilarlo dai sorgenti?

No. Gli strumenti di addestramento non sono negli installer binari; usa Linux o WSL2 con libtesseract-dev e il repository tesstrain.

Quanti campioni servono?

Circa 100–500 righe per validare la pipeline e 1.000–5.000 per la produzione. Il fine-tuning richiede meno dati dell'addestramento da zero.

Fine-tuning o da zero?

Fine-tuning per un nuovo font o vocabolario in uno script esistente; da zero solo per uno script realmente nuovo.

Quando fermare l'addestramento?

Quando il CER di validazione smette di migliorare, non quando la perdita di addestramento si appiattisce. Quella differenza è overfitting.

Dove va il modello?

Copia <MODEL_NAME>.traineddata in una directory tessdata (o imposta TESSDATA_PREFIX) ed esegui tesseract image.png stdout -l myfont.