Tesseract4.0 训练是基于LSTM + CTC,可以获得较高的准确率,而且Tesseract-ocr官网上也说了,Tesseract 3.X的训练方式目前保留,以后可能会废弃,所以看似好像这里介绍3.X好像是多余的,但是为了让Tesseract介绍更系统些,而且目前很多人也是在使用Tesseract 3.x在训练,所以这里再啰嗦下。
- Tesseract 3.X训练
1.下载jTessBoxEditor https://sourceforge.net/projects/vietocr/postdownload(必须保证在此之前已经安装JDK)
2.合并样本图片
打开jTessboxeditor,点击Tools->Merge Tiff ,按住shift键选择你要训练的图片文件,并把生成的tif合并到指定下,命名为langyp.fontyp.exp0.tif。
注意:langyp 是本人定义的语言名称,fontyp是本人定义的字体名称,exp0指该语言,字体对应的合并图片序号,一般是exp0,exp1,exp2,...依次递增。
3.生成box文件
执行命令生成langyp.fontyp.exp0.box文件
tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng --psm 7 --oem 3 batch.nochop makebox
【语法】:tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
lang为语言名称,fontname为字体名称,num为序号;在tesseract中,一定要注意格式。
最好把box文件和合并的tiff文件放到同一个目录下,这时你能看到langyp.fontyp.exp0.tif和langyp.fontyp.exp0.box文件
4.修改box文件
切换到jTessBoxEditor工具的Box Editor页,点击open,打开前面的tiff文件langyp.fontyp.exp0.tif,工具会自动加载对应的box文件。检查box数据,如下图所示,
数字8被误认成字母H,手工修改H成8,并保存。点击下图红色框的按钮,逐个核对tif文件的box数据,全部检查结束并保存。
5. 生成font_properties
执行echo命令生成font_properties。
echo "fontyp 0 0 0 0 0" > font_properties
也可以手工新建一个名为font_properties的文本文件,内容为字体名fontyp,后面带5个0,分别代表字体的粗体、斜体等属性,这里全部是0
注意一定要把font_properties编码格式改为UTF-8
font_properties中的fontyp 和文件名两个点中间的fontyp对应langyp.fontyp.exp0
6.生成训练文件
执行命令,生成langyp.fontyp.exp0.tr训练文件
tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng --psm 7 --oem 3 nobatch box.train
7.生成字符集文件
执行命令,生成名为unicharset的字符集文件。
unicharset_extractor langyp.fontyp.exp0.box
8.生成shape文件
执行命令,生成shape文件
shapeclustering -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
9.生成聚集字符特征文件
执行命令,生成3个特征字符文件,unicharset、inttemp、pffmtable
mftraining -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
10.生成字符正常化特征文件
执行命令,生成正常化特征文件normproto。
cntraining langyp.fontyp.exp0.tr
11.更名
执行命令,把步骤9,步骤10生成的特征文件进行更名。
mv normproto fontyp.normproto
mv inttemp fontyp.inttemp
mv pffmtable fontyp.pffmtable
mv unicharset fontyp.unicharset
mv shapetable fontyp.shapetable
12.合并训练文件
执行命令,生成fontyp.traineddata文件。
combine_tessdata fontyp.
备注:
combine_tessdata 命令将fontyp.normproto,fontyp.inttemp,fontyp.pffmtable ,fontyp.unicharset,fontyp.shapetable文件合并为一个文件,命名规则为 languagecode.file_name,其中languagecode按ISO 638-3标准,也可以使用任意字符串。
注意:
a、fontyp.traineddata文件最终要拷贝tesseract安装目录的tessdata目录下,才能被tesseract找到。
b、命令行最后必须带一个点。
13.测试和使用
使用新的fontyp语言
由以上过程可以看出,Tesseract 3.X训练是基于图片的,如果我们有很多图片,但是一次只取其中一部分来训练,这样就会得到多个模型文件,有没有什么办法让多个模型文件合并起来,方便使用。
- 合并多个模型文件
前提条件是必须有 图片样本.tif文件,位置文件.box ,只要有这两个文件在,就可以合并字典。
1.利用jTessboxeditor和Tesseract相关命令生成需要合并的图片样本.tif文件,位置文件.box(过程参考上面)
假设已经存在的图片样本文件和修正过的box文件为:
langyp.fontyp.exp0.tif langyp.fontyp.exp0.box
langyp.fontyp.exp1.tif langyp.fontyp.exp1.box
2.生成相应的.tr文件
tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng --psm 7 --oem 3 nobatch box.train
tesseract langyp.fontyp.exp1.tif langyp.fontyp.exp1 -l eng --psm 7 --oem 3 nobatch box.train
3.从所有的文件中提取字符
unicharset_extractor langyp.fontyp.exp0.box langyp.fontyp.exp1.box
4.生成font_properties文件
echo "fontyp 0 0 0 0 0" > font_properties
注意把font_properties转为UTF-8编码格式
5.生成shape文件
shapeclustering -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr langyp.fontyp.exp1.tr
6.生成字符特征文件
mftraining -F font_properties -U unicharset langyp.fontyp.exp0.tr langyp.fontyp.exp1.tr
7.聚集所有的.tr文件
cntraining langyp.fontyp.exp0.tr langyp.fontyp.exp1.tr
8.重命名文件
unicharset, inttemp, normproto, pfftable 这几个文件加个前缀,比如前缀为myFont
mv normproto myFont.normproto
mv inttemp myFont.inttemp
mv pffmtable myFont.pffmtable
mv unicharset myFont.unicharset
mv shapetable myFont.shapetable
9.合并所有文件,生成一个大的字库文件
combine_tessdata myFont.
我写了个批处理便于模型文件合并,下载地址: