tesseract-ocr下载以及训练

tesseract-ocr 3.x版本下载以及训练

(本人也是新手,哪里如果写的不对,欢迎在评论指出)

tesseract的下载链接如下(建议下载3.x版本,因为3.x版本跟4.0版本差别有点大,我没操作过4.0版本)
https://digi.bib.uni-mannheim.de/tesseract/

中文库地址(chi_sim.traineddata是中文简体库文件):
https://github.com/tesseract-ocr/tessdata

jTessBoxEditor工具下载(工具我用的 jTessBoxEditor2.0.zip,这个需要java环境,默认你已经配置好了):
https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

如果有的资源下载较慢,请自备*。
我是用的版本是 tesseract 3.05.01,中文库是2016年11月29号那个版本,因为tesseract的版本要比中文库训练时使用的版本高才能正常使用。即:这个库是别人使用3.0.2版本训练的,那你就要用 >=3.0.2版本的tesseract才能使用这个库。这个坑也踩了一下,之前版本不对,直到最后一步才报错…我并不知道2016.11.29那个版本的库使用的哪个版本,我只是下载了一个发布日期在这个库之后的tesseract版本而已。好了,开始。

一、安装tesseract

下载下来的是一个可执行程序,我直接安装在了C盘,“C:\Program Files (x86)\Tesseract-OCR”,安装完以后,记得把环境变量配置一下,就是把安装的路径加到path中,建议把其中的子文件夹tessdata也加入到环境变量,因为后面操作的时候有可能提示说库文件找不到,(也有可能是我哪里操作错了,也许你不用加也不会报错)。
安装完成,打开cmd,输入 tesseract -v,如果输出对应版本,则说明你安装正常。

二、下载中文库

tesseract有英文库,但是中文库需要下载。如果你只是训练英文的识别,可以不用下载中文库。把下载下来的中文库chi_sim.traineddata放到指定路径中,如下:
你的安装路径 \Tesseract-OCR\tessdata”

三、准备图片素材

一般训练的目的是针对性识别,所以你需要准备大量的图片素材,才能建立一个比较准确的库,大大提示识别率,不过我们只做一个示范,所以我就拿一张图做个例子。

tesseract-ocr下载以及训练

上面是我用画程序图写的一张png图。

先上一张直接识别的结果。
tesseract-ocr下载以及训练

四、制作tif文件

打开jTessBoxEditor.jar,如果打不开,检查下你的java环境。选择 Tools -->Merge TIFF…
打开我们准备的png图,另存为tif文件(建议你单独创建一个文件夹,后面会生成很多文件)
如下图,ku文件夹中存放的是制作的tif文件,lizi.png是我们的素材图片:

tesseract-ocr下载以及训练

这是ku文件夹中的tif文件

tesseract-ocr下载以及训练

这里我的tif文件命名不规范,命名规则是:
[lang].[fontname].exp[num].tif
lang为语言名称,fontname为字体名称,字体文件我们还没有创建;num为序号,序号无所谓的;在tesseract中,一定要注意格式。
比如,我要制作的是中文的库,应该是chi.font.exp0.tif

五、制作Box文件

打开cmd,进入tif文件所在的位置,输入命令
tesseract myself.tif myself -l chi_sim -psm 7 batch.nochop makebox
其中myself.tif是你的tif文件,myself是即将生成的box的文件名,-l 参数指定使用的库的名称为中文简体库,-psm 7 是告诉tesseract把图片识别为单行文字。想查看详细参数可以百度一下,不多说。

tesseract-ocr下载以及训练
上图是命令执行成功之后的结果图。

注意:

其中 -psm 7 参数需要视情况加上,因为是把图片当作单行文字识别,如果不是单行文字,则有可能识别不出来,或者识别错误的情况非常离谱,对于我们的素材有2行文字,就应该取消这个参数,让命令取默认值3,或者你显式的指定为3也行。但是如果只有一行文字,你可以指定为7,这样可以提示识别率。总之一句话,识别不出来,你可以修改参数试试,不要ctrl + C 和 ctrl + V。

六、修改识别错误的文字

打开jTessBoxEditor.jar ,选择Box editor -->open,选择我们制作的tif文件,如下图:
tesseract-ocr下载以及训练
可以看到,有很多字识别错误,这时你需要去手动修改识别错误的字,利用上面的工具,修改文字。不知道上面工具的功能,搜索一下就有了。修改后的结果如下图:
tesseract-ocr下载以及训练

七、生成训练后的字库文件

这一步没什么难点,就是执行命令就可以了,只要把命令的参数别弄错。
首先创建一个字体文件,放到和box文件在一个文件夹下。
tesseract-ocr下载以及训练

fontname为字体名称,italic为斜体,bold为黑体字,fixed为默认字体,serif为衬线字体,fraktur德文黑字体,1和0代表有和无,精细区分时可使用。

下面就是命令了(命令是加粗的,斜体是参数名):

生成.tr文件
tesseract tif文件 box文件 nobatch box.train (tif文件带尾缀,box文件不带)

计算字符集
unicharset_extractor box文件 (box文件带尾缀)

特征训练
mftraining -F font -U unicharset 文件名.tr

聚集tesseract识别的训练文件
cntraining 文件名.tr

合并相关文件,生成字典文件
combine_tessdata name

下面给我们这个素材的例子:
tesseract myself.tif myself nobatch box.train
unicharset_extractor myself.box
mftraining -F font_properties -U unicharset -O myself.unicharset myself.tr
cntraining myself.tr
rename normproto myself.normproto
rename inttemp myself.inttemp
rename pffmtable myself.pffmtable
rename shapetable myself.shapetable

combine_tessdata myself. (最后有个点)

注意:
第一步生成.tr文件时,有可能会报错,错误有很多种,我只说下我遇到的。如果报错
Bad Box!Bounds (42,241) ->(52,284)等等,说明你修改识别错误文字的时候,把文字对应的框修改错了,导致它不识别。这种情况只能根据它提示的那一行,去修改对应的文字的x,y坐标和宽度、高度,如果改完还是不行,那只好放弃这张素材,换一张继续。