tesseract ocr 學習筆記

2021-06-18 20:18:28 字數 2523 閱讀 4012

由於ocr技術本身屬於乙個比較複雜比較新穎的技術,比較多軟體公司都把它作為

智財權的一部分,網路上比較難找到開發教材。因此,採用一些現有的ocr識別模組將

有助於減少開發時間,增加研發效率。

對比了一些商業模組與開源模組,覺得其中tesseract-ocr開源模組比較貼合這

次專案的要求(當前專案對文字數量少,只需要找出兩機種不同,相對來說精確度要求低)。

tesseract-ocr是一款開源的ocr識別引擎,初期引擎由hp實驗室研發,後來貢獻給了

開源軟體業,後經由google進行改進,消除bug,優化,重新發布。當前版本為3.02。

其通過不同的語言訓練庫可以支援多種語言(包括中文、日文)。

專案,發現其源**為c++,要結合到c#中程式設計比較麻煩。後來經過編譯發現其可以生成

一系列用命令列執行的程式(如:tesseract.exe,mftraining.exe,cntraining.exe等),

命令列執行"tesseract  名  輸出檔名 -l 字型檔檔案 -psm pagesegmode 配置檔案"

可以得到乙個txt檔案,其中包含文字識別的結果了。初步嘗試識別一些標準字型,

結果還算理想,但經過設計的藝術字型就識別率不高了.

所以接下來必須進行對字型檔進行訓練了,檢視說明文件,發現訓練步驟還是比較多

的,所以詳細紀錄如下:

1、首先找到各種要識別的文字的截圖,格式要是tif格式

2、用以下命令為每個tif影象生成box檔案,box檔案內容為各字元及其邊框座標

tesseract.exe lan.new.exp0.tif lan.new.exp0 -l eng batch.nochop makebox

需要注意的是,此座標的起點為左下角,即左下角為x:0  y:0。

3、此時的box檔案有可能存在識別錯誤以及字元分割錯誤,用jtessboxeditor

軟體可比較快速直觀的修改

4、把修改好的box檔案儲存,用以下命令為每個box檔案生成tr檔案

tesseract lan.new.exp0.tif lan.new.exp0 nobatch box.train

5、用unicharset_extractor程式命令列彙總這些box檔案生成計算字符集unicharset

unicharset_extractor lan.new.exp0.box …… lan.new.exp12.box

6、聚集字元特徵, 需先在當前目錄下新建檔案font_properties 檔案內容為:

tick 0 0 0 0 0  意思為:這個語言的字型為普通字型。格式如下:

然後用mftraining生成字元特徵檔案.unicharset、inttemp、pffmtable

mftraining -u unicharset -o lan.unicharset   lan.new.exp0.tr ……

接著用mftraining生成字元形狀正常化特徵檔案normproto

cntraining lan.new.exp0.tr lan.new.exp1.tr

7、合併訓練檔案

把unicharset, inttemp, normproto, pffmtable,shapetable這四個檔案加上字首"lan."

這裡的字首名就是新訓練的語言字型檔的名字了。

然後使用命令:"combine_tessdata lan." (不能少了那個句點),

會生成乙個lan.traineddata 字典檔案,然後把這個檔案複製到tessract

的安裝目錄下乙個叫tessdata的資料夾裡,就可以使用新的訓練字型檔了

8、使用新的字型檔

命令列:tesseract lan.new.exp0.tif text -l lan

開啟text.txt,對照原圖,發現大部分的字型都可以識別了,但某些地方還是出現

了識別錯誤。(例如圖2的n識別成了r,c012識別成cd12。)

後來經過排除一些訓練樣品,發現主要是因為受到了同乙個字元的不同字型的

影響,例如

lan tony中n的字型是不一樣的。

解決辦法:把lan的n識別成n,以增加識別率,程式設計時可把字元變回大寫。

至於c012識別成cd12,也是因為有幾個上的0比較圓潤,導致c012識別成了

cd12,這時候我們採取了新增使用者自定義字元的方法去修正。做法如下:

tessdata目錄下新建乙個lan.user-words檔案內容為:

c012 〈換行符/n〉 [下乙個詞語]

tessdata\config目錄下新建乙個bazaar檔案,內容為:

user_words_suffix user-words

最後,把識別命令改為:

tesseract lan.new.exp0.tif text -l lan bazaar

至此,截圖中的字母就全部給識別出來了。

但還有乙個殘留問題,對於不同的字型 我想在同一種語言中分成不同的字型來表示,例如 lan.new 和 lan.new1 ,以讓他們不會衝突,但編譯的時候就會失敗

不知道是什麼原因,還望網路上的牛人幫忙解答.共同進步! 

Tesseract ocr 3 02學習記錄一

光學字元識別 ocr,optical character recognition 是指對文字資料進行掃瞄,然後對影象檔案進行分析處理,獲取文字及版面資訊的過程。ocr技術非常專業,一般多是印刷 列印行業的從業人員使用,可以快速的將紙質資料轉換為電子資料。關於中文ocr,目前國內水平較高的有清華文通 ...

Tesseract ocr 3 02學習記錄一

光學字元識別 ocr,optical character recognition 是指對文字資料進行掃瞄,然後對影象檔案進行分析處理,獲取文字及版面資訊的過程。ocr技術非常專業,一般多是印刷 列印行業的從業人員使用,可以快速的將紙質資料轉換為電子資料。關於中文ocr,目前國內水平較高的有清華文通 ...

Tesseract OCR引擎 入門

ocr optical character recognition 光學字元識別,是指對檔案中的文字進行分析識別,獲取的過程。tesseract 開源的ocr識別引擎,初期tesseract引擎由hp實驗室研發,後來貢獻給了開源軟體業,後經由google進行改進,消除bug,優化,重新發布。當前版本...