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.
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=porO 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.
| Abordagem | Use quando | Dados necessários | Tempo |
|---|---|---|---|
Ajuste fino (FINETUNE_TYPE=1) | Mesmo script, nova fonte ou vocabulário de domínio | 1.000–5.000 linhas | Horas |
Cortar camada superior (FINETUNE_TYPE=2) | Mesmo script, glifos claramente diferentes | 5.000–20.000 linhas | Horas–dias |
| Do zero | Novo script ou alfabeto muito diferente | 50.000+ linhas | Dias |
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.
- Um ambiente Linux — nativo ou WSL2 no Windows. macOS não é suportado para treinamento.
git,make,pkg-config,automakee um toolchain C++.libtesseract-develibleptonica-dev(os binários de treinamento linkam contra elas).- O repositório
tesstrain, além delangdata_lstme um modelo inicial dotessdata_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 # obtém langdata_lstm + tessdata_bestPreparar 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.
# 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á.
- Instale as fontes de treinamento no ambiente; passe o nome exato da família para
--font. - No ajuste fino, mantenha o
unicharsetdo modelo inicial para que a camada de saída corresponda. - Para um novo script, derive o unicharset do seu ground truth para que todos os glifos estejam representados.
- Inclua pontuação, dígitos e maiúsculas/minúsculas se os documentos reais os contiverem; caso contrário, o modelo os descartará.
Executar o treinamento
Um único comando conduz todo o pipeline do Makefile.
make training \
MODEL_NAME=myfont \
START_MODEL=por \
TESSDATA_PREFIX=../tessdata_best \
MAX_ITERATIONS=10000| Variável | Significado | Valor típico |
|---|---|---|
START_MODEL | Modelo do qual continuar (ajuste fino) | eng, por… |
TESSDATA_PREFIX | Diretório que contém o modelo inicial | ../tessdata_best |
MAX_ITERATIONS | Limite superior de passos de treinamento | 10000–100000 |
LEARNING_RATE | Tamanho do passo; menor é mais seguro no ajuste fino | 0.0001–0.001 |
FINETUNE_TYPE | 0 do zero, 1 ajuste fino, 2 cortar camada superior | 1 |
NET_SPEC | Especificação da arquitetura de rede | manter o padrão |
RATIO_TRAIN | Divisão treino/validação | 0.9 |
TARGET_ERROR_RATE | Meta de CER para parada antecipada | 0.01 |
Checkpoints, stop_training e best vs fast
- O tesstrain grava checkpoints periódicos (por exemplo
myfont_checkpoint) dos quais você pode avaliar ou retomar. - Crie um arquivo
stop_trainingno diretório de saída para encerrar a execução de forma limpa na próxima iteração. - Converta um checkpoint em um modelo utilizável com
combine_tessdata -e/convert_to_intdas ferramentas de treinamento. - Modelos best são os mais precisos; fast são menores e mais rápidos. Faça ajuste fino a partir do
tessdata_bestquando a precisão importar.
Avaliação: taxa de erro de caractere com lstmeval
Julgue o modelo com dados que ele nunca viu no treinamento.
lstmeval --model data/myfont_checkpoint \
--traineddata ../tessdata_best/por.traineddata \
--eval_listfile data/myfont-ground-truth/eval_files.txtAcompanhe 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.
# 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 myfontVocê 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
| Sintoma | Causa | Solução |
|---|---|---|
| Caixas ruins / ground truth desalinhado | Métricas de fonte incorretas ou imagens de linha grandes demais | Regenere com o --font e --ptsize corretos; verifique algumas imagens visualmente. |
| Caracteres ausentes na saída | Caractere ausente do unicharset | Adicione os glifos ao seu ground truth e reconstrua o unicharset. |
| A perda diverge / NaN | Taxa de aprendizado alta demais | Reduza o LEARNING_RATE e retome de um checkpoint anterior. |
| Sem memória (OOM) | Lote grande demais para a RAM/GPU | Reduza 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 cai | Overfitting | Pare 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.