tesseract-ocr训练

参考文档:

http://my.oschina.net/lixinspace/blog/60124

http://blog.csdn.net/shuzui1985/article/details/8188993

https://code.google.com/p/tesseract-ocr/

http://blog.csdn.net/firehood_/article/details/8433077

http://blog.csdn.net/marvinhong/article/details/8459591


用tesseract进行简单的验证码识别是可行的,但是其默认的识别文件效果并不理想,所以需要针对你识别的目标专门进行训练,然后使用训练结果进行识别,识别率会大大提高的。

1,linux下安装tesseract

下载tesseract-ocr:https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.02.tar.gz

下载leptonica(tesseract依赖于它):http://www.leptonica.com/source/leptonica-1.70.tar.gz

下载eng语言识别文件:https://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.02.eng.tar.gz

先安装leptonica:

$gunzip leptonica-1.70.tar.gz
$tar xvf leptonica-1.70.tar
$./configure
$make
$sudo make install

再安装tesseract-ocr:

$gunzip leptonica-1.70.tar.gz
$tar xvf leptonica-1.70.tar
$./autogen.sh
$./configure
$make
$sudo make install

这中间可能会报一堆错误,按照提示安装吧,比如可能缺少automake,那就yum install automake

最后将tesseract-ocr-3.02.eng.tar.gz拷贝到/usr/local/share/tessdata下:

#cp  tesseract-ocr-3.02.eng.tar.gz /usr/local/share/tessdata
#cd /usr/local/share/tessdata
#gunzip tesseract-ocr-3.02.eng.tar.gz
#tar xvf tesseract-ocr-3.02.eng.tar
#mv tesseract-ocr/tessdata/*  .

找一张图片来看看识别结果:

$tesseract 1.bmp out -l eng -psm 7

这里out为输出识别的结果文件,会自动加上后缀.txt,-l指定识别的字体文件,这里是eng英文数字,对应/usr/local/share/tessdata/eng.traineddata,-psm表示单行文本识别(还有很多类型,具体看帮助吧),可以看到识别的结果很不理想。

2,训练tesseract-ocr

由于训练的软件要求使用tif格式的文件,但是我安装的linux版本不支持tif的识别,只支持bmp图片,所以先安装一个windows版本的tesseract-ocr,而且我的系统中发现3.0.2版本的在mftraining这一步要出错,所以采用了3.0.1版本的,下载地址:http://tesseract-ocr.googlecode.com/files/tesseract-ocr-3.01-win32-portable.zip

这个下载下来之后,不需要安装,直接解压就可以使用,不过要在系统PATH变量中增加路径,还要增加环境变量TESSDATA_PREFIX,这个环境变量是tesseract的解压路径,但后面一定要加上“\”。

训练步骤:

1,准备一些需要识别的目标图片,应该能够覆盖所有需要识别的字符

2,然后转化为tif格式,可以使用imagemagick的convert命令

3,合并多个tif文件为一个,这里需要用到一个软件:

http://jaist.dl.sourceforge.net/project/vietocr/jTessBoxEditor/jTessBoxEditor-1.0.zip

解压之后运行:jTessBoxEditor.jar

4,打开“Tools->Merge TIFF...”,选择多个tif文件,保存为name.tif,所有下面的“name”,就是你所取的识别引擎文件的名字,可以改成你自己的。


5,Make Box Files。在namt.tif所在的目录下打开一个命令行,输入:

tesseract.exe name.tif name batch.nochop makebox

来生成一个box文件,该文件记录了tesseract识别出来的每一个字和其位置坐标。

6,使用jTessBoxEditor打开name.tif文件,需要记住的是第2步生成的name.box要和这个name.tif文件同在一个目录下。逐个校正文字,后保存。


7,Run Tesseract for Training。输入命令:

tesseract.exe name.tif name nobatch box.train

8,Compute the Character Set。输入命令:

unicharset_extractor.exe name.box

9,新建文件“font_properties”,并且输入文本 :

name 0 0 0 0 0

大致意思就是说name这个语言的字体为普通字体。

并执行命令:

mftraining.exe -F font_properties -U unicharset name.tr

我使用3.0.2版本就是执行这一步时有问题,所以改成3.0.1版本的。

10,Clustering。输入命令:

cntraining.exe name.tr

11,此时,在目录下应该生成若干个文件了,把unicharset, inttemp, normproto, pfftable这四个文件加上前缀“name.”。然后输入命令:

combine_tessdata.exe name.

会显示一个结果如:

Combining tessdata files 
TessdataManager combined tesseract data files. 
Offset for type 0 is -1 
Offset for type 1 is 108 
Offset for type 2 is -1 
Offset for type 3 is 1660 
Offset for type 4 is 327545 
Offset for type 5 is 327781 
Offset for type 6 is -1 
Offset for type 7 is -1 
Offset for type 8 is -1 
Offset for type 9 is -1 
Offset for type 10 is -1 
Offset for type 11 is -1 
Offset for type 12 is –1

必须确定的是第2、4、5、6行的数据不是-1,那么一个新的字典就算生成了。
此时目录下“name.traineddata”的文件拷贝到tesseract程序目录下的“tessdata”目录。
以后就可以使用该该字典来识别了,例如:

tesseract.exe test.jpg out –l name -psm 7

将生成的文件name.traineddata拷贝到linux相应的目录下,一样可以使用,整个训练过程最麻烦的就是使用jTessBoxEditor进行文字的校正,需要非常耐心,这样识别结果就会大大提高。


猜你喜欢

转载自blog.csdn.net/yuxiangji/article/details/25041799