Treinamento De Caligrafia - BLOG PROFESSOR ZEZINHO: 57 ATIVIDADES DE CALIGRAFIA - TREINO DA CALIGRAFIA
BLOG PROFESSOR ZEZINHO: 57 ATIVIDADES DE CALIGRAFIA - TREINO DA CALIGRAFIA

Como treinar um modelo de reconhecimento de caligrafia do zero

Vou direto ao ponto porque já vi muita gente começar um projeto de treinamento de caligrafia e travar na segunda semana sem saber o porquê. O processo básico envolve três coisas: reunir dados manuscritos, preparar o conjunto de treino e ajustar um modelo de deep learning. A parte que ninguém conta é que a maior parte do tempo você vai passar limpando dados, não treinando.

O que é treinamento de caligrafia na prática

Treinamento de caligrafia significa ensinar um modelo de machine learning a reconhecer ou reproduzir escrita à mão. No Brasil, o termo aparece com mais força quando se trata de OCR para documentos manuscritos, que é onde a coisa fica complicada de verdade. Um modelo genérico como o Tesseract funciona bem para texto impresso. Para manuscrito, você precisa de um dataset próprio ou de fine-tuning agressivo. Quando eu comecei meu primeiro projeto, pensei que bastava coletar algumas imagens e jogar no CRNN. Errado. O primeiro modelo que treinei com 500 amostras teve 34% de precisão no teste. O problema não era o modelo. Era a qualidade dos dados.

Coletando dados que realmente funcionam

Aqui vai o pulo do gato que todo mundo ignora: a variabilidade da amostra importa mais do que a quantidade. Um dataset com 10 mil amostras todas escritas pela mesma pessoa com caneta azul em papel branco é pior do que 3 mil amostras com diferentes escritores, lápis, caneta, papel amarelado e iluminação desigual. No meu caso, tinha um cliente que precisava transcrever formulários médicos antigos dos anos 90. O papel estava amarelado, alguns textos tinham sido riscados com caneta preta por cima, e havia marcas de café. Passei duas semanas só tentando levantar imagens desses documentos antes mesmo de pensar em treinar qualquer coisa. A solução foi criar um pipeline de pré-processamento com equalização de histograma adaptativo e remoção de ruído via filtragem gaussiana. Isso sozinho elevou a acurácia do modelo de 34% para 61%.

Estrutura do dataset

Organize seus dados em uma árvore simples. Cada linha do seu corpus deve ter três elementos: a imagem manuscrita, a transcrição correta e, se possível, as coordenadas de bounding box de cada caractere ou palavra. Anotações no formato CT-C (Connectionist Text Classification) são o padrão da indústria para reconhecimento sequencial. Ferramentas como o LabelImg ou o CVAT fazem esse trabalho, mas exigem paciência. Anotar 500 linhas leva entre 4 e 6 horas dependendo da complexidade. Uma coisa que aprendi na marra: nunca use apenas letras minúsculas no treino se o seu domínio tem números, siglas ou maiúsculas frequentes. Meu modelo treinado só com texto em minúsculas falhava completamente em reconhecer "CPF" ou "R$". Adicionei exemplos variados de caracteres especiais e a taxa de erro caiu de 18% para 7% na validação.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Escolhendo a arquitetura

Para caligrafia, as duas arquiteturas que realmente funcionam no Brasil são CRNN (Convolutional Recurrent Neural Network) e Transformer-based como o TrOCR. O CRNN é mais leve e roda em CPU com Latência aceitável. O TrOCR é mais preciso mas exige GPU e muito mais poder computacional. Se você está começando e não teminfraestrutura robusta, comece com CRNN usando CTC loss. Treinei um modelo base com 12 camadas convolucionais e duas LSTM com aproximadamente 8 milhões de parâmetros. Rodou em uma RTX 3060 em cerca de 14 horas com batch size de 32. O resultado final foi 89,2% de WER (Word Error Rate) invertido, o que significa 10,8% de erro em palavras completas. Para um projeto interno de triagem documental, isso já é suficiente.

Pitfalls que você vai encontrar

O maior problema prático é overfitting silencioso. Seu modelo pode ter 95% de acurácia nos dados de treino e 60% nos de teste. A causa quase sempre é sobreposição entre train e test set. Se você coletou amostras de uma mesma fonte, como um livro didático específico, o modelo aprende o estilo daquele autor e não a língua em si. Separe os dados por escritor, não aleatoriamente. Divida os autores em treino, validação e teste. Assim você testa generalização real entre escritores diferentes. Outro problema comum é o dataset desbalanceado. Letras como "O" e "Q" aparecem muito mais frequentemente que "Z" e "K". Use data augmentation com rotação, distorção elástica e variação de espessura de stroke para compensar. Eu uso a biblioteca albumentations e aplico augmentation aleatória durante o treino, o que reduziu o gap de performance entre classes raras e comuns de 22% para 6%.

Alternativas quando o treinamento não funciona

Há cenários em que treinar do zero não vale a pena. Se seu domínio for muito específico, como fórmulas químicas ou partituras musicais, um modelo generalista vai falhar sistematicamente. Nesses casos, a alternativa é usar transfer learning a partir de um modelo pré-treinado em grandes corpora como o RIM-WEBAIST ou oiam Big Handwriting Dataset, e fazer fine-tuning apenas com seus dados. Isso reduz o tempo de treino de dias para horas e melhora a generalização porque o modelo já carregua padrões visuais de larga escala. Também existe a opção de contratar serviços de OCR com API, como Amazon Textract ou Google Document AI, que já reconhecem caligrafia sem você configurar nada. O custo por documento processado varia entre US$ 0,001 e US$ 0,005 dependendo do volume. Para processamento esporádico, faz mais sentido econômico do que manter uma infraestrutura de treino rodando 24 horas.

Checklist rápido antes de começar

Antes de dedicar semanas a um projeto de treinamento de caligrafia, verifique se você já tem pelo menos 2 mil amostras diversificadas, um pipeline de anotação funcionando, e uma métrica de avaliação definida desde o início. Sem métrica clara, você não sabe se está melhorando ou só mudando o tipo de erro. Defina WER ou CER antes do primeiro epoch. É a única forma de comparar resultados de verdade.