网上有关于很多Tesseract OCR的训练文章,我看了很多,终于成功成功了一会,写下此文做个记录。
预备工作:
1.下载安装Tesseract OCR,我安装的版本是3.02.02
2.下载安装jTessBoxEditor,这个下载下来是不用安装的,不过运行的时候需要java虚拟机,要打开jar文件,因此需要最好安装一遍java环境,我对java还不是很熟,光安装一个jre是不行的。我百度了一下怎么打开jar文件,后来安装了这个。
3.用画图制作几张图片,jpg格式就好,就是在画图软件中用画笔话同样的几个数字,为了保证图片大小一样,各种另存为再清除重画就行。
开始训练
1.合并样本图片,保存为tif格式。
运行jTessBoxEditor,打开菜单栏Tools->Merge TIFF。为了选中多张图片,记得用Ctrl或Shift。合并成num.font.exp0.tif文件。这个名字很讲究,必须是:
[lang].[fontname].exp[num].tif
2.生成Box File文件。执行命令:
tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox
3.校正
再次用上了jTessBoxEditor,打开Box Editor这栏,Open那个num.font.exp0.tif,box文件不用你管,他会自动关联,要是没有关联出来,你该检查一下tif同目录下有没有box文件。所以这个过程建议你不要自己去变动该目录下的任何文件。用该工具手工去更正每张图片的识别结果,别漏了。然后点save,就可以关闭软件了。
4.定义字体特征文件
Tesseract-OCR3.01以上的版本在训练之前需要创建一个名称为font_properties的字体特征文件——font_properties,这个文件不能含有BOM头,我的方法是,新建一个记事本文件,重命名为font_properties,用Notepad++打开,编辑内容:
font 0 0 0 0 0
然后点击菜单【格式】->【转为UTF-8无ROM编码格式】,再选【以 UTF-8无ROM格式编码】,保存退出。
编辑的内容是有规定了,格式为:
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
fontname表示自定义的字体名字,后面是属性,0表示否,1表示是。5.生成过度文件,老实说,我都不知道这个过程我都干啥了,但目的很明确就是生成语言库文件num.tessdata
我先给出命令:
1)tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
2)unicharset_extractor.exe num.font.exp0.box
3)mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
4)cntraining.exe num.font.exp0.tr
5) rename normproto num.normproto
rename inttemp num.inttemp
rename pffmtable num.pffmtable
rename shapetable num.shapetable
6)combine_tessdata.exe num.
5)是分开一步一步的,6)的结果要保证1 3 4 5 13这些行不是-1才算正常,还有num后面的点"."别漏了。
num.traineddata便是最终生成的语言文件,将生成的num.traineddata拷贝到Tesseract-OCR-->tessdata目录下。可以用它来进行字符识别了。
检验效果
识别那些jpg图片
tesseract.exe number.jpg result -l num
本文有参照这篇文章,特此声明。