java tessdata训练_Tesseract训练中文字体识别
注:目前僅說(shuō)明windows下的情況
前言
網(wǎng)上已經(jīng)有大量的tesseract的識(shí)別教程,但是主要有兩個(gè)缺點(diǎn):
大多數(shù)比較老,有部分內(nèi)容已經(jīng)不適用。
大部分只是就英文的訓(xùn)練進(jìn)行探索,很少針對(duì)中文的訓(xùn)練。
接下來(lái)盡可能詳細(xì)的介紹自己tesseract訓(xùn)練中文識(shí)別的經(jīng)驗(yàn)。
本文中使用的tesseract版本為3.05;
為什么用3.05呢?
從官方文檔上看4.0版本(windows版本于2017年1月30號(hào)發(fā)布)顯著的提高了識(shí)別率,同時(shí)也加大了性能的消耗。理論上我是應(yīng)該用4.0。但這不是重點(diǎn)。重點(diǎn)是有windows的版本有詭異的bug! 花了好久沒(méi)有解決。
不過(guò)還好,4.0支持3.05版本的所有語(yǔ)法。換而言之,下面的所有內(nèi)容在4.0都是可以用的。
工具準(zhǔn)備
安裝過(guò)程
點(diǎn)擊下一步
勾選上同意,然后點(diǎn)擊下一步
點(diǎn)擊下一步
既然是要訓(xùn)練中文,記得勾選 additional language data
找到中文簡(jiǎn)體和中文繁體,按需勾選,然后點(diǎn)下一步
可以先不勾選,因?yàn)檫@樣直接下載語(yǔ)言的包實(shí)在太慢。可以從網(wǎng)頁(yè)上直接下載語(yǔ)言包,然后等程序安裝好后,放入安裝目錄下tessdata目錄下面
目錄。。畢竟是你的電腦,隨便選,你開(kāi)心就好,然后點(diǎn)下一步
點(diǎn)擊install
安裝完畢。
字體訓(xùn)練
我準(zhǔn)備了一份含漢語(yǔ)7000字和大小寫(xiě)英文字母和數(shù)字的文檔.如果你需要訓(xùn)練所有中文的話,請(qǐng)將所有docx文件內(nèi)所有字改成你要訓(xùn)練的字體。然后轉(zhuǎn)化成tif格式的圖片。
步驟(轉(zhuǎn)自tesseract的github)
Prepare training text.
準(zhǔn)備你的訓(xùn)練文本
Render text to image + box file. (Or create hand-made box files for existing image data.)
將文本轉(zhuǎn)為image+box文件.(如果你已經(jīng)有image文件的話,只需要手動(dòng)生成box文件)
Make unicharset file.
生成unicharset文件
Optionally make dictionary data.
有選擇性的生成字典數(shù)據(jù)
Run tesseract to process image + box file to make training data set.
運(yùn)行tesseract來(lái)處理之前的image+box文件生成一個(gè)訓(xùn)練數(shù)據(jù)集合
Run training on training data set.
在訓(xùn)練數(shù)據(jù)集合的基礎(chǔ)上進(jìn)行訓(xùn)練
Combine data files.
合并數(shù)據(jù)文件
下面所列的步驟其實(shí)稍有不同。
如果有多張圖片[可選]
如果是其他圖片格式,將其轉(zhuǎn)為tif格式。附上一個(gè)在線地址
使用之前安裝jTessBoxEditor工具將多張圖片合并為一張(菜單欄 Tools → Merge TIFF)。并按照格式 [lang].[fontname].exp[num] 重命名合并后的文件,這里我命名為 chi.fangzheng.exp0.tif。
為了方便下文中輸入路徑,在本文中將改好的tif圖拷貝至tesseract安裝之后的目錄下。
步驟二:生成box文件
貼一張官網(wǎng)命令:
官方命令
輸入路徑和輸出路徑文件名(除了后綴)應(yīng)該保持一致。
因?yàn)槲覀兪且?xùn)練中文所以還需要加上-l chi_sim(l代表language chi_sim是放在tessdata目錄下中文簡(jiǎn)體字體名的前綴),實(shí)際命令如下所示
tesseract.exe chi.fangzheng.exp0.tif chi.fangzheng.exp0 -l chi_sim batch.nochop makebox
步驟二:校正box文件
打開(kāi)之前安裝的jTessBoxEditor,
點(diǎn)擊open,然后找到tif圖片文件
通過(guò)這部分區(qū)域的按鈕對(duì)識(shí)別結(jié)果進(jìn)行校正
校正完之后點(diǎn)擊保存
步驟三:生成unicharset文件
生成tr文件
使用剛才修改正確后的 box 文件,對(duì) Tesseract 進(jìn)行訓(xùn)練,生成 .tr 文件:
//tesseract.exe [tif圖片文件名] [生成的tr文件名] nobatch box.train
tesseract.exe chi.fangzheng.exp0.tif chi.fangzheng.exp0 nobatch box.train
生成Character集合
//unicharset_extractor.exe [box文件名]
unicharset_extractor.exe chi.fangzheng.exp0.box
如果有多個(gè)圖片的話,則需要合并生成1個(gè)Character集合,命令如下
//unicharset_extractor.exe [1個(gè)box文件名] [1個(gè)box文件名] .....
unicharset_extractor.exe chi.fangzheng.exp0.box chi.fangzheng.exp1.box
創(chuàng)建字體特征文件
定義字體特征文件,Tesseract-OCR 3.01 以上的版本在訓(xùn)練之前需要?jiǎng)?chuàng)建一個(gè)名稱為 font_properties 的字體特征文件。font_properties 不含有 BOM 頭,文件內(nèi)容格式如下:
//其中 fontname 為字體名稱,必須與 [lang].[fontname].exp[num].box 中的名稱保持一致。 、 、 、、 的取值為 1 或 0,表示字體是否具有這些屬性。
//本次示例
fangzheng 0 0 0 0 0
步驟五:生成字典數(shù)據(jù)
如果是單個(gè)依次輸入下面兩條命令,多個(gè)文件則輸入多個(gè)tr
mftraining.exe -F font_properties -U unicharset -O chi.unicharset chi.fangzheng.exp0.tr
//mftraining.exe -F font_properties -U unicharset -O chi.unicharset [第一個(gè)tr] [第二個(gè)]...
cntraining.exe chi.fangzheng.exp0.tr
//cntraining.exe [第一個(gè)tr] [第二個(gè)]...
接下來(lái)手工修改 Clustering 過(guò)程生成的 4 個(gè)文件(inttemp、pffmtable、normproto、shapetable)的名稱為 [lang].xxx。例如我這里改為 chi.inttemp、chi.pffmtable、chi.normproto、chi.shapetable。
步驟七:合并數(shù)據(jù)文件
生成語(yǔ)言文件:
combine_tessdata chi.
需確認(rèn)打印結(jié)果中的 Offset 1、3、4、5、13 這些項(xiàng)不是 -1。這樣,一個(gè)新的語(yǔ)言文件就生成了。
chi.traineddata 便是最終生成的語(yǔ)言文件,將生成的 chi.traineddata 文件拷貝到 tessdata 目錄下,就可以用它來(lái)進(jìn)行字符識(shí)別了。
我們可以用剛剛的tif文件來(lái)測(cè)試一下識(shí)別能力:
//tesseract [圖片文件名] [需要輸出的文本文檔的文件名] -l [識(shí)別的語(yǔ)言]
tesseract chi.fangzheng.exp0.tif out -l chi
總結(jié)
以上是生活随笔為你收集整理的java tessdata训练_Tesseract训练中文字体识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 2022年分享一些好用的内网穿透软件
- 下一篇: LVGL系列(四)概述 之 位置、尺寸和