训练Tesseract 5.0模型时遇Compute CTC targets失败错误求助
Tesseract 5.0图表识别训练报错解决方案
1. 排查标注文件格式错误
从调试日志ERROR: Could not parse int32_t from 10??可以确定,你的.gt.txt或.box文件存在非法字符/格式问题:
- 批量检查所有
.gt.txt文件,删除乱码、问号等非预期字符,确保内容仅包含训练需要的字符(比如数字、小数点、正负号等)。 - 校验
.box文件格式:每行必须严格遵循字符 x1 y1 x2 y2 page结构,所有坐标必须是整数,不能有缺失或非数字项。可以用以下脚本批量验证:import os box_dir = "你的box文件目录路径" for filename in os.listdir(box_dir): if filename.endswith(".box"): with open(os.path.join(box_dir, filename), 'r') as f: for line_num, line in enumerate(f, 1): parts = line.strip().split() if len(parts) != 5: print(f"{filename}第{line_num}行格式错误:{line}") try: int(parts[1]), int(parts[2]), int(parts[3]), int(parts[4]) except ValueError: print(f"{filename}第{line_num}行坐标非整数:{line}")
2. 清理损坏的Checkpoint文件
Failed to read continue from: data/graphDetector/checkpoints/graphDetector_checkpoint是因为残留了损坏的训练 checkpoint 文件,执行以下操作:
- 删除
data/graphDetector/checkpoints/目录下的所有文件 - 重新执行训练命令,不要尝试从损坏的 checkpoint 恢复
3. 优化训练参数与数据预处理
针对图表识别场景,调整以下配置提升训练稳定性:
- PSM参数:PSM=11适合稀疏文本,若你的图表包含密集数值/刻度,可尝试PSM=6(单一文本块假设)或PSM=3(全自动页面分割)。
- 字符集配置:确保训练使用的字符集包含图表所有可能字符,用
unicharset_extractor工具从干净的标注文件生成:unicharset_extractor data/graphDetector-ground-truth/*.gt.txt - 图像预处理:对PNG图表做二值化、去噪处理,减少干扰元素,示例脚本:
import cv2 import os img_dir = "你的png文件目录路径" for filename in os.listdir(img_dir): if filename.endswith(".png"): img = cv2.imread(os.path.join(img_dir, filename), cv2.IMREAD_GRAYSCALE) img_bin = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2) cv2.imwrite(os.path.join(img_dir, filename), img_bin)
4. 重新生成LSTMF文件
原LSTMF文件可能因标注错误生成异常,重新生成后再启动训练:
tesseract data/graphDetector-ground-truth/[文件名].png data/graphDetector-ground-truth/[文件名] --psm 11 lstm.train
可编写脚本批量处理所有PNG文件。
内容的提问来源于stack exchange,提问作者Akshay NN
相关产品推荐
相关产品推荐

