深刻學習Tesseract-ocr識別中文並訓練字庫的方法

上篇文章簡單的學習了tesseract-ocr識別圖片中的英文(連接地址以下:http://www.javashuo.com/article/p-dwilyquz-ev.html),看起來效果還不錯,因此這篇文章繼續深刻學習tesseract-ocr識別圖片中的中文。html

一,準備中文字庫

   下載chi_sim.traindata字庫。要有這個才能識別中文。下好後,放到Tesseract-OCR項目的tessdata文件夾裏面。(注意下載字庫,必定要看庫對應的tesseract版本下載)java

爲何強調版本呢 ,小編這裏講本身作的愚蠢的事情附上,但願你們別入坑了。git

    上一篇學習Tesseract-ocr中,識別的是英文,而後小編下載了中文庫,以下github

 不知道是什麼緣由,老是報錯。報錯以下:windows

  我找了多種方法,包括從新安裝庫,配置環境變量,仍然沒有解決問題,因此在這裏,我又考慮到Tesseract的版本問題,因此打算從新最新版 w64-v4.0.0,繼續試試。附上下載連接地址瀏覽器

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

  下載Tesseract-ocr包的地址:https://github.com/tesseract-ocr/tesseract/wiki/Data-Filesapp

  下載Tesseract的Git地址:https://github.com/tesseract-ocr/tesseract/wiki工具

   通過一天的折騰,在tesseract的GitHub中,我偶然發現了問題的所在,能夠說本身是很是的蠢,請看下圖學習

   也就是不一樣的版本,安裝的中文包是不一樣的,而我亂安裝了包,因此一直報錯,尚未解決問題,下次必定不能這麼粗心。

二,準備訓練字庫

  下載jTessBoxEditor,這個是用來訓練字庫的。

 

  以上的在百度都能找到下載,就不詳細講了(要是找不到的,能夠留言給我),下載好以後就是這樣的。

 

三,下載Java虛擬機(Java大法好啊)

  若是你剛剛接觸Java語言,而且對它興趣很大,想繼續研究。那麼這節就來給你說說怎麼安裝Java工具JDK,它是你進行Java的第一步。

      首先你要下載Java的JDK(JDK的全稱是:Java  Development Kit即Java語言軟件工具開發包),目前最新的JDK版本是1.8,Java最初是SUN公司,因後來被oracle公司收購,故你須要到oracle官網上下載JDK網址是:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html。輸入這個網址你就能夠看到下面圖片

  其中圖片中現實的上面是oracle公司提供的Java JDK,上面有兩個按鈕,默認是不接受License,你須要接受之後就能夠下載Java的JDK,這裏你須要根據本身電腦的類型,以及操做系統的位數,下載對應的JDK。下面的一個是oracle公司對JDK提供的demos和Samples即簡單的例子,能夠供咱們學習,感興趣的能夠下載下來學習。

       這裏我選擇下載JDK的Windows的64位JDK,下面圖片是下載的JDK的安裝包。

  雙擊JDK安裝包,點擊下一步。

   這裏選擇不安裝公共JRE,由於公共JRE是一個獨立的JRE系統,它是單獨的安裝在windows系統下的其餘路徑下。公用的JRE會向瀏覽器和系統中註冊Java運行時的環境。經過向瀏覽器和系統中註冊運行時的環境,系統中的任何應用程序均可以使用公用JRE。可是如今在瀏覽器網頁上執行applet的機會幾乎沒有,而且JDK目錄下JRE徹底能夠勝任,因此通常選擇不安裝公用JRE。這裏若是你不想安裝在默認路徑下,能夠選擇更改目錄。

    單擊下一步,會出現以下安裝條。

   輸入Java -version能夠查看本身的Java版本。這樣你的JDK就安裝成功了。

 

四,識別中文效果

 1,隨便製做一張有漢字的圖片,小編作的圖片以下:

2,使用中文字庫訓練,程序以下:

1

2

3

4

5

6

7

8

9

10

11

12

import pytesseract

from PIL import Image

 

#打開驗證碼圖片

image = Image.open('07.jpg')

#加載一下圖片防止報錯,此處能夠省略

image.load()

#調用show來展現圖片,調試用此處能夠省略

image.show()

text = pytesseract.image_to_string(Image.open('07.jpg'),lang ='chi_sim')

 

print(text)

  

3,使用中文字庫訓練的結果以下:

   從結果來看,效果不太理想,因此咱們要想獲得更好的結果,那麼就須要訓練本身的字庫,下面小編開始訓練本身的字庫。

五,訓練本身的文庫

一、將圖片轉換成tif格式,用於後面生成box文件。能夠經過畫圖,而後另存爲tif便可

  更改圖片名字,這個是有要求的

1

2

3

4

5

6

7

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

 

lang是語言           fontname是字體

 

好比咱們要訓練自定義字庫myfontlab      字體名normal

 

那麼咱們把圖片文件重命名 myfontlab.normal.exp0.jpg在轉tif。

  

二、生成box文件

1

tesseract myfontlab.normal.exp0.jpg myfontlab.normal.exp0 -l chi_sim batch.nochop makebox

 

 box文件和對應的tif必定要在相同的目錄下,否則後面打不開。

 

 

三、打開jTessBoxEditor矯正錯誤並訓練

  打開train.bat

  用jTessBoxEditor.jar打開tif文件,而後根據實際狀況修改box文件 

 

  找到tif圖,打開,並校訂。

四、訓練,生成.tr文件。

  只要在命令行輸入命令便可。

1

tesseract  myfontlab.normal.exp07.jpg  myfontlab.normal.exp07  nobatch box.train

 

   生成一個unicharset文件

1

unicharset_extractor myfontlab.normal.exp07.box

  

 

 

  在這我明明已經矯正好了,可是仍是有1個字符不能識別出來,報的錯跟實際上徹底沒有相關性,不知道是否是bug,到後面的結果就是「一」字沒有識別出來。

 

5,新建一個font_properties文件

1

裏面內容寫入 normal 0 0 0 0 0 表示默認普通字體

 

  運行命令

1

shapeclustering -F font_properties.txt -U unicharset myfontlab.normal.exp07.tr

  

 

1

mftraining -F font_properties.txt -U unicharset -O unicharset myfontlab.normal.exp07.tr

  

 

 

1

cntraining myfontlab.normal.exp07.tr

  

 

   目錄下會生成對應下列五個文件,在這五個文件前加上normal.進行重命名

6 執行 combine_tessdata normal.  

  合併五個文件,此時目錄下的normal.traineddata 就是訓練好的字庫文件

1

combine_tessdata normal.

  

  獲得訓練好的字庫以下:

六  測試字庫

1,把normal.traineddata  複製到Tesseract-OCRt程序目錄下的「tessdata」目錄,

2,在Tesseract-OCRt程序目錄下執行 

1

tesseract.exe myfontlab.normal.exp07.jpg out –l normal

 

 

  下面文件中會保存你識別到的數據;

  這個其實網上資料不少,但大都描述的不夠詳細和完整,這裏我一步一步把使用tesseract-ocr 訓練字庫的方法和步驟進行了描述,親測是沒有問題。

 

 

七,如何經過jTessBoxEditor進行Tesseract3.02.02樣本訓練

  Tesseract生成.box文件後,須要用到jTessBoxEditor工具對其進行糾正,如下是jTessBoxEditor的使用步驟。

1  加載要糾正的.tif文件

  box文件的內容也同時會加載到jTessBoxEditor,若是這部分的內容爲空,則是沒有生成.box文件的!以下圖:

2  加載步驟以下:

  此處借用的是網友的圖片,方便,若有侵權,請聯繫小編及時刪除。

3  矯正文字

  當一個字被識別爲兩個時,按住Ctrl鍵選中兩個,而後點擊Merge,便可進行合併!

  進行矯正 主要就是座標 位置的調整,注意 添加須要選擇上一個文字才能分離

4.刪除空白的方法

  有些空白處可能也會被jTessBoxEditor誤認爲是字體,用藍色框框住,

  這個能夠直接選中,delete掉就行了!

5.總結

  正常狀況下是每一個字體都會有藍色框框住,若是說有其中的兩個相鄰的字都沒有被框住,這時候即便採用insert後加上藍色框,可是最後識別仍是有問題,這個不懂是否是我操做不對! 最後發現原來是兩個字體挨的太近的,致使區別不開了,在老大的建議下,把兩個字的距離隔開點來,就能夠正常的框出來了!(若是有更好的方法,請指出,謝謝)

  修改完成後保存便可!這裏我是一張張樣本圖片進行修改的,可是我這樣作每張都有作一樣的糾正,不知道有沒有批量修改的方法呢?

  在對圖片進行訓練以前,最好先用Opencv進行下處理,好比說二值化,這樣就能夠去掉一些干擾!可是要注意的是在識別以前一樣的也對圖片先進行相同效果的處理!這樣的識別率會有所提升!

八  軟件設置字體的方法

  在setting>font 設置中文字體

 

相關文章
相關標籤/搜索