您的位置:首页 > 其它

ocr训练图片识别

2017-10-31 21:42 197 查看
 或者参考:http://www.xuebuyuan.com/2153910.html

                    http://blog.csdn.net/haluoluo211/article/details/53483534
=================

参考了很多网上分享的东西,首先感谢他们。

由于最近有需求需要使用Tesseract-OCR来识别手写字符,开源的好像就好些了。

后面直接进入正题,直接说训练。

有部分网上说,要把图片转变成tif格式才来训练,其实jpg也是ok的,测试通过。

我操作的步骤如下:

1.将准备好的jpg或tif格式的图片(其他格式的尚未测试),通过jTessBoxEditor (http://dl.pconline.com.cn/download/1060986.html)合并成一个tif格式文件。

2.生成.box文件

tesseract.exe zhi.normal.exp0.tif zhi.normal.exp0 -l chi_sim batch.nochop makebox
保证tif文件与box文件在同一目录下

3.文字校正:使用jTessBoxEditor来处理。

4.产生字符特征文件

tesseract.exe zhi.normal.exp0.tif zhi.normal.exp0 nobatch box.train

5.计算字符集

unicharset_extractor zhi.normal.exp0.box

6.定义字体特征文件

font_properties.txt

我的是normal 0 0 0 0 0;

7、聚集字符特征

   1) shapeclustering -F font_properties.txt -U unicharset zhi.normal.exp0.tr   注意:如果font_properties不加扩展名.txt,可能会报错

   2) mftraining -F font_properties.txt -U unicharset -O zhi.unicharset zhi.normal.exp0.tr

   使用上一步产生的字符集文件unicharset,来生成当前新语言的字符集文件chi.unicharset。同时还会产生图形原型文件inttemp和每个字符所对应的字符

   特征数文件pffmtable。最重要的就是这个inttemp文件了,他包含了所有需要产生的字的图形原型。 

   3)cntraining zhi.normal.exp0.tr

   

   

8、把目录下的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件前面都加上zhi.

9.执行combine_tessdata zhi.

测试:

tesseract.exe E:\ChineseCharacterdata\answersheet_imgs\hanzi\zhi\img0035.jpg output -l zhi

测试通过。

=====================

1. 功能介绍

利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别需求是对某个网站的验证码进行样本训练,形成自己的语言库,来提高验证码识别率。

2. 环境准备

关于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

3. 数据准备

使用抓取程序抓取验证码,放在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下。

4. 利用jTessBoxEditor进行模型训练

4.1 训练步骤

4.1.1      运行程序
运行以下命令:
java-Xms128m -Xmx1024m -jar jTessBoxEditor.jar
4.1.2      合并样本图片
在打开的jtessboxeditor界面中,点击Tools->Merge Tiff ,如图:
按住shift键选择前文准备好的tif文件,并把生成的tif合并到新目录E:\workspace\ocr\images\tif\new2下,命名为langyp.fontyp.exp0.tif。
注意: langyp 是定义的语言名称, fontyp是定义的字体名称,后续都会用到,可以随意修名字 。
4.1.3      生成box文件
执行命令生成 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 可用字节
4.1.4      修改box文件
切换到jTessBoxEditor工具的Box Editor页,点击open,打开前面的tiff文件langyp.fontyp.exp0.tif,工具会自动加载对应的box文件。
检查box数据,如下图所示是已经修改好的情况,如果数字被误认则手工修改,并保存。
点击下图红色框的按钮,逐个核对tif文件的box数据,全部检查结束并保存。
如上图:圈中的部分1为打开tif文件,2可以合并左边的行,3可以插入行,4可以删除行,5修改每行的数据,使得圈中识别的数字,character是识别的字符,X是起始横轴坐标,Y是起始纵轴坐标,W是宽度,H是高度
4.1.5      生成font_properties
执行echo命令生成font_properties。
echofontyp 0 0 0 0 0 >font_properties
也可以手工新建一个名为font_properties的文本文件(注意该文件没有扩展名),内容为字体名fontyp,后面带5个0,分别代表字体的粗体、斜体等属性,这里全部是0
4.1.6      生成训练文件
执行命令,生成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 可用字节
4.1.7      生成字符集文件
执行命令,生成名为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 可用字节
4.1.8      生成shape文件
执行命令,生成shape文件
shapeclustering-F font_properties -U unicharset -O langyp.unicharsetlangyp.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 可用字节
4.1.9      生成聚集字符特征文件
执行命令,生成3个特征字符文件,unicharset、inttemp、pffmtable
mftraining-F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
4.1.10   生成字符正常化特征文件
执行命令,生成正常化特征文件normproto。
cntraininglangyp.fontyp.exp0.tr
4.1.11   更名
执行命令,把步骤9,步骤10生成的特征文件进行更名。
renamenormproto fontyp.normproto 
renameinttemp fontyp.inttemp 
renamepffmtable fontyp.pffmtable 
renameunicharset fontyp.unicharset 
renameshapetable fontyp.shapetable
4.1.12   合并训练文件
执行命令,生成fontyp.traineddata文件。
combine_tessdatafontyp.
注意:
a、fontyp.traineddata文件最终要拷贝tesseract安装目录的tessdata目录下,才能被tesseract找到。
b、命令行最后必须带一个点。
c、执行结果中,1,3,4,5,13这几行必须有数值,才代表命令执行成功。
4.1.13   fontyp.traineddata拷贝
复制fontyp.traineddata到tesseract的安装目录的tessdata子目录下安装子目录C:\Program Files(x86)\Tesseract-OCR\tessdata,如下:
4.1.14   测试使用
使用命令重新验证码识别:
tesseract 1.jpg result -l fontyp-psm7

