ocr识别

时间:2024-03-03 07:19:11

OCR识别验证码的流程:

相关的一些链接为:

http://blog.csdn.net/why200981317/article/details/48265621

http://blog.csdn.net/yasi_xi/article/details/8763385

http://blog.csdn.net/arnery/article/details/17447635

简书的比较的好,重点参考:http://www.jianshu.com/p/5c8c6b170f6f

1、  首先是需要安装Tesseract-OCR3(现在比较流行这个版本的东西),好像是可以识别中文的了。

2、  因为如果不是简单的一些数字,一般是没有那么容易进行识别出来的,可以说大部分都识别不出来的,所以我们需要进行语料库的训练,才可以更加大可能的去识别验证码之类的图片出来。

3、  然后就把下载的所有的图片使用cadsee工具进行对图片组织格式的转换出来为tif格式。

4、  使用VietOCR.NET软件进行把在点击菜单栏中Tools--->Merge TIFF。在弹出的对话框中选择样本图像(按Shift选择多张),合并成num.font.exp0.tif文件。(合并成一张图片)。

5、 我生成一个名为 why4.tif 的图片集, 进入 cd进入 why4.tif 所在的目录,生成对应的 .box 文件

执行命令:tesseract why.tif  why4 batch.nochop makebox

生成的效果为:

6、调整,因为 tesseract 识别的不准确,所以我们用 jTessBoxEditor来调整识别文字的位置、结果。

用 jTessBoxEditor打开生成的图片集why4.tif ,注意 why4.tif 对应的box文件一定要和他处于同一个文件夹下(请保持文件名),否则,用jTessBoxEditor打开没有 位置、识别结果等信息,然后就可以调整了,调整完之后保存。

主要是进行调整左右上下位置,尽可能让字符在框内。

1、  生成.tr文件

tesseract why4.tif  why4   nobatch box.train (一样实在why.tif的根目录下进行一个生成)

效果图为:

1、  计算字符集,从生成的 box文件中提取

unicharset_extractor why4.box  (所有的命令行都是在同个文件夹下面进行的)

2、  生成字体特征文件,现在文件夹下新建任意文件名的 特征文件,里面的内容格式为:

<fontname> <italic> <bold> <fixed> <serif> <fraktur>

fontname为字体名称,保持和 图片集文件 .tif 和.box文件的前缀名一致 ,italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值为1或0,表示字体是否具有这些属性

例如我新建了一个 名为 font,内容 为

  1. why4 0 0 0 0 0  
  2. 的文件

    输入命令

    mftraining -F font -U unicharset why4.tr  

    发现如果是这样子的话,是会报错的,错误提示为:

 

Mtrainning停止工作。Windows联机工作(这是一个对话框弹出来的)。

注意:需要在font后面加上txt才可以的。

如图所示:

最后效果图为:

9、、聚集tesseract 识别的训练文件

cntraining why4.tr  

执行完这一步之后发现文件夹下生产了许多文件,把unicharset, inttemp, normproto, pfftable这几个文件加上前缀 why4.

1、最后一步,合并相关文件,生成字典文件

2、   combine_tessdata why4.  

 

 

1. 下载MS2003(http://soft.hao123.com/soft/appid/21282.html),安装MS Office Document Imaging, 使用该软件打开TIF图片集合,然后参照JTessBoxEditor删除指定的图片。
2. 删除图片之后,因为box文件中的数据最后一列代表图片的序号,所以需要在Excel中进行重新排序。
-- 2.1 box文件,先在ecxel中利用空格进行分列;
-- 2.2 在辅助列中利用公式 =INT((ROW()-1)/4) 生成每四列一个自然增长序号;
-- 2.3 公式 =A1&" "&B1&" "&C1&" "&D1&" "&E1&" "&F1 合并分列。
3. 把excel中生成的新的box文件内容复制粘贴到box文件中,替换之前的内容。