如何训练Tesseract识别存在字母连接情况的字体?
嘿,这个问题问到点子上了!针对这种部分字母会固定连写、部分又分开的特殊字体,确实不能照搬常规的单字母训练思路,我给你梳理几个实用的操作方向:
把固定连写组合当成「特殊连字(Ligature)」来标注
Tesseract本身支持识别连字,你可以把S-T这种固定连写的组合当成一个单独的识别单元来处理。比如在制作训练用的.box标注文件时,给连写的S-T整体画一个 bounding box,然后对应的标签直接写成ST;而单独的S、T或者分开的S和I,就各自标注成单个字母。同时要在训练的字符集配置里,把ST这类连写组合和单个字母一起列进去,告诉Tesseract这些都是合法的识别目标。构建覆盖全面的训练数据集
训练数据一定要兼顾各种场景:既要包含单独的S、T、I样本,也要大量加入S-T连写的不同变体(比如不同字号、粗细、排版位置下的连写效果),还要有S和I分开写的例子。只有让Tesseract见过足够多的「连写场景」和「非连写场景」,它才能学会区分什么时候该识别成连字,什么时候该拆成单个字母。调整训练参数适配连字识别
在训练时,要开启Tesseract的连字支持相关设置。比如用tesstrain.sh训练的话,可以在配置里指定enable_ligatures=true;另外要自定义字符集文件,把单个字母和所有需要识别的连写组合都列进去,比如:S T I ST这样训练出来的模型才会把这些连写组合当成有效识别对象。
迭代训练+针对性验证
训练完第一轮后,拿包含各种连写、非连写情况的测试样本去验证准确率。如果发现模型把分开的S和T误识别成了连写的ST,就补充更多分开的S、T样本再训练;如果连写的ST被拆成了单个字母,就增加连写样本的数量。反复调整,直到模型能准确区分两种情况为止。
备注:内容来源于stack exchange,提问作者HanSooloo

