關於訓練基於神經網路 LSTM 的 Tesseract 4.00,請參閱 訓練 Tesseract 4.00
如何使用提供的工具來訓練 Tesseract 3.00–3.02 以支援新的語言?
注意:這些說明適用於 較舊 版本的 Tesseract。較新版本的訓練說明請參閱 [[這裡 | Training-Tesseract]]。 |
簡介
Tesseract 3.0x 是完全可訓練的。此頁面描述訓練過程,提供一些關於適用於各種語言的指南,以及對結果的預期。
也有 第三方訓練工具 可用於訓練。
在開始訓練之前,請檢查已發布 3.04 版的 traineddata 語言列表。
背景與限制
Tesseract 最初僅設計為識別英文文字。已努力修改引擎及其訓練系統,使其能夠處理其他語言和 UTF-8 字元。 Tesseract 3.0 可以處理任何 Unicode 字元(使用 UTF-8 編碼),但其成功處理的語言範圍有限,因此在您希望它能順利處理您的特定語言之前,請考慮本節的內容!
Tesseract 3.01 加入了由上而下的語言,而 Tesseract 3.02 加入了希伯來語(由右至左)。 Tesseract 目前使用一個名為 cube 的輔助引擎(包含在 Tesseract 3.0+ 中)來處理阿拉伯語和印地語等腳本。 Google 已為 3.04 版本提供了其他[語言] 的 traineddata(https://github.com/tesseract-ocr/tesseract/blob/3.02.02/doc/tesseract.1.asc#languages)。
Tesseract 在處理大型字符集語言(如中文)時速度較慢,但似乎可以正常運作。
Tesseract 需要知道同一字元的不同形狀,方法是明確分隔不同的字體。字體的數量限制為 64 種。請注意,執行時間在很大程度上取決於所提供的字體數量,訓練超過 32 種字體會導致速度明顯下降。
對於 3.00/3.01 版本,任何具有不同標點符號和數字的語言都會因一些假設 ASCII 標點符號和數字的硬編碼演算法而處於劣勢。[已在 3.02 版本中修正]
您需要在輸入檔案所在的相同資料夾中執行所有命令。
所需資料檔案
若要訓練其他語言,您必須在 tessdata
子目錄中建立一些資料檔案,然後使用 combine_tessdata
將這些檔案壓縮成單一檔案。命名慣例為 languagecode.file_name
。已發布檔案的語言代碼遵循 ISO 639-3 標準,但可以使用任何字串。用於英文 (3.00) 的檔案為
tessdata/eng.config
tessdata/eng.unicharset
tessdata/eng.unicharambigs
tessdata/eng.inttemp
tessdata/eng.pffmtable
tessdata/eng.normproto
tessdata/eng.punc-dawg
tessdata/eng.word-dawg
tessdata/eng.number-dawg
tessdata/eng.freq-dawg
... 以及最後壓縮的檔案為
tessdata/eng.traineddata
並且
- 可能仍然會單獨提供
tessdata/eng.user-words
。
traineddata 檔案只是輸入檔案的串聯,帶有一個目錄表,其中包含已知檔案類型的偏移量。請參閱原始程式碼中的 ccutil/tessdatamanager.h 以取得目前接受的檔案名稱清單。注意 traineddata 檔案中的檔案與 3.00 版之前使用的清單不同,並且很可能會在未來的版本中發生變化,甚至可能會發生巨大變化。
文字輸入檔案的需求
文字輸入檔案(lang.config、lang.unicharambigs、font_properties、box 檔案、字典的字詞列表...)需要符合以下條件
- 沒有 BOM 的 ASCII 或 UTF-8 編碼
- Unix 行尾標記 ('\n')
- 最後一個字元必須是行尾標記 ('\n')。某些文字編輯器會將其顯示為檔案結尾的空行。如果您省略此標記,您將收到包含「last_char == '\n':錯誤:斷言失敗...」的錯誤訊息。
最低限度的要求為何?
您必須使用以下所述的程序建立 unicharset
、inttemp
、normproto
、pffmtable
。如果您只想辨識有限範圍的字體(例如,單一字體),則單一訓練頁面可能就足夠了。不再需要提供其他檔案,但最有可能會提高準確性,具體取決於您的應用程式。
訓練程序
某些程序不可避免地是手動的。我們會盡可能提供自動化協助。下面引用的工具都在 training 子目錄中建置。
產生訓練影像
第一步是決定要使用的完整字符集,並準備一個包含一組範例的文字或文字處理器檔案。建立訓練檔案時,請記住最重要的幾點是
- 確保每個字元的樣本數量最少。10 個是不錯的選擇,但對於稀有字元,5 個也可以。
- 較常使用的字元應該有更多樣本,至少 20 個。
- 不要犯將所有非字母字元組合在一起的錯誤。讓文字更真實。例如,The quick brown fox jumps over the lazy dog. 0123456789 !@#$%^&(),.{}<>/? 很糟糕。更好的做法是 The (quick) brown {fox} jumps! over the $3,456.78 <lazy> #90 dog & duck/goose, as 12.5% of E-mail from aspammer@website.com is spam? 這讓文字行查找程式碼更有機會取得特殊字元的合理基準指標。
- [僅與 3.00 版相關,已在 3.01 版中修正] 列印時,將文字稍微隔開一點有時很重要,因此請在文字處理器中提高字元間距和行間距。文字間隔不足會導致在 tr 檔案產生期間出現「FAILURE! box overlaps no blobs or blobs in multiple rows」錯誤,進而導致 FATALITY - 0 labelled samples of "x",這會導致「Error: X classes in inttemp while unicharset contains Y unichars」,並且您無法使用新建立的資料檔案。
- 訓練資料應該按字體分組。理想情況下,單一字體的所有樣本都應該放在單一 tiff 檔案中,但這可能是多頁 tiff 檔案(如果您安裝了 libtiff 或 leptonica),因此單一字體中的訓練資料總量可能包含多個頁面和數萬個字元,允許訓練大型字符集語言。
- 無需以多種尺寸進行訓練。10 點即可。(例外情況是非常小的文字。如果您要辨識 x 高度小於約 15 像素的文字,您應該專門訓練它或在嘗試辨識之前縮放您的影像。)
- 請勿在一個影像檔案中混合使用字體(準確來說是在單一 .tr 檔案中)。這會導致在分群時捨棄特徵,進而導致辨識錯誤。
- 如果您不確定如何格式化您的訓練資料,下載頁面上的範例 boxtiff 檔案將會有所幫助。
接下來,列印並掃描(或使用某種電子呈現方法)以建立訓練頁面的影像。最多可以使用 64 個訓練檔案(包含多頁)。最好建立字體和樣式(但在不同的檔案中)的混合,包括斜體和粗體。
注意:[僅與 3.00 版相關,已在 3.01 版中修正] 由於間隔要求,從真實影像進行訓練實際上相當困難。如果您可以列印/掃描自己的訓練文字,則會容易得多。
您還需要將訓練文字儲存為 UTF-8 文字檔案,以便在下一步中將程式碼插入另一個檔案中使用。
針對大量訓練資料的澄清 64 個影像限制是針對字體的數量。每個字體都應該放在單一的多頁 tiff 檔案中,並且可以修改 box 檔案以在座標之後指定每個字元的頁碼。因此,可以為任何給定的字體建立任意大量的訓練資料,允許訓練大型字符集語言。多頁 tiff 的替代方法是為單一字體建立多個單頁 tiff,然後您必須將每個字體的 tr 檔案串連在一起,形成多個單一字體 tr 檔案。在任何情況下,mftraining 的輸入 tr 檔案都必須各自包含單一字體。
製作 Box 檔案
對於下面的下一個步驟,Tesseract 需要一個「box」檔案來搭配每個訓練影像。box 檔案是一個文字檔案,其中列出訓練影像中的字元,依序排列,每行一個,以及影像周圍邊界框的座標。Tesseract 3.0 具有一種模式,它可以輸出所需格式的文字檔案,但如果字符集與其目前的訓練不同,則其文字自然會不正確。因此,此處的關鍵流程是手動編輯檔案,以將正確的字元放入其中。
使用此命令列在每個訓練影像上執行 Tesseract
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
例如
tesseract eng.timesitalic.exp0.tif eng.timesitalic.exp0 batch.nochop makebox
現在是困難的部分。您必須編輯檔案 [lang].[fontname].exp[num].box
,並將檔案中每個字元的 UTF-8 程式碼放在每行的開頭,以取代 Tesseract 放置在那裡的錯誤字元。範例:發行版本包含影像 eurotext.tif。執行上述命令會產生一個文字檔案,其中包含以下行(第 141-154 行)
s 734 494 751 519 0
p 753 486 776 518 0
r 779 494 796 518 0
i 799 494 810 527 0
n 814 494 837 518 0
g 839 485 862 518 0
t 865 492 878 521 0
u 101 453 122 484 0
b 126 453 146 486 0
e 149 452 168 477 0
r 172 453 187 476 0
d 211 451 232 484 0
e 236 451 255 475 0
n 259 452 281 475 0
由於 Tesseract 是以英文模式執行,因此無法正確辨識變音符號。這個字元需要使用支援 UTF-8 的編輯器進行修正。在這個情況下,需要將 u
改為 ü
。
建議使用支援 UTF-8 的編輯器:Notepad++、gedit、KWrite、Geany、Vim、Emacs、Atom、TextMate、Sublime Text。選擇一個即可!Linux 和 Windows 都有字元對應表,可用於複製無法輸入的字元。
理論上,box 檔案中的每一行都應代表訓練檔案中的一個字元,但如果您有水平斷開的字元,例如下雙引號「„」,則可能會出現需要合併的 2 個框!
範例:第 116-129 行
D 101 504 131 535 0
e 135 502 154 528 0
r 158 503 173 526 0
, 197 498 206 510 0
, 206 497 214 509 0
s 220 501 236 526 0
c 239 501 258 525 0
h 262 502 284 534 0
n 288 501 310 525 0
e 313 500 332 524 0
l 336 501 347 534 0
l 352 500 363 532 0
e 367 499 386 524 0
” 389 520 407 532 0
如您所見,下雙引號字元已表示為兩個單引號。邊界框必須按如下方式合併
- 第一個數字(左邊),取兩行的最小值 (197)
- 第二個數字(底部),取兩行的最小值 (497)
- 第三個數字(右邊),取兩行的最大值 (214)
- 第四個數字(頂部),取兩行的最大值 (510)
這樣會得到
D 101 504 131 535 0
e 135 502 154 528 0
r 158 503 173 526 0
„ 197 497 214 510 0
s 220 501 236 526 0
c 239 501 258 525 0
h 262 502 284 534 0
n 288 501 310 525 0
e 313 500 332 524 0
l 336 501 347 534 0
l 352 500 363 532 0
e 367 499 386 524 0
” 389 520 407 532 0
如果您沒有成功地在訓練影像上將字元分開,某些字元可能會被合併到一個框中。在這種情況下,您可以重新製作具有更好間距的影像並重新開始,或者如果該對字元很常見,則將這兩個字元放在該行的開頭,並保留邊界框來表示它們兩者。(截至 3.00 版,一個「字元」的描述限制為 24 個位元組。這將允許您使用 6 到 24 個 Unicode 來描述該字元,具體取決於您的代碼在 Unicode 集中所處的位置。如果有人遇到此限制,請提交問題描述您的情況。)
請注意,box 檔案中使用的座標系統以左下角為 (0,0)。
每行最後一個數字是多頁 tiff 檔案中該字元的頁碼(從 0 開始)。
有幾種視覺工具可以編輯 box 檔案。請查看AddOns 文件。
啟動新的字符集
如果您嘗試訓練新的字元集,最好在單一字型上投入精力,以獲得一個良好的 box 檔案,執行其餘的訓練過程,然後在您的新語言中使用 Tesseract 來製作其餘的 box 檔案,如下所示
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] -l yournewlanguage batch.nochop makebox
這應該會使第二個 box 檔案更容易製作,因為 Tesseract 很有可能會正確識別大部分文字。您可以隨時重複此序列,在訓練集中新增更多字型(即,在下面的 mftraining
和 cntraining
的命令列中),但請注意,沒有增量訓練模式允許您將新的訓練資料新增到現有集中。這表示每次您執行 mftraining
和 cntraining
時,都是從您在命令列中提供的 tr 檔案從頭開始製作新的資料檔案,而且這些程式無法使用現有的 intproto
/ pffmtable
/ normproto
並直接新增到它們。
已提供 Tif/Box 配對!
某些 Tif/Box 檔案對位於下載頁面上。(請注意,tiff 檔案會經過 G4 壓縮以節省空間,因此您必須先擁有 libtiff 或將它們解壓縮)。您可以按照以下流程,為您自己的語言或現有語言的子集製作更好的訓練資料,或者在現有語言中新增不同的字元/形狀
- 篩選 box 檔案,僅保留您想要的字元的行。
- 執行 Tesseract 進行訓練(如下)。
- 針對每個字型,從多種語言串聯 .tr 檔案,以取得您想要的字元集,並新增您自己的字型或字元的 .tr 檔案。
- 以與 .tr 檔案相同的方式串聯已篩選的 box 檔案,以交給 unicharset_extractor。
- 執行其餘的訓練過程。小心!這並不像聽起來那麼簡單!cntraining 和 mftraining 最多只能接受 64 個 .tr 檔案,因此您必須將來自多種語言的相同字型的所有檔案串聯在一起,以製作 64 個語言合併但字型個別的檔案。給定 unicharset_extractor 時,tr 檔案中找到的字元必須與 box 檔案中找到的字元順序相符,因此您必須以與 tr 檔案相同的順序串聯 box 檔案。cn/mftraining 和 unicharset_extractor 的命令列必須依相同順序提供 .tr 和 .box 檔案(分別),以防您對不同的字型進行不同的篩選。可能有程式可執行所有這些操作,並以字元對應表的樣式挑選出字元。這可能會使整個過程更容易。
執行 Tesseract 進行訓練
對於您的每個訓練影像、box 檔案對,以訓練模式執行 Tesseract
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] box.train
或
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] box.train.stderr
請注意,雖然 Tesseract 需要存在語言資料才能執行此步驟,但不會使用該語言資料,因此無論您要訓練哪種語言,使用英文即可。
第一種形式會將所有錯誤傳送到名為 tesseract.log 的檔案。第二種形式會將所有錯誤傳送到 stderr。
請注意,box 檔案名稱必須與 tif 檔案名稱相符,包括路徑,否則 Tesseract 將找不到它。此步驟的輸出是 fontfile.tr
,其中包含訓練頁面中每個字元的特徵。[lang].[fontname].exp[num].txt
也會寫入,其中包含單一換行符號,沒有文字。
重要檢查 apply_box 輸出的錯誤。如果報告 FATALITIES,則在修正 box 檔案之前,繼續訓練過程沒有意義。新的 box.train.stderr 設定檔可讓您更輕鬆地選擇輸出的位置。FATALITY 通常表示此步驟無法找到 box 檔案中所列出的其中一個字元的任何訓練樣本。座標錯誤,或者相關字元的影像有問題。如果沒有可用的字元樣本,則無法辨識該字元,而且產生的 inttemp 檔案稍後將與 unicharset 檔案不符,Tesseract 將中止。
另一個可能發生的錯誤也是致命的,需要注意,是關於「Box file format error on line n」的錯誤。如果前面加上「Bad utf-8 char…」,則表示 UTF-8 代碼不正確,需要修正。錯誤「utf-8 string too long…」表示您已超過字元描述的 24 個位元組限制。如果您需要長度超過 24 個位元組的描述,請提交問題。
無需編輯 [lang].[fontname].exp[num].tr
檔案的內容。其中的字型名稱無需設定。
對於好奇的人,以下是關於格式的一些資訊。box 檔案中的每個字元在 .tr 檔案中都有對應的一組條目(依順序),如下所示
UnknownFont <UTF-8 code(s)> 2
mf <number of features>
x y length dir 0 0
... (there are a set of these determined by <number of features>
above)
cn 1
ypos length x2ndmoment y2ndmoment
mf
特徵是輪廓的多邊形線段,已正規化為一階和二階動差。x = x 位置 [-0.5,0.5] y = y 位置 [-0.25,0.75] 長度是多邊形線段的長度 [0,1.0] dir 是線段的方向 [0,1.0]
cn
特徵是用於校正動差正規化,以區分位置和大小(例如 c 與 C 和 , 與 ‘)
計算字符集
Tesseract 需要知道它可以輸出的可能字元集。若要產生 unicharset
資料檔案,請在上文產生的 box 檔案上使用 unicharset_extractor
程式
unicharset_extractor [lang].[fontname].exp[num].box lang.fontname.exp1.box ...
Tesseract 需要存取字元屬性 isalpha、isdigit、isupper、islower、ispunctuation。此資料必須編碼在 unicharset
資料檔案中。此檔案的每一行對應一個字元。UTF-8 中的字元後面跟著一個十六進位數字,表示編碼屬性的二進位遮罩。每個位元對應一個屬性。如果位元設定為 1,則表示該屬性為 true。位元順序為(從最低有效位元到最高有效位元):isalpha、islower、isupper、isdigit。
範例
- 「;」是標點符號字元。因此,其屬性由二進位數字 10000(十六進位中的 10)表示。
- 「b」是字母字元和小寫字元。因此,其屬性由二進位數字 00011(十六進位中的 3)表示。
- 「W」是字母字元和大寫字元。因此,其屬性由二進位數字 00101(十六進位中的 5)表示。
- 「7」只是一個數字。因此,其屬性由二進位數字 01000(十六進位中的 8)表示。
- 「=」不是標點符號,不是數字或字母字元。因此,其屬性由二進位數字 00000(十六進位中的 0)表示。
; 10 Common 46
b 3 Latin 59
W 5 Latin 40
7 8 Common 66
= 0 Common 93
日文或中文的字母字元屬性由二進位數字 00001(十六進位中的 1)表示。
如果您的系統支援 wctype 函式,這些值將由 unicharset_extractor
自動設定,無需編輯 unicharset
檔案。在某些非常舊的系統(例如 Windows 95)上,必須手動編輯 unicharset
檔案,以新增這些屬性描述代碼。
最後兩欄表示指令碼類型(拉丁文、通用、希臘文、西里爾文、漢字、NULL)和給定語言的字元 ID 代碼。
請注意:每次產生 inttemp
、normproto
和 pffmtable
時,都必須重新產生 unicharset
檔案(即,當 box 檔案變更時,所有檔案都必須重新建立),因為它們必須同步。
font_properties(3.01 版新增)
3.01 版中訓練的新需求是 font_properties
檔案。此檔案的目的是提供字型樣式資訊,這些資訊將在辨識字型時出現在輸出中。font_properties
檔案是由 mftraining
的 -F filename
選項指定的文字檔案。
font_properties
檔案的每一行格式如下
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
其中 <fontname>
是命名字型的字串(不允許空格!),而 <italic>
、<bold>
、<fixed>
、<serif>
和 <fraktur>
都是簡單的 0 或 1 旗標,表示字型是否具有指定的屬性。
當執行 mftraining
時,每個 .tr 檔名必須與 font_properties
檔案中的條目相符,否則 mftraining
將會中止。在某個時間點,可能在 3.01 版發布之前,此匹配要求可能會轉移到 .tr 檔案本身中的字體名稱。 .tr 檔案的名稱可以是 fontname.tr
或 [lang].[fontname].exp[num].tr
。
範例
font_properties
檔案
timesitalic 1 0 0 1 0
shapeclustering -F font_properties -U unicharset eng.timesitalic.exp0.tr
mftraining -F font_properties -U unicharset -O eng.unicharset eng.timesitalic.exp0.tr
請注意,在 3.03 版中,有一個預設的 font_properties
檔案,涵蓋了 3000 種字體(不一定準確),位於此儲存庫:https://github.com/tesseract-ocr/langdata。
分群
當所有訓練頁面的字元特徵都提取完成後,我們需要對它們進行分群,以建立原型。
字元形狀特徵可以使用 shapeclustering
、mftraining
和 cntraining
程式來進行分群
shapeclustering (3.02 版新增)
除了印度語言外,不應使用 shapeclustering
。
shapeclustering -F font_properties -U unicharset [lang].[fontname].exp[num].tr lang.fontname.exp1.tr ...
shapeclustering
會透過形狀分群建立主形狀表,並將其寫入名為 shapetable
的檔案。
mftraining
mftraining -F font_properties -U unicharset -O [lang].unicharset [lang].[fontname].exp[num].tr lang.fontname.exp1.tr ...
-U 檔案是上面由 unicharset_extractor
產生的 unicharset,而 lang.unicharset 是將提供給 combine_tessdata
的輸出 unicharset。
mftraining
將輸出另外兩個資料檔案:inttemp
(形狀原型)和 pffmtable
(每個字元預期的特徵數量)。在 3.00/3.01 版本中,此程式也會寫入第三個檔案,名為 Microfeat
,但它並未使用。後續版本不會產生此檔案。
注意:如果您沒有執行 shapeclustering
,mftraining
將會產生一個 shapetable
檔案。您必須將此 shapetable
包含在您的 traineddata 檔案中,無論是否使用了 shapeclustering
。
cntraining
cntraining [lang].[fontname].exp[num].tr lang.fontname.exp1.tr ...
這將輸出 normproto
資料檔案(字元正規化敏感度原型)。
字典資料(可選)
Tesseract 針對每種語言最多使用 8 個字典檔案。這些都是可選的,並且有助於 Tesseract 判斷不同可能字元組合的可能性。
其中七個檔案編碼為有向非循環詞圖 (DAWG),另一個檔案是純 UTF-8 文字檔案
名稱 | 類型 | 描述 |
---|---|---|
word-dawg | dawg | 從該語言的字典單字製作的 dawg。 |
freq-dawg | dawg | 從最常使用的單字製作的 dawg,這些單字會放入 word-dawg 中。 |
punc-dawg | dawg | 從單字周圍找到的標點符號模式製作的 dawg。 「單字」部分會被單個空格取代。 |
number-dawg | dawg | 從原本包含數字的符號製作的 dawg。每個數字都會被一個空格字元取代。 |
fixed-length-dawgs | dawg | 幾個不同固定長度的 dawg —— 對於像中文這樣的語言很有用。[自 3.03 版以來未使用] |
bigram-dawg | dawg | 單字雙連詞的 dawg,其中單字以空格分隔,且每個數字都被?取代。 |
unambig-dawg | dawg | 待辦:描述。 |
user-words | 文字 | 要新增至字典的額外單字清單。通常保留空白,由使用者在需要時新增;請參閱 tesseract(1)。 |
若要製作 DAWG 字典檔案,您首先需要您語言的單字列表。您可能會找到適合的字典檔案,作為拼字檢查器的單字列表基礎(例如 ispell、aspell 或 hunspell) - 請注意授權。單字列表格式為 UTF-8 文字檔案,每行一個單字。將單字列表分割為需要的集合,例如:常用單字和其他單字,然後使用 wordlist2dawg
來製作 DAWG 檔案
wordlist2dawg frequent_words_list [lang].freq-dawg [lang].unicharset
wordlist2dawg words_list [lang].word-dawg [lang].unicharset
對於從右到左 (RTL) 書寫的語言(如阿拉伯語和希伯來語),請在 wordlist2dawg
命令中新增 -r 1
。
其他選項可以在 wordlist2dawg 手冊頁中找到
注意: 如果組合的 traineddata 中包含字典檔案,則它必須包含至少一個條目。在 combine_tessdata
步驟中,不需要原本為空的字典檔案。
具有不尋常拼寫的單字應新增至字典檔案。不尋常的拼寫可能包括字母字元與標點符號或數字字元的混合。(例如 i18n、l10n、google.com、news.bbc.co.uk、io9.com、utf8、ucs2)
如果您需要字典單字列表的範例檔案,請使用 combine_tessdata 取消組合現有的語言資料檔案(例如 eng.traineddata),然後使用 dawg2wordlist 提取單字列表
最後一個檔案 (unicharambigs)
Tesseract 使用的最終資料檔案稱為 unicharambigs
。它描述了字元或字元集之間可能存在的歧義,並且是手動產生的。若要了解檔案格式,請查看以下範例
v1
2 ' ' 1 " 1
1 m 2 r n 0
3 i i i 1 m 0
第一行是版本識別碼。剩餘的行是索引標籤分隔的欄位,格式如下
<number of characters for match source> <tab> <characters for match source> <tab> <number of characters for match target> <tab> <characters for match target> <tab> <type indicator>
類型指示器 可能具有 以下值
值 | 類型 | 描述 |
---|---|---|
0 | 非強制性取代。這會通知 tesseract 將歧義視為分割搜尋的提示,如果用「目標」取代「來源」可以從非字典單字建立字典單字,則應該繼續工作。可以透過歧義轉換為另一個字典單字的字典單字,將不會用於訓練自適應分類器。 | |
1 | 強制性取代。這會通知 tesseract 一律使用「目標」字串取代比對到的「來源」。 |
範例行 | 說明 |
---|---|
2 ‘ ‘ 1 “ 1 | 每當看到 2 個連續的單引號 (‘) 時,都應該取代為雙引號 (“)。 |
1 m 2 r n 0 | 字元「rn」有時可能會被錯誤地辨識為「m」。 |
3 i i i 1 m 0 | 字元「m」有時可能會被錯誤地辨識為序列「iii」。 |
每個單獨的字元都必須包含在 unicharset 中。也就是說,使用的所有字元都必須是正在訓練的語言的一部分。
這些規則不是雙向的,因此如果您希望在偵測到「m」時考慮「rn」,反之亦然,則您需要為每個建立規則。
與訓練中使用的大多數其他檔案一樣,unicharambigs
檔案必須編碼為 UTF-8,並且必須以換行字元結尾。
unicharambigs
格式也在 unicharambigs(5) 手冊頁中描述。
unicharambigs
檔案也可能不存在。
整合所有檔案
這就是全部了!您現在需要做的就是將所有檔案(shapetable
、normproto
、inttemp
、pffmtable
)收集在一起,並使用 lang.
前綴重新命名,其中 lang 是您的語言的三個字母代碼,取自 http://en.wikipedia.org/wiki/List_of_ISO_639-2_codes,然後按如下方式對它們執行 combine_tessdata
combine_tessdata [lang].
注意:別忘了結尾的點!
產生的 lang.traineddata 會放在您的 tessdata 目錄中。然後,Tesseract(理論上)可以使用以下方式識別您的語言文字
tesseract image.tif output -l [lang]
(實際上,您可以使用任何字串作為語言代碼,但如果您希望其他人能夠輕鬆使用它,則使用 ISO 639 是最好的方法。)
可以在 手冊頁或其 原始碼的註解中找到 combine_tessdata
的更多選項。
您可以在第三方線上 Traineddata 檢查器中檢視 traineddata 檔案的某些內部結構。