本人实现了基于Tesseract字库训练的三种方式:一从头开始训练(官方不推荐使用此方法,亲身实践后,得知从头训练的字库非常差);二是在现有模型进行微调训练,如果你训练的是英文与数字,只是字体和普通字体有差别,就可以在github网页中找到traineddata_best里traineddata文件的eng.traineddata作为微调训练的初始模型;第三则是根据字符特征生成字库。这篇文章介绍方式三。(个人认为方式三精度更高)
一、准备工作(资料下载)
这里将罗列出实现基于字符特征生成字库的Tesseract OCR识别所需要的资料。
1.首先就是下载Tesseract-OCR,我安装的是tesseract-ocr-w64-setup-v5.2.0.20220712.exe,默认路径:
还要配置环境,找到系统属性,如下
点击环境变量-系统变量-Path,新建C:\Program Files\Tesseract-OCR
在系统变量中新建变量名TESSDATA_PREFIX,变量值C:\Program Files\Tesseract-OCR\tessdata。
以上环境就配置好了。
另外可以打开命令终端cmd,输入:tesseract -v,查看其版本信息。
2.Tesseract官方提供的语言包:traineddata文件,如果你要训练的是中文便是chi_sim.traineddata,英文是eng.traineddata,将其下载到自己电脑的tessdata文件夹下。
3.还有个重要步骤,就是生成训练用的tif和box文件,我调整box坐标用的是jTessBoxEditor,解压缩到目录,该工具是用JAVA开发的,所以需要配置java环境。
二、具体实现步骤
1.可以先将待识别英文.png图像逐个转换为.tif(例如利用画图软件ps实现,文件–脚本–图像处理器),打开jTessBoxEditor,点击Tools–Merge Tiff ,随后打开选择全部.tif文件,例如命名cont1.semi.exp1.tif,保存,这边生成了一个整合的tif文件。
2.以管理员方式打开命令终端窗口,并cd到Tesseract-OCR文件夹下:
cd C:\Program Files\Tesseract-OCR
根据tif文件生成box文件:
tesseract cont1.semi.exp1.tif cont1.semi.exp1 -l eng --psm 0 batch.nochop makebox
3.生成box文件之后,还需要打开jTessBoxEditor来对box坐标进行修正,步骤:Box Editer–Open 打开tif文件,注意box文件要和tif文件同名及相同位置且box文件可用记事本打开。每张操作完都要记得点击save。
如果图像很多且图像每张只有一个字符,一张一张修改很麻烦,这时就需要Excel中数据–从文本/CSV将所有坐标改为0 0 图像宽-1 图像高,这便将坐标修改好了,这时再用jTessBoxEditor打开对 Char进行修改。
4.生成tr文件,这里psm为13,参数常用数值:7 =将图像视为单个文本行;10 =将图像视为单个字符。
tesseract cont1.semi.exp1.tif cont1.semi.exp1 --psm 13 nobatch box.train
生成unicharset文件:
unicharset_extractor cont1.semi.exp1.box
新建font_properties.txt记事本,内容为:semi 0 0 0 0 0
shapeclustering -F font_properties.txt -U unicharset cont1.semi.exp1.tr
聚集字符特征:
mftraining -F font_properties.txt -U unicharset -O unicharset cont1.semi.exp1.tr
cntraining cont1.semi.exp1.tr
将从生成的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件名前面加上semi,和并生成semi.traineddata。
combine_tessdata semi.
将生成的semi.traineddata文件放到tessdata文件夹下,便可以运行下面代码进行测试:
tesseract C:\Users\na\Desktop\semi\6.png result -l semi --psm 13