深入學習Tesseract-ocr識別中文並訓練字型檔的方法

來源:互聯網
上載者:User

  上篇文章簡單的學習了tesseract-ocr識別圖片中的英文(連結地址如下:www.cnblogs.com/wj-1314/p/9428909.html),看起來效果還不錯,所以這篇文章繼續深入學習tesseract-ocr識別圖片中的中文。

一,準備中文字型檔

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

  為什麼強調版本呢 ,小編這裡講自己做的愚蠢的事情附上,希望大家別入坑了。

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

  不知道是什麼原因,總是報錯。報錯如下:

  我找了多種方法,包括重新安裝庫,配置環境變數,仍然沒有解決問題,所以在這裡,我又考慮到Tesseract的版本問題,所以打算重新最新版 w64-v4.0.0,繼續試試。附上下載連結地址

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

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

  下載Tesseract的Git地址: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,使用中文字型檔訓練,程式如下:
import pytesseractfrom 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,使用中文字型檔訓練的結果如下:

   從結果來看,效果不太理想,所以我們要想得到更好的結果,那麼就需要訓練自己的字型檔,下面小編開始訓練自己的字型檔。

五,訓練自己的文庫1、將圖片轉換成tif格式,用於後面產生box檔案。可以通過畫圖,然後另存新檔tif即可

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

tif文面命名格式[lang].[fontname].exp[num].tiflang是語言           fontname是字型 比如我們要訓練自訂字型檔myfontlab      字型名normal那麼我們把圖片檔案重新命名 myfontlab.normal.exp0.jpg在轉tif。

  

2、產生box檔案
tesseract myfontlab.normal.exp0.jpg myfontlab.normal.exp0 -l chi_sim batch.nochop makebox

 

 box檔案和對應的tif一定要在相同的目錄下,不然後面打不開。

 

 

3、開啟jTessBoxEditor矯正錯誤並訓練

  開啟train.bat

  用jTessBoxEditor.jar開啟tif檔案,然後根據實際情況修改box檔案 

 

  找到tif圖,開啟,並校正。

4、訓練,產生.tr檔案。

  只要在命令列輸入命令即可。

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

 

   產生一個unicharset檔案

unicharset_extractor myfontlab.normal.exp07.box

  

 

 

  在這我明明已經矯正好了,但是還是有1個字元不能識別出來,報的錯跟實際上完全沒有相關性,不知道是不是bug,到後面的結果就是“一”字沒有識別出來。

 

5,建立一個font_properties檔案
裡面內容寫入 normal 0 0 0 0 0 表示預設普通字型

 

  運行命令

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

  

 

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

  

 

 

cntraining myfontlab.normal.exp07.tr

  

 

   目錄下會產生對應下列五個檔案,在這五個檔案前加上normal.進行重新命名

6 執行 combine_tessdata normal.  

  合并五個檔案,此時目錄下的normal.traineddata 就是訓練好的字型檔檔案

combine_tessdata normal.

  

  得到訓練好的字型檔如下:

六  測試字型檔1,把normal.traineddata  複製到Tesseract-OCRt程式目錄下的“tessdata”目錄,2,在Tesseract-OCRt程式目錄下執行 
 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 設定中文字型

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.