Tesseract OCR识别小结

时间:2022-03-01 23:33:09

由于业务场景需要,需要接入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 0
1 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 

可以解决一个中文字符被识别成两个的问题

加上:

tessedit_write_images  1
在执行识别后,可以看到二值化的图片:tessinput.tif

其他参数明显作用暂时未知;

5、ViewerDebugging
具体功能:
http://code.google.com/p/tesseract-ocr/wiki/ViewerDebugging
在win32上使用遇到一只报:
waiting for server的问题,解决方法如下:

1、下载piccolox-1.2.jar、piccolo-1.2.jar ,看清楚了。是
piccolox-1.2.jar、piccolo-1.2.jar中
2、
2、I Run “new ScrollView().main(new String[]{"8461"});” in IntelliJ ,and add “piccolox-1.2.jar” and “piccolo-1.2.jar” as library;
3、Than I run "tesseract phototest.tif test1 segdemo inter",the  ViewerDebugging  is showed;