本文由@ray 出品,轉載請注明出處。
文章鏈接: http://www.cnblogs.com/wolfray/p/5547267.html
在泰迪杯A題中,我剛剛接觸了Tesseact,其中訓練字庫中遇到了較多的問題。所以在此記錄一下,也當做一個筆記,省得以后忘記。
為了方便 ,將tif命名格式設為[lang].[fontname].exp[num].tif
lang是語言
fontname是字體
比如我們要訓練自定義字庫 ec 字體名:unfont
那么我們把tif文件重命名 ec.ufont.exp0.tif
生成 .box文件
tesseract ec.ufont.exp0.tif ec.ufont.exp0 batch.nochop makebox
使用訓練過的字庫生成.box文件
tesseract ec.ufont.exp0.tif ec.ufont.exp0 -l ufont batch.nochop makebox
1. 產生字符特征文件 .tr
tesseract ec.ufont.exp0.tif ec.ufont.exp0 nobatch box.train
這一步將會產生 ec.ufont.exp0.tr文件和一個 ec.ufont.exp0.txt文件,txt文件貌似沒什么用,看看而以。
2.計算字符集(生成unicharset文件)
unicharset_extractor ec.ufont.exp0.box
3.定義字體特征文件
—Tesseract-OCR3.01以上的版本在訓練之前需要創建一個名稱為font_properties.txt的字體特征文件
手工建立一個文件font_properties.txt
內容如:ufont 0 0 0 0 0
注意:這里 必須與訓練名中的名稱保持一致,填入下面內容 ,這里全取值為0,表示字體不是粗體、斜體等等。
4.聚集字符特征
1) shapeclustering -F font_properties.txt -U unicharset ec.ufont.exp0.tr
注意:如果font_properties不加擴展名.txt,可能會報錯
2) mftraining -F font_properties.txt -U unicharset -O ufont.unicharset ec.ufont.exp0.tr
使用上一步產生的字符集文件unicharset,來生成當前新語言的字符集文件ec.unicharset。同時還會產生圖形原型文件inttemp和每個字符所對應的字符
特征數文件pffmtable。最重要的就是這個inttemp文件了,他包含了所有需要產生的字的圖形原型。
3)cntraining ec.ufont.exp0.tr
這一步產生字符形狀正常化特征文件normproto。
shapeclustering 操作不是必須的,若沒有進行此步,在mftraining的時候 會自動進行。
5.改名字
把目錄下的unicharset、inttemp、pffmtable、shapetable、normproto這五個文件前面都加上ufont.
6.執行combine_tessdata ufont.
然后把ufont.traineddata放到tessdata目錄
7.測試
必須確定的是第type 1、3、4、5的數據不是-1,那么一個新的字典就算生成了。
tesseract ec.ufont.exp0.tif papapa -l ufont
tesseract也提出,通過使用多個語言訓練庫聯合使用。如此,新的字體訓練庫也可以與原有的數據訓練庫聯合使用。如參數 -l 之后 tesseract input.tif output -l eng+newfont。
cntraining和mftraining只能最多采用32個.tr文件,因此,對於相同的字體,你必須從多種語言中,以字體獨立的方式,將所有的文件cat到一起來讓32種語言結合在一起。cntraining/mftraining以及unicharset_extractor命令行工具必須各自由給定的.tr和.box文件,以相同的順序,為不同的字體進行不同的過濾。可以提供一個程序來完成以上的事情,並在字符集表中挑出相同字符集。這樣會將事情更簡單些。
寫批處理bat命令的時候,要靈活使用excel里面的填充功能。