利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别需求是对某个网站的验证码进行样本训练,形成自己的语言库,来提高验证码识别率。
关于tesseract样本训练有一个官方流程说明, https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract#run-tesseract-for-training
具体的方法有两种: 1-利用三方工具,2-完全命令行操作, 三方工具主要在 https://github.com/tesseract-ocr/tesseract/wiki/AddOns 下载,本文将用到 jTessBoxEditor 这个工具,下载地址为https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/jTessBoxEditor-1.5.zip/download?use_mirror=jaist&download=&failedmirror=tenet.dl.sourceforge.net
使用抓取程序抓取验证码,放在E:\workspace\ocr\images\test目录下,分别按顺序命名为0.jpg,1.jpg,---,10000.jpg,如,
该验证码有几个特点:a、定长4位,b、都是数字,c、有背景干扰,但比较简单,d、字体颜色不确定,e、有粘连。
为了提高识别率,首先做了一个工作就是灰度化处理 如,并全部转换成tif文件,分别命名成:0.tif,1.tif,2.tif,……,10001.tif,统一存放在E:\workspace\ocr\images\tif下。
运行以下命令:
java-Xms128m -Xmx1024m -jar jTessBoxEditor.jar
在打开的jtessboxeditor界面中,点击Tools->Merge Tiff ,如图:
按住shift键选择前文准备好的tif文件,并把生成的tif合并到新目录E:\workspace\ocr\images\tif\new2下,命名为langyp.fontyp.exp0.tif。
注意: langyp 是定义的语言名称, fontyp是定义的字体名称,后续都会用到,可以随意修名字 。
执行命令生成 langyp.fontyp.exp0.box 文件
tesseract langyp.fontyp.exp0.tif langyp.fontyp.exp0-l eng -psm 7 batch.nochop makebox
E:\workspace\ocr\images\tif\new2的目录
2017-05-10 14:37 <DIR> .
2017-05-10 14:37 <DIR> ..
2017-05-10 14:30 6,327 langyp.fontyp.exp0.box
2017-05-10 13:07 126,056 langyp.fontyp.exp0.tif
2 个文件 132,383 字节
2 个目录24,869,994,496 可用字节
切换到jTessBoxEditor工具的Box Editor页,点击open,打开前面的tiff文件langyp.fontyp.exp0.tif,工具会自动加载对应的box文件。
检查box数据,如下图所示是已经修改好的情况,如果数字被误认则手工修改,并保存。
点击下图红色框的按钮,逐个核对tif文件的box数据,全部检查结束并保存。
如上图:圈中的部分1为打开tif文件,2可以合并左边的行,3可以插入行,4可以删除行,5修改每行的数据,使得圈中识别的数字,character是识别的字符,X是起始横轴坐标,Y是起始纵轴坐标,W是宽度,H是高度
执行echo命令生成font_properties。
echofontyp 0 0 0 0 0 >font_properties
也可以手工新建一个名为font_properties的文本文件(注意该文件没有扩展名),内容为字体名fontyp,后面带5个0,分别代表字体的粗体、斜体等属性,这里全部是0
执行命令,生成langyp.fontyp.exp0.tr训练文件
tesseractlangyp.fontyp.exp0.tif langyp.fontyp.exp0 -l eng -psm 7 nobatch box.train
E:\workspace\ocr\images\tif\new2 的目录
2017-05-10 16:34 <DIR> .
2017-05-10 16:34 <DIR> ..
2017-05-10 16:05 16 font_properties
2017-05-10 14:30 6,327 langyp.fontyp.exp0.box
2017-05-10 13:07 126,056 langyp.fontyp.exp0.tif
2017-05-10 16:20 618,844 langyp.fontyp.exp0.tr
2017-05-10 16:20 202 langyp.fontyp.exp0.txt
5 个文件 751,445 字节
2 个目录24,869,101,568 可用字节
执行命令,生成名为unicharset的字符集文件。
unicharset_extractorlangyp.fontyp.exp0.box
E:\workspace\ocr\images\tif\new2的目录
2017-05-10 16:41 <DIR> .
2017-05-10 16:41 <DIR> ..
2017-05-10 16:05 16 font_properties
2017-05-10 14:30 6,327 langyp.fontyp.exp0.box
2017-05-10 13:07 126,056 langyp.fontyp.exp0.tif
2017-05-10 16:20 618,844 langyp.fontyp.exp0.tr
2017-05-10 16:20 202 langyp.fontyp.exp0.txt
2017-05-10 16:41 712 unicharset
6 个文件 752,157 字节
2 个目录24,869,171,200 可用字节
执行命令,生成shape文件
shapeclustering-F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
E:\workspace\ocr\images\tif\new2的目录
2017-05-10 17:24 <DIR> .
2017-05-10 17:24 <DIR> ..
2017-05-10 17:20 19 font_properties
2017-05-10 14:30 6,327 langyp.fontyp.exp0.box
2017-05-10 13:07 126,056 langyp.fontyp.exp0.tif
2017-05-10 17:23 618,844 langyp.fontyp.exp0.tr
2017-05-10 17:23 202 langyp.fontyp.exp0.txt
2017-05-10 17:24 723 langyp.unicharset
2017-05-10 17:24 202 shapetable
2017-05-10 17:24 712 unicharset
8 个文件 753,085 字节
2 个目录24,868,278,272 可用字节
执行命令,生成3个特征字符文件,unicharset、inttemp、pffmtable
mftraining-F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
执行命令,生成正常化特征文件normproto。
cntraininglangyp.fontyp.exp0.tr
执行命令,把步骤9,步骤10生成的特征文件进行更名。
renamenormproto fontyp.normproto
renameinttemp fontyp.inttemp
renamepffmtable fontyp.pffmtable
renameunicharset fontyp.unicharset
renameshapetable fontyp.shapetable
执行命令,生成fontyp.traineddata文件。
combine_tessdatafontyp.
注意:
a、fontyp.traineddata文件最终要拷贝tesseract安装目录的tessdata目录下,才能被tesseract找到。
b、命令行最后必须带一个点。
c、执行结果中,1,3,4,5,13这几行必须有数值,才代表命令执行成功。
复制fontyp.traineddata到tesseract的安装目录的tessdata子目录下安装子目录C:\Program Files(x86)\Tesseract-OCR\tessdata,如下:
使用命令重新验证码识别:
tesseract 1.jpg result -l fontyp-psm 7
jtessboxeditor 工具其实是一个基本成型的三方样本训练工具,它的功能就是自动执行上述脚本命令,但是在实际使用中,还存在不够完善的地方,譬如不能加psm参数,生成shape时经常程序异常崩溃,所以本文操作还是以命令行为主。