Pular para o conteúdo principal
Guia para desenvolvedores

Treine o Tesseract com fontes
e dados personalizados (tesstrain, v5).

Um guia testado e orientado a decisões para ajustar e treinar modelos do Tesseract 5 com tesstrain: compilar a partir do código-fonte, preparar o ground truth, executar make training, ajustar as variáveis importantes, medir o CER com lstmeval e implantar seu traineddata.

TL;DR — ajuste fino de um modelo existente

Se o seu script já é suportado, o ajuste fino é o caminho mais rápido para um modelo melhor.

bash
git clone https://github.com/tesseract-ocr/tesstrain.git
cd tesstrain && make tesseract-langdata
# coloque imagens de linha + .gt.txt em data/myfont-ground-truth/
make training MODEL_NAME=myfont START_MODEL=por

O treinamento não está disponível pelos instaladores binários. Você precisa de Linux ou WSL2. Veja a instalação para compilar a partir do código-fonte.

Árvore de decisão: ajuste fino vs cortar a camada superior vs do zero

Escolher a abordagem certa economiza dias de treinamento desperdiçado.

AbordagemUse quandoDados necessáriosTempo
Ajuste fino (FINETUNE_TYPE=1)Mesmo script, nova fonte ou vocabulário de domínio1.000–5.000 linhasHoras
Cortar camada superior (FINETUNE_TYPE=2)Mesmo script, glifos claramente diferentes5.000–20.000 linhasHoras–dias
Do zeroNovo script ou alfabeto muito diferente50.000+ linhasDias

Comece pela opção mais leve que possa funcionar, avalie e só escale se o CER for inaceitável. A maioria dos problemas de fontes personalizadas se resolve com ajuste fino.

Pré-requisitos

O treinamento exige a compilação a partir do código-fonte, não o binário empacotado.

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   # obtém langdata_lstm + tessdata_best

Preparar o ground truth

O ground truth são imagens de linha emparelhadas com seu texto exato.

O tesstrain espera uma imagem por linha de texto em data/<MODEL_NAME>-ground-truth/, cada uma com um arquivo .gt.txt contendo a transcrição exata. Gere imagens a partir de um arquivo de texto e uma fonte com text2image, e divida textos longos em linhas com split_training_text.py do langdata_lstm.

bash
# Gere imagens de linha a partir de um corpus + uma fonte
text2image --text=corpus.txt \
  --outputbase=data/myfont-ground-truth/myfont \
  --font='Minha Fonte Personalizada' --fonts_dir=/usr/share/fonts \
  --ptsize=14

# text2image também gera arquivos .box; converta-os para .gt.txt
# (tesstrain/training/ tem scripts auxiliares, ou renomeie após verificar)

Quanto de dados: 100–500 linhas para validar o pipeline, 1.000–5.000 para produção. A precisão vem da variedade — fontes, tamanhos, espaçamento e ruído diferentes — mais do que do volume bruto.

Fontes e seleção de unicharset

O conjunto de caracteres precisa cobrir tudo o que o modelo verá.

Executar o treinamento

Um único comando conduz todo o pipeline do Makefile.

bash
make training \
  MODEL_NAME=myfont \
  START_MODEL=por \
  TESSDATA_PREFIX=../tessdata_best \
  MAX_ITERATIONS=10000
VariávelSignificadoValor típico
START_MODELModelo do qual continuar (ajuste fino)eng, por…
TESSDATA_PREFIXDiretório que contém o modelo inicial../tessdata_best
MAX_ITERATIONSLimite superior de passos de treinamento10000–100000
LEARNING_RATETamanho do passo; menor é mais seguro no ajuste fino0.0001–0.001
FINETUNE_TYPE0 do zero, 1 ajuste fino, 2 cortar camada superior1
NET_SPECEspecificação da arquitetura de redemanter o padrão
RATIO_TRAINDivisão treino/validação0.9
TARGET_ERROR_RATEMeta de CER para parada antecipada0.01

Checkpoints, stop_training e best vs fast

Avaliação: taxa de erro de caractere com lstmeval

Julgue o modelo com dados que ele nunca viu no treinamento.

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

Acompanhe o CER em um conjunto reservado. Quando ele para de cair — ou começa a subir enquanto a perda de treino ainda cai — há overfitting; pare e use o checkpoint anterior.

Implantar o modelo treinado

Copie o traineddata, aponte o motor para ele e teste.

bash
# Copie para um diretório tessdata
cp data/myfont.traineddata /usr/share/tesseract-ocr/5/tessdata/
# ou defina um prefixo personalizado
export TESSDATA_PREFIX=/caminho/para/tessdata
tesseract amostra.png stdout -l myfont

Você pode combinar seu modelo com um idioma base, por exemplo -l myfont+por. No Python, passe o mesmo valor ao pytesseract; veja o guia de Python.

Solução de problemas

SintomaCausaSolução
Caixas ruins / ground truth desalinhadoMétricas de fonte incorretas ou imagens de linha grandes demaisRegenere com o --font e --ptsize corretos; verifique algumas imagens visualmente.
Caracteres ausentes na saídaCaractere ausente do unicharsetAdicione os glifos ao seu ground truth e reconstrua o unicharset.
A perda diverge / NaNTaxa de aprendizado alta demaisReduza o LEARNING_RATE e retome de um checkpoint anterior.
Sem memória (OOM)Lote grande demais para a RAM/GPUReduza o BATCH_SIZE/o tamanho da rede, ou use uma máquina com mais memória.
O CER de validação sobe enquanto a perda caiOverfittingPare mais cedo, adicione ground truth mais variado ou use uma taxa de aprendizado menor.

Perguntas frequentes sobre treinamento

Posso treinar o Tesseract sem compilar a partir do código-fonte?

Não. As ferramentas de treinamento não estão nos instaladores binários; use Linux ou WSL2 com libtesseract-dev e o repositório tesstrain.

Quantas amostras preciso?

Cerca de 100–500 linhas para validar o pipeline e 1.000–5.000 para produção. O ajuste fino precisa de menos do que treinar do zero.

Ajuste fino ou do zero?

Ajuste fino para uma nova fonte ou vocabulário em um script existente; do zero apenas para um script genuinamente novo.

Quando devo parar o treinamento?

Quando o CER de validação para de melhorar, não quando a perda de treino se estabiliza. Essa diferença é overfitting.

Onde fica o modelo?

Copie <MODEL_NAME>.traineddata para um diretório tessdata (ou defina TESSDATA_PREFIX) e execute tesseract image.png stdout -l myfont.