由于业务场景需要,需要接入OCR图像识别功能,记录一下经过几天的研究过程。
1、项目主页
http://code.google.com/p/tesseract-ocr/
基本上涵盖了所有内容,download、wiki尤其重要,上面有许多知识
2、安装
http://code.google.com/p/tesseract-ocr/downloads/list下载exe安装程序安装即可;
3、字库训练
由于OCR识别必须要有字库,google提供了需要语言的字库,在download页面中,用于识别中文的字库tesseract-ocr-3.02.chi_sim.tar.gz非常不好用,识别率极低,因此需要自建字库训练。
具体流程如下:
(3-1)生成tif+box模板;
tif为字库图片,本文模板:vie.arial.exp0.tif,见附件;
box文件为字库描述文件,本文模板:vie.arial.exp0.box,格式为:
0 102 4857 122 4889 01 134 4857 147 4889 0
2 159 4857 180 4889 0
3 188 4857 205 4889 0
box文件会划定一个图片的矩形区域,指明其描述的含义:
[字符含义] [minx] [miny] [maxx] [maxy] [page_num]
核心思想是:通过tif图片生成图形,用box文件描述图形,共同生成模板。
(3-2)JTessBoxEditor自动化工具
从第一步可以看出,训练字库有一定成本,我们需要生成一个tif图片。然后还要用Tesseract生成对应的box文件。为了保证box文件正常,还需要手动编辑box文件,对其进行纠正。因此就有了JTessBoxEditor的产生,项目主页:
http://vietocr.sourceforge.net/training.html
有3大功能:
1、合并多个tif文件;
2、图形化纠正box文件;
3、根据文字,自动生成tif文件+box文件;
目前主要用到第3个功能。可以直接运行jar包执行JTessBoxEditor。推荐直接使用JTessBoxEditor提供的api接口:
TiffBoxGenerator generator = new TiffBoxGenerator(text,font,5000, 5000); generator.setOutputFolder(new File("D:\\workspace\\demo\\test2")); generator.setFileName("vie.arial.exp0.tif"); generator.setTracking((float) 0.1); generator.create();
指明需要生成的文本内容,字体,图片宽、图片高,run即可;
(3-3)编辑vie.font_properties
指明字体支持的类型,例如改字体是否支持“粗体”、“斜体”、“下划线”等,本例默认不支持,内容如下,文件见附件:
arial 0 0 0 0 0
(3-4)训练
具体训练脚本资料较多,不再论述,原理见:
http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
本例提供一个train.bat文件,将vie.arial.exp0.tif、vie.arial.exp0.box、vie.font_properties、train.bat放在同一目录,执行train.bat即可
将生成的字库vie.traineddata复制到tessdata下
(3-5)识别
执行
tesseract.exe in_put out_put -l vie 即可
-l vie 表明使用vie.traineddata字库
4、参数配置
tesseract.exe in_put out_put -l vie my_config
表明加载my_config配置文件,tesseract提供了多大600+配置项,每个具体配置项作用:
http://www.sk-spell.sk.cx/tesseract-ocr-parameters-in-302-version
描述非常不详细,根据指点:
http://code.google.com/p/tesseract-ocr/wiki/ControlParams
在my_config中加上:
enable_new_segsearch 0
可以解决一个中文字符被识别成两个的问题
加上: