java+Tesseract-OCR实现图片识别

1.今天和同事研究如何用java实现图片识别。百度上大部分都是用tesseract去实现的。所以就做了一个demo

(1)。首先下载Tesseract-OCR 3.02,以及中文包chi_sim.traineddata(简体)

(2)以下介绍两种方式

 cmd 方式 和 test4j方式

CMD方式:

(2.1)下载安装后打开cmd命令行,输入 tesseract,如果出现下图说明安装成功

java+Tesseract-OCR实现图片识别

(2.2)、命令行测试使用

接下来就可以使用tesseract进行图片识别了。准备一副待识别的图像,这里用画图工具随便写了一段字,然后定义成1.jpg

java+Tesseract-OCR实现图片识别


$ \4 X2 p" S0 A& Y% a
在命令行中定位到图片路径然后输入命令:

java+Tesseract-OCR实现图片识别

  tesseract 1.jpg result -l eng

     其中result表示输出结果文件txt名称,eng表示用以识别的语言文件为英文。会发现图片当前目录下生成了1个result.txt文件里面结果为

java+Tesseract-OCR实现图片识别

5 g, C/ l. s* h2 V% k& o$ T" p" U

  

4、增加中文语言库

安装目录下的tessdata目录存放的是语言识别包,如果想增加中文识别功能,可以将中文的语言库放到此目录下,下载链接在下面地址:http://pan.baidu.com/s/1hqnGq4c,下载后将解压出的chi_sim.traineddata放到此目录下。然后调用的时候指明语言库即可,例如:tesseract xxx.jpg result -l chi_sim

照样,我们搞一个2.jpg图片,来测试下中文识别下的识别率怎么样。

java+Tesseract-OCR实现图片识别

1 d6 z0 Y1 ^. S

执行后结果

java+Tesseract-OCR实现图片识别

: j0 w) i. J8 y' M- y7 G8 i: ]8 \

,可以看到,识别率并不是十分令人满意。而且这边使用的例子都是十分正规的字体。如果遇到验证码那种不规则的字体,识别率也会大打折扣的。


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代码:

java+Tesseract-OCR实现图片识别

因为用了中文的语言包 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