准备数据 → 预处理 → 标注 → 生成Box → 训练 → 测试 → 部署
要求:
✓ 覆盖所有字符
✓ 不同光照、角度
✓ 代表性样本
✓ 清晰度高(≥300 DPI)
OCRTrainingHelper.PreprocessTrainingImages(
@"raw_images\", // 输入
@"processed_images\", // 输出
targetWidth: 800 // 宽度
);
为每张图片创建同名 .txt 文件
sample001.png → sample001.txt (内容: "ABC123")
sample002.png → sample002.txt (内容: "DEF456")
OCRTrainingHelper.ValidateDataset(@"processed_images\");
// 确保每张图片都有对应的 .txt 文件
OCRTrainingHelper.AnalyzeCharacterFrequency(@"labels\");
// 了解字符分布,优化白名单
OCRTrainingHelper.GenerateTrainingScript(
"myfont", // 字体名称
@"train.bat" // 输出脚本
);
双击运行 train.bat
等待训练完成
生成 myfont.traineddata
1. 将 myfont.traineddata 放入 tessdata 文件夹
2. 代码中使用:
*/
var engine = OCREngine.GetInstance("myfont");
var result = engine.RecognizeText("test.png");
/*
---
## 🛠️ 训练工具
### jTessBoxEditor(推荐)
**下载**: https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/
**功能**:
- 合并 TIFF 文件
- 可视化标注校正
- Box 文件编辑
**使用步骤**:
1. Tools → Merge TIFF → 生成 .tif
2. Box Editor → Open → 加载 .tif
3. 逐张检查并修正标注框
4. Save → 生成 .box 文件
### Tesseract 命令行
bash tesseract image.tif output batch.nochop makebox tesseract image.tif output nobatch box.train unicharset_extractor output.box shapeclustering -F unicharset -O unicharset output.tr mftraining -F unicharset -U unicharset -O font.unicharset output.tr cntraining output.tr combine_tessdata font.
---
## 📊 训练参数建议
### 样本数量
| 场景 | 最少样本 | 推荐样本 |
|------|---------|---------|
| 简单(数字) | 50 | 100-200 |
| 中等(字母+数字) | 100 | 200-500 |
| 复杂(中文) | 200 | 500-1000 |
| 手写体 | 500 | 1000+ |
### 图片规格
- **分辨率**: 300 DPI(最低 200 DPI)
- **格式**: PNG(无损)
- **尺寸**: 宽度 800px(高度自动)
- **颜色**: 灰度或二值
### 训练时间估算
| 样本数 | 估计时间 |
|--------|---------|
| 100 | 5-10 分钟 |
| 500 | 20-30 分钟 |
| 1000 | 40-60 分钟 |
---
## ✅ 训练检查清单
### 训练前
- [ ] 收集足够的样本图片
- [ ] 图片质量符合要求
- [ ] 创建标注文件(.txt)
- [ ] 验证数据集完整性
- [ ] 分析字符频率
### 训练中
- [ ] 正确安装 Tesseract 训练工具
- [ ] 设置正确的字体名称
- [ ] 按顺序执行训练步骤
- [ ] 监控训练日志,无错误
### 训练后
- [ ] 生成的 .traineddata 文件大小合理
- [ ] 在测试集上验证准确率
- [ ] 与原有模型对比效果
- [ ] 部署到生产环境前充分测试
---
## 🔍 常见问题
### Q1: 训练失败,报错 "box file not found"
**解决**: 确保 .box 文件与 .tif 文件同名且在同一目录
### Q2: 训练后准确率没有提升
**可能原因**:
- 样本数量不足
- 样本质量差
- 标注错误
- 字符覆盖不全
**解决**:
- 增加样本数量
- 提高图片质量
- 仔细检查标注
- 补充缺失字符的样本
### Q3: 训练时间太长
**优化**:
- 减少样本数量(保持代表性)
- 降低图片分辨率
- 使用更快的 CPU
- 并行处理(如果支持)
### Q4: 如何评估训练效果?
**方法**:
1. 准备独立的测试集(不参与训练)
2. 分别用原模型和新模型识别
3. 对比准确率和置信度
4. 统计误识别案例
---
## 💡 训练技巧
### 提高准确率
1. **多样化样本** - 不同角度、光照、背景
2. **高质量标注** - 人工校对,避免错误
3. **字符平衡** - 确保每个字符有足够样本
4. **迭代训练** - 根据错误案例补充样本
### 加速训练
1. **精简字符集** - 只包含需要的字符
2. **优化图片** - 适当降低分辨率
3. **批量处理** - 使用脚本自动化
4. **硬件升级** - 更快的 CPU/SSD
### 调试技巧
1. **小样本测试** - 先用 10-20 张测试流程
2. **查看日志** - 关注警告和错误信息
3. **可视化检查** - 用 jTessBoxEditor 查看标注
4. **对比测试** - 与原模型对比效果
---
## 📚 进阶资源
### 官方文档
- [Tesseract Training Guide](https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract)
- [Tesseract Data Files](https://github.com/tesseract-ocr/tessdata)
### 工具下载
- [jTessBoxEditor](https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/)
- [Tesseract Installer](https://github.com/UB-Mannheim/tesseract/wiki)
### 在线平台
- [Transkribus](https://transkribus.eu/) - 适合手写体
- [OCR-D](https://ocr-d.de/) - 现代化训练流程
---
## 🎯 快速命令参考
### 创建训练项目
csharp OCRTrainingHelper.CreateSampleProject(@"D:\MyProject");
### 批量预处理
csharp OCRTrainingHelper.PreprocessTrainingImages(
@"input\", @"output\", 800, 0);
### 生成标注(示例)
csharp var labels = new Dictionary {
{"sample001", "ABC123"},
{"sample002", "DEF456"}
}; OCRTrainingHelper.GenerateLabelFiles(@"images\", labels);
### 验证数据集
csharp var missing = OCRTrainingHelper.ValidateDataset(@"data\");
### 分析字符
csharp var freq = OCRTrainingHelper.AnalyzeCharacterFrequency(@"labels\");
### 生成脚本
csharp OCRTrainingHelper.GenerateTrainingScript("myfont", @"train.bat"); ```
训练愉快! 🎉
提示:训练是一个迭代过程,不断优化才能获得最佳效果