Tesseract-OCR训练自己需要的语言
在正常使用Tesseract-OCR的默认eng去识别复杂的验证码失败率很高,这时候就需要自己训练出自己需要的语言来提高识别成功率。如何训练呢?
训练提高识别率
从jTessBoxEditor:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,上下载jTessBoxEditor训练工具,训练工具是java写的,所以需要你电脑上有java环境变量(什么,如何装?妈耶,不会吧不会吧!不会有人不会装java环境变量吧!不会那个人就是你吧!百度呀,兄嘚)不多说了。
1、下载好jTessBoxEditor.zip之后解压如下。
2、双击运行jTessBoxEditor.jar,tools–>Merge TIFF
3、选择图片,选好后点击打开
4、然后名字命名为:num.font.exp0.tif,点击保存
5、点击确定,会发现多一个文件

6、将num.font.exp0.tif拷贝到C:\Program Files (x86)\Tesseract-OCR安装位置
7、打开cmd 运行tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox
生成的box文件为num.font.exp0.box,box文件为Tesseract识别出的字符及其坐标。
注:Make Box File 文件名有一定的格式,不能随便乱取名字,命令格式为:
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
其中lang为语言名称,fontname为字体名称,num为序号,可以随便定义。
将生成的.box和.tif样本文件放在同一目录。我是放在Tesseract-OCR默认安装目录下。

8、运行jTessBoxEditor工具,点击Box Editor。然后点击open
9、选择之前生成的num.font.exp0.tif,点击打开。
10、有些字符识别的位置不准确,可以通过该工具手动对每张图片中识别错误的字符和位置进行校正。校正完成后保存即可。
注: 这里必须修改识别错误的字符,否则做出来的traineddata文件也是错的。可以在下面的界面中修改并保存,也可以直接在traineddata文件中修改。
Box View,可以让框中的位置更精确,x,y,w,h四个来调整识别的位置。Insert插入按钮,Delete删除某个按钮。
最下面是下一张图,上一张图。具体的点点就知道了。
11、定义字体特征文件。创建一个名称为font_properties的字体特征文件
font 0 0 0 0 0
这里全取值为0,表示字体不是粗体、斜体等等。
12、生成语言文件。在样本图片所在目录下创建一个批处理文件,输入如下内容:
内容如下
rem 执行改批处理前先要目录下创建font_properties文件
echo Run Tesseract for Training..
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
echo Compute the Character Set..
unicharset_extractor.exe num.font.exp0.box
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
echo Clustering..
cntraining.exe num.font.exp0.tr
echo Rename Files..
rename normproto num.normproto
rename inttemp num.inttemp
rename pffmtable num.pffmtable
rename shapetable num.shapetable
echo Create Tessdata..
combine_tessdata.exe num.

执行批处理脚本。双击运行num.bat
把num.traineddata移动到 C:\Program Files (x86)\Tesseract-OCR\tessdata目录下
到这里你训练的语言就可以用了
使用效果
将代码中的语言换成你自己训练的语言
没训练之前的样子

训练之后的效果
到这训练好了,剩下的可以开发了。