Tesseract 训练识别字符的思路
2018-07-18 本文已影响0人
丁鸿辉
Tesseract 是一个很流行的 OCR 软件,能够用来较好的识别印刷字体。
在默认情况下,通过该软件识别字符,其准确率不是很高,就需要额外做些优化。
优化思路如下:
- 限定要识别的字符范围,方法是通过参数:tessedit_char_whitelist,类似的还有黑名单
- 优化识别单个字符的准确率
其中中对于第二点,从工作原理上,OCR 获取到的是图片。其操作步骤为:
- 通过二值化和去噪点使得图片的内容更加突出,为下一步定位字符做预备
- 从图片中定位出文字,理想情况下能够定位到单个字符
- 获取定位到的字符,将其特征和特征数据进行对比,从而判断是什么字符
这里的对比关键有两个。
- 判断是什么语言,譬如是中文还是日文还是英文,这包括有哪些字符,有哪些单词(词语),这个会限定和优化匹配结果。
- 判断字形对应的字符。如我们所知道的那样,对指定的字而言,不同的字体其表现出来的样子是非常不一样的。OCR的任务就是将定位到的字符字形特征和其自己已知的特征进行比较,从而判断出来该字符是什么。以我的了解,OCR本身在识别的时候是无法指定要识别的字体,而且其所有的字体的特征都放在同一个文件里面。如果要识别的字体特征不在 OCR 本身的特征列表里面,那么识别的准确率肯定就堪忧了。
对于上述中增加一种字体的支持,可以参考官方文档。这里简述其步骤。
- 获取或者生成包括这种字体的图片,转化成 tif 格式(注意,最好每个字符出现频率不少于10次)
- 通过 tesseract 的 makebox 命令定位和识别字符,生成 box 文件(注意:可以限定要识别的字符清单以提高准确性和效率)
box 文件里包括了识别出来的字符以及其在图片中的位置 - 通过 jTessBoxEditor 等工具矫正识别出来的字符,也可以手动编辑 box 文件来修复
- 更具 box 文件和 tif 文件进行特征提取和训练
- 生成训练数据
参考链接:
https://github.com/tesseract-ocr/tesseract/wiki/Training-Tesseract-3.03%E2%80%933.05#generate-training-images-and-box-files
https://michaeljaylissner.com/posts/2012/02/11/adding-new-fonts-to-tesseract-3-ocr-engine/