java+Tesseract-OCR实现图片识别
1.今天和同事研究如何用java实现图片识别。百度上大部分都是用tesseract去实现的。所以就做了一个demo
(1)。首先下载Tesseract-OCR 3.02,以及中文包chi_sim.traineddata(简体)
(2)以下介绍两种方式
cmd 方式 和 test4j方式
CMD方式:
(2.1)下载安装后打开cmd命令行,输入 tesseract,如果出现下图说明安装成功
(2.2)、命令行测试使用
接下来就可以使用tesseract进行图片识别了。准备一副待识别的图像,这里用画图工具随便写了一段字,然后定义成1.jpg
$ \4 X2 p" S0 A& Y% a
在命令行中定位到图片路径然后输入命令:
tesseract 1.jpg result -l eng
其中result表示输出结果文件txt名称,eng表示用以识别的语言文件为英文。会发现图片当前目录下生成了1个result.txt文件里面结果为
4、增加中文语言库
安装目录下的tessdata目录存放的是语言识别包,如果想增加中文识别功能,可以将中文的语言库放到此目录下,下载链接在下面地址:http://pan.baidu.com/s/1hqnGq4c,下载后将解压出的chi_sim.traineddata放到此目录下。然后调用的时候指明语言库即可,例如:tesseract xxx.jpg result -l chi_sim
照样,我们搞一个2.jpg图片,来测试下中文识别下的识别率怎么样。
执行后结果
,可以看到,识别率并不是十分令人满意。而且这边使用的例子都是十分正规的字体。如果遇到验证码那种不规则的字体,识别率也会大打折扣的。
Java方式:
利用test4j封装相关的api,直接引用如下jar包
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>2.0.1</version>
<exclusions>
<exclusion>
<groupId>com.sun.jna</groupId>
<artifactId>jna</artifactId>
</exclusion>
</exclusions>
</dependency>
java代码:
因为用了中文的语言包 chi_sim,启动遇到一点问题,还好有度娘。
报错:
read_params_file: parameter not found: allow_blob_division
解决方案如下:
在chi_sim.traineddata(注意版本)文件目录下(../Tesseract-OCR/tessdata),使用命令行执行:
combine_tessdata
-e chi_sim.traineddata chi_sim.config
执行完后,在目录下出现chi_sim.config的文件,打开该文件;
在allow_blob_division F这一行的前面加#,注释掉
即:#
allow_blob_division F
然后,在执行命令行:
combine_tessdata
-o chi_sim.traineddata chi_sim.config