1. 程式人生 > >Tesseract-OCR識別中文與訓練字型檔例項

Tesseract-OCR識別中文與訓練字型檔例項

關於中文的識別,效果比較好而且開源的應該就是Tesseract-OCR了,所以自己親身試用一下,分享到部落格讓有同樣興趣的人少走彎路。

文中所用到的身份證圖片資源是百度找的,如有侵權可聯絡我刪除。

一、準備工作

1、下載Tesseract-OCR引擎,注意要3.0以上才支援中文哦,按照提示安裝就行。

2、下載chi_sim.traindata字型檔。要有這個才能識別中文。下好後,放到Tesseract-OCR專案的tessdata資料夾裡面。

3、下載jTessBoxEditor,這個是用來訓練字型檔的。

以上的幾個在百度都能找到下載,就不詳細講了。

二、識別

1、進入cmd,進入到要識別的圖片的路徑下。

2、輸入命令

1

tesseract 圖片名稱 生成的結果檔案的名稱 字型檔

例如我的圖片識別就是:

1

tesseract test.jpg result -l chi_sim

識別完後會生成result.txt檔案

當然啦效果不太理想。所以我們要訓練自己的字型檔。

三、訓練

1、將圖片轉換成tif格式,用於後面生成box檔案。可以通過畫圖,然後另存為tif即可。

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

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

2、生成box檔案。

1

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

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

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

開啟train.bat

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

4、訓練。

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

1

tesseract  mjorcen.normal.exp0.jpg mjorcen.normal.exp0  nobatch box.train

1

unicharset_extractor mjorcen.normal.exp0.box

 

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

先不管,畢竟只有一個樣本。

新建一個font_properties檔案

裡面內容寫入 normal 0 0 0 0 0 表示預設普通字型

繼續敲命令

1

2

3

4

5

6

7

8

9

shapeclustering -F font_properties -U unicharset mjorcen.normal.exp0.tr

mftraining -F font_properties -U unicharset -O unicharset mjorcen.normal.exp0.tr

cntraining mjorcen.normal.exp0.tr

最後會生成五個檔案,把目錄下的unicharset、inttemp、pffmtable、shapetable、normproto這五個檔案前面都加上normal.

如圖:

命令列輸入,合併五個檔案:

1

combine_tessdata normal.

得到訓練好的字型檔。

四、測試

1、把 normal.traineddata 複製到Tesseract-OCR 安裝目錄下的tessdata資料夾中

2、識別命令:

1

tesseract mjorcen.normal.exp0.jpg mjorcen.normal.exp0 -l normal

3、效果

對比:

總結:肯定要自己訓練過後的字型檔識別效果好,接下來要把整個專案弄進android,還要研究怎麼將多個字型檔合併成一個字型檔,因為我不可能一次訓練完所有的圖片文字的。到時候有什麼成果了再分享博文。希望大家可以點贊!謝謝。

更新:沒有錯誤的話命令列的提示應該是這樣的