4.2 总结

 jtessboxeditor 工具其实是一个基本成型的三方样本训练工具,它的功能就是自动执行上述脚本命令,但是在实际使用中,还存在不够完善的地方,譬如不能加psm参数,生成shape时经常程序异常崩溃,所以本文操作还是以命令行为主。

关于中文的识别,效果比较好而且开源的应该就是Tesseract-OCR了,所以自己亲身试用一下,分享到博客让有同样兴趣的人少走弯路。

文中所用到的身份证图片资源是百度找的,如有侵权可联系我删除。

 

一、准备工作

1、下载Tesseract-OCR引擎,注意要3.0以上才支持中文哦,按照提示安装就行。


2、下载chi_sim.traindata字库。要有这个才能识别中文。下好后,放到Tesseract-OCR项目的tessdata文件夹里面。

3、下载jTessBoxEditor,这个是用来训练字库的。

以上的几个在百度都能找到下载,就不详细讲了。



 

 

二、识别

1、进入cmd,进入到要识别的图片的路径下。

2、输入命令

例如我的图片识别就是:



识别完后会生成result.txt文件



当然啦效果不太理想。所以我们要训练自己的字库。

 

三、训练

1、将图片转换成tif格式,用于后面生成box文件。可以通过画图,然后另存为tif即可。

更改图片名字,这个是有要求的=。=

tif文面命名格式[lang].[fontname].exp[num].tif

lang是语言 fontname是字体 

比如我们要训练自定义字库 mjorcen字体名normal

那么我们把图片文件重命名 mjorcen.normal.exp0.jpg在转tif。

 

2、生成box文件。



box文件和对应的tif一定要在相同的目录下,不然后面打不开。

 

3、打开jTessBoxEditor矫正错误并训练

打开train.bat



找到tif图,打开,并校正。



 

4、训练。

只要在命令行输入命令即可。

 


在这我明明已经矫正好了,但是还是有1个字符不能识别出来,报的错跟实际上完全没有相关性,不知道是不是bug,到后面的结果就是“园”字没有识别出来。

先不管,毕竟只有一个样本。

 

新建一个font_properties文件

里面内容写入 normal 0 0 0 0 0 表示默认普通字体

 

继续敲命令

 

最后会生成五个文件,把目录下的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件前面都加上normal.

如图:



 

命令行输入,合并五个文件:

得到训练好的字库。



 

四、测试

1、把 normal.traineddata 复制到Tesseract-OCR 安装目录下的tessdata文件夹中

 

2、识别命令:

 

3、效果



 

对比:



 

 

总结:肯定要自己训练过后的字库识别效果好,接下来要把整个项目弄进android,还要研究怎么将多个字库合并成一个字库,因为我不可能一次训练完所有的图片文字的。到时候有什么成果了再分享博文。希望大家可以点赞!谢谢。

 

更新:没有错误的话命令行的提示应该是这样的



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: