Tesseract4.0 5.0訓練字庫 OCR 提高識別率必備(超詳情)


由於tesseract的中文語言包“chi_sim”對中文手寫字體或者環境比較復雜的圖片,識別正確率不高,因此需要針對特定情況用自己的樣本進行訓練,提高識別率,通過訓練,也可以形成自己的語言庫。

對其他語言庫有興趣的:https://github.com/tesseract-ocr/tessdata

mac安裝:brew install tesseract

1.前期准備工作:

  1.  安裝  jdk1.8或以上    配置jdk環境變量

  2.  安裝 tesseract-ocr 4.0

下載地址:https://digi.bib.uni-mannheim.de/tesseract/

  配置環境變量:系統變量path添加 C:\Program Files (x86)\Tesseract-OCR;  D:\Tesseract-OCR(對應自己的tesseract安裝目錄)

  3.  jTessBoxEditor2.0工具,用於調整圖片上文字的內容和位置,

下載地址:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

安裝包解壓后雙擊里邊的“jTessBoxEditor.jar”,或者雙擊該目錄下的“train.bat”腳本文件,就可以打開該工具了。

4.准備Tess4J-3.4.8   下載: https://sourceforge.net/projects/tess4j/files/tess4j/

解壓即可得到  tessdata訓練庫(后面自定義的語言庫會用到)

2.樣本圖片准備:(進行訓練的樣本圖片數量越多越好)

這里只准備2種不同字體樣本進行測試:

3.使用jTessBoxEditor生成訓練樣本的的合並tif圖片:

(1)打開jTessBoxEditor,選擇Tools->Merge TIFF,進入訓練樣本所在文件夾,選中要參與訓練的樣本圖片:

(2)點擊 “打開” 后彈出保存對話框,選擇保存在當前路徑下,文件命名為 “zwp.test.exp0.tif” ,格式只有一種 “TIFF” 可選。

tif文面命名格式[lang].[fontname].exp[num].tif

lang是語言,fontname是字體,num為自定義數字。

比如我們要訓練自定義字庫 zwp,字體名test,那么我們把圖片文件命名為 zwp.test.exp0.tif

4.使用tesseract生成.box文件:

在上一步驟生成的“zwp.test.exp0.tif”文件所在目錄下打開命令行程序,執行下面命令,執行完之后會生成zwp.test.exp0.box文件。

執行如下命令 : tesseract zwp.test.exp0.tif zwp.test.exp0  batch.nochop makebox

5.使用jTessBoxEditor矯正.box文件的錯誤:

.box文件記錄了每個字符在圖片上的位置和識別出的內容,訓練前需要使用jTessBoxEditor調整字符的位置和內容。

打開jTessBoxEditor點擊Box Editor ->Open,打開步驟2中生成的“zwp.test.exp0.tif”,會自動關聯到“zwp.test.exp0.box”文件,這兩文件要求在同一目錄下。調整完點擊“save”保存修改。

注意采坑點:1.修改文字是亂碼

解決方法: jtessboxeditor的setting  --->  Font  里改字體為宋體,regular就可以了。

2.修改文字必須是白底黑字,要不然訓練時會出現錯誤

6.生成font_properties文件:(該文件沒有后綴名)

(1)執行如下命令: echo test 0 0 0 0 0 >font_properties

(2)也可以手工新建一個名為font_properties的文本文件,輸入內容 “test 0 0 0 0 0” 表示字體test的粗體、傾斜等共計5個屬性。這里的“test”必須與“zwp.test.exp0.box”中的“test”名稱一致。

7、使用tesseract生成.tr訓練文件:

執行下面命令,執行完之后,會在當前目錄生成zwp.test.exp0.tr文件。

執行如下命令: tesseract zwp.test.exp0.tif zwp.test.exp0 nobatch box.train

8.生成字符集文件:

執行下面命令:執行完之后會在當前目錄生成一個名為“unicharset”的文件。

執行命令: unicharset_extractor zwp.test.exp0.box

9、生成shape文件:

執行下面命令,執行完之后,會生成 shapetable 和 zwp.unicharset 兩個文件。

執行命令:  shapeclustering -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr

10、生成聚字符特征文件:

執行下面命令,會生成 inttemp、pffmtable、shapetable和zwp.unicharset四個文件。

執行命令: mftraining -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr

11、生成字符正常化特征文件:

執行下面命令,會生成 normproto 文件。

執行命令: cntraining zwp.test.exp0.tr

12、文件重命名:

重新命名inttemp、pffmtable、shapetable和normproto這四個文件的名字為[lang].xxx。

這里修改為zwp.inttemp、zwp.pffmtable、zwp.shapetable和zwp.normproto

執行下面命令:

rename normproto zwp.normproto

rename inttemp zwp.inttemp

rename pffmtable zwp.pffmtable

rename shapetable zwp.shapetable

13、合並訓練文件:

執行下面命令,會生成zwp.traineddata文件。

執行命令: combine_tessdata zwp.

Log輸出中的Offset 1、3、4、5、13這些項不是-1,表示新的語言包生成成功。

將生成的“zwp.traineddata”語言包文件復制到Tesseract-OCR 安裝目錄下的tessdata文件夾中,就可以使用訓練生成的語言包進行圖像文字識別了。

三、代碼測試

1.maven 依賴 (依賴過程有點兒漫長→_→)

<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>3.4.0</version>

<exclusions>

<exclusion>

<groupId>com.sun.jna</groupId>

<artifactId>jna</artifactId>

</exclusion>

</exclusions>

</dependency>

2.測試代碼

public void testOCR()throws Exception {

       //你的圖片路徑   51.png 為我自定義圖片名字 其實使用的就是 上面的測試圖片

       File imageFile =new File("C:\\Users\\ljf\\Desktop\\51.png");

      //你訓練庫的路徑  tessdata

       instance.setDatapath("C:\\Users\\ljf\\Desktop\\tessdata");

      //你剛剛新建的語言庫 zwp (還記得嗎?)

       instance.setLanguage("zwp");

       String result =instance.doOCR(imageFile);

       System.out.println(result);

}

3.輸出結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM