Tesseract 5.0 之后,训练流程虽然变得更加科学(基于 LSTM),但也复杂了不少。与其从头训练一个模型,不如在官方预训练模型的基础上进行 微调(Fine-tuning),这不仅速度快,而且只需要少量数据。
一、 核心逻辑:Layer-cancelling(图层取消)
微调的本质是:保留 Tesseract 提取图像特征的前端网络,只重写最后几层负责字符输出的层。这样它就能利用已有的“视觉经验”去学习你的新字符。
二、 准备阶段:工欲善其事
你需要准备三样东西:
- 基础模型(Best Model): 从 Tesseract 官方仓库下载
tessdata_best中的.traineddata文件。 - 训练素材: 至少 100-500 张包含目标字体的图片。
- 地面真值(Ground Truth): 每一张图片对应一个同名的
.gt.txt文件,里面写入图片里的文字。
三、 实战步骤:五步走
1. 生成训练样本
利用 tesstrain 脚本将你的图片和文本打包成 .lstmf 格式(这是 Tesseract 训练专用的数据格式)。
Bash
python3 generate_line_data.py --prefix my_font --font "MyCustomFont" --text training_text.txt
2. 提取模型原型
从现有的模型中“提取”出网络结构:
Bash
combine_tessdata -e chi_sim.traineddata chi_sim.lstm
3. 启动微调训练
使用 lstmtraining 工具。关键参数是 --continue_from(指定原始模型)和 --model_output(输出路径)。
Bash
lstmtraining \
--model_output ./output/my_custom_model \
--continue_from ./chi_sim.lstm \
--traineddata ./chi_sim.traineddata \
--train_listfile ./all_lstms.txt \
--max_iterations 1000
4. 监控收敛性
观察控制台输出的 Character Error Rate (CER)。当 CER 降到你满意的范围(通常 < 1%)时,可以手动停止训练。
5. 合并并导出
最后将训练出的权重重新打包回 .traineddata 文件:
Bash
lstmtraining --stop_training \
--continue_from ./output/my_custom_model_checkpoint \
--traineddata ./chi_sim.traineddata \
--model_output ./my_custom_model.traineddata
四、 避坑指南:提高微调成功率的秘诀
- 图像质量一致性: 训练集的 DPI 必须与未来实际使用的 DPI 一致(建议 300 DPI)。
- 字符覆盖率: 确保你的训练文本覆盖了所有你需要识别的字符。
- 合成数据 vs 真实数据: 建议 70% 真实扫描件 + 30% 用字体生成的合成图。