转自:http://blog.sina.com.cn/s/blog_5c9288aa0101g0r0.html
使用开源的tessnet-orc识别验证码
1. 下载最新的tesseract安装文件,博主下载时版本号是3.02(https://code.google.com/p/tesseract-ocr/downloads/detail?name=tesseract-ocr-setup-3.02.02.exe&can=2&q=)
2. 下载工具jTessBoxEditor. http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,此工具用于生成tiff图片以及修改box文件,这是后话。
3.
1. 1. 下载工具jTessBoxEditor. http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,这个工具是用来训练样本用的,由于该工具是用JAVA开发的,需要安装JAVA虚拟机才能运行。
2. 2. 获取样本图像。获取用来训练的样本图像,注意一定要处理成白底黑字的灰度图,如图所示
3. 3. 合并样本图像。运行jTessBoxEditor工具,在点击菜单栏中Tools--->Merge TIFF。在弹出的对话框中选择样本图像(按Shift选择多张),合并成LAN.new.exp0.tif文件。(注意此处命名格式一定要为[lang].[fontname].exp[num].tif其中lang为语言名称,fontname为字体名称,num为序号ps:博主之前想当然clear0.tif,clear1.tif结果在mftraining 步骤死活过不去了,sigh)
4. 4.生成Box File文件。打开命令行,执行命令:
tesseract.exe LAN.new.exp0.tif LAN.new.exp0 -l eng batch.nochop makebox
该命令为tif图像生成一个LAN.new.exp0.box 的文件,内容为各字符及其边框坐标,需要注意的是,此坐标的起点为图片左下角,即左下角为X:0 Y:0。
3.01这德行
3.02这德行
5. 5. 文字校正。此时的Box文件有可能存在识别错误以及字符分割错误,运行jTessBoxEditor工具,打开num.font.exp0.tif文件(必须将上一步生成的.box和.tif样本文件放在同一目录),如下图所示。可以看出有些字符识别的不正确,可以通过该工具手动对每张图片中识别错误的字符进行校正。校正完成后保存即可
6. 6. 定义字体特征文件。Tesseract-OCR3.01以上的版本在训练之前需要创建一个名称为font_properties的字体特征文件。font_properties不含有BOM头,文件内容格式如下:
其中fontname为字体名称,必须与[lang].[fontname].exp[num].box中的名称保持一致。 、 、 、、 的取值为1或0,表示字体是否具有这些属性。注意每一行对应一个训练文件,即如果有20个训练样本,font_properties里必须有20行!
7. 7. 把修改好的box文件保存,用以下命令为每个box文件生成tr文件
tesseract LAN.new.exp0.tif LAN.new.exp0 nobatch box.train
8. 8. 用unicharset_extractor程序命令行汇总这些box文件生成计算字符集unicharset unicharset_extractor LAN.new.exp0.box …… LAN.new.exp12.box
9. 9. 在聚集字符特征之前应该先聚类shape,
shapeclustering.exe –F font_properties -U unicharset –O LAN.unicharset LAN.new.exp0.tr LAN.new.exp1.tr
博主之前直接用mftraining命令,结果warning:no shape file https://code.google.com/p/tesseract-ocr/issues/detail?id=626
10. 10聚集字符特征, 用mftraining生成字符特征文件.unicharset、inttemp、pffmtable
mftraining -F font_properties -U unicharset -O LAN.unicharset LAN.new.exp0.tr ……
接着用mftraining生成字符形状正常化特征文件normproto
cntraining LAN.new.exp0.tr LAN.new.exp1.tr
11. 11 合并训练文件
把unicharset, inttemp, normproto, pffmtable,shapetable这四个文件加上前缀"LAN."
这里的前缀名就是新训练的语言字库的名字了。
然后使用命令:"combine_tessdata LAN." (不能少了那个句点),
需确认打印结果中的Offset 1、3、4、5、13这些项不是-1。这样,一个新的语言文件就生成了。
生成一个LAN.traineddata 字典文件,然后把这个文件复制到Tessract的安装目录下一个叫tessdata的文件夹里,就可以使用新的训练字库了
tips:训练图片很多时,可以写成批处理文件的形式,活用EXCEL填充句柄
参考资料:
1. http://www.cnblogs.com/samlin/p/Tesseract-OCR.html
2. http://www.cnblogs.com/sosoben/p/sosoben-tesseract.html
3. https://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3#font_properties_(new_in_3.01)
4. http://jingyan.baidu.com/article/a17d5285273c968098c8f2e5.html
5. http://www.myexception.cn/vsts/1118613.html