1. 程式人生 > >java+Tesseract-OCR實現圖片識別

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檔案裡面結果為

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圖片,來測試下中文識別下的識別率怎麼樣。

1 d6 z0 Y1 ^. S

執行後結果

: 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程式碼:


因為用了中文的語言包 chi_sim,啟動遇到一點問題,還好有度娘。

報錯:


解決方案如下:

在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