一、創(chuàng)建培訓(xùn)數(shù)據(jù)
training/tesstrain.sh?
--fontlist 'font1' 'font2'?#要訓(xùn)練的字體名稱列表局冰。
--fonts_dir /path/to/fonts? ?#字體文件的路徑吊洼。
--lang LANG_CODE?
--linedata_only??#僅為訓(xùn)練生成訓(xùn)練數(shù)據(jù)训貌。
--noextract_font_properties?
--langdata_dir /path/to/langdata?# / langdata目錄的路徑。
?--tessdata_dir /path/to/tessdata??#指定現(xiàn)有的受訓(xùn)數(shù)據(jù)文件的位置冒窍,如果沒有指定會從TESSDATA_PREFIX定義的路徑中查找)
--output_dir ~/path/to/output?#輸出的訓(xùn)練數(shù)據(jù)文件的位置递沪。
--wordlist? /path/to/wordlist file#排序的語言的單詞列表?
--training_text /path/to/text file?#要用于訓(xùn)練的文本。(如果 沒有指定wordlist和trainingtext综液,tesseract會從langdata里查找)
還有一些其他的參數(shù)可以在這里看到款慨。
1.字體
在使用tesstrain.sh創(chuàng)建訓(xùn)練數(shù)據(jù)的時(shí)候,必須先安裝所需字體Cā樱调!
所需要的字體可以在字體 tesseract/training/language-specific.sh?文件中看到,比如想知道訓(xùn)練中文字典的時(shí)候需要哪些字體届良,在這個(gè)文件中找到以下的代碼(296行):
CHI_SIM_FONTS=( \
"AR PL UKai CN"\
"AR PL UMing Patched Light"\
"Arial Unicode MS"\
"Arial Unicode MS Bold"\
"WenQuanYi Zen Hei Medium"\
)
上面列出來的字體就是你系統(tǒng)中必須有的字體笆凌,不然在創(chuàng)建訓(xùn)練數(shù)據(jù)的時(shí)候會報(bào)無法加載字體的錯(cuò)誤。
想要知道自己的系統(tǒng)里已有的字體可以使用text2image --fonts_dir /usr/share/fonts --list_available_fonts命令來查看士葫。
上面的字體列表你可以刪除其中的任一字體乞而,也可以往里添加你想要的字體,如果添加了一種字體慢显,比如SIMSUN(簡體宋)爪模,還需要在langdata/font_properties文件中添加一行數(shù)據(jù):SIMSUN 0 0 0 0 0(如果langdata/font_properties文件中沒有關(guān)于SIMSUN的配置的話)
2.langdata文件
tesstrain.sh在培訓(xùn)過程中會使用到某些文件欠啤,比如 [lang] .training_text (要訓(xùn)練的文本,也可以通過--training_text /路徑/文件.txt指定)屋灌、[lang].wordlist等等都在langdata文件夾里洁段,下載地址:https://github.com/tesseract-ocr/langdata
每個(gè)文件具體的意義可以在這里查看。
(其實(shí)我并不知道這個(gè)文件夾下的那些文件到底是不是必須的共郭,官網(wǎng)上只說必須有[lang].training_text這個(gè)文件祠丝,其他文件有沒有不知道會不會有什么影響阿。除嘹。還有就是如果我自己指定了一個(gè)--training_text写半,那是不是連[lang].training_text都可以不要了。尉咕。)
3.訓(xùn)練文本太大
在training/tesstrain_utils.sh文件中叠蝇,代碼215行:common_args+=" --outputbase=${outbase} --max_pages=3"
--max_pages=3 限制了在創(chuàng)建訓(xùn)練數(shù)據(jù)的時(shí)候最多只能生成3頁的文檔圖像,如果訓(xùn)練文本很大年缎,超過3頁的內(nèi)容就會沒了悔捶,可以自己修改這個(gè)值,例如修改為--max_pages=100单芜。
(似乎有一個(gè)設(shè)置圖像大小的參數(shù)蜕该,暫時(shí)想不起來了)
還有一次在訓(xùn)練的時(shí)候,成功的生成訓(xùn)練數(shù)據(jù)后開始訓(xùn)練的時(shí)候報(bào)了一個(gè)圖片尺寸太大什么的錯(cuò)誤缓溅,記不得了蛇损。。原因是訓(xùn)練的文本每行的文字太多坛怪,行寬太長淤齐,截成幾行就好了。袜匿。
4.字典
在創(chuàng)建訓(xùn)練數(shù)據(jù)的時(shí)候更啄,如果還沒有從官網(wǎng)上下載任何字典,那么會報(bào)一個(gè)
Failed loading language 'eng'
Tesseract couldn't load any languages!
Could not initialize tesseract.
的錯(cuò)誤(雖然我訓(xùn)練的是中文)居灯。祭务。似乎是eng.traineddata這個(gè)字典是默認(rèn)需要加載的。怪嫌。反正下一個(gè)就好了义锥。。
還有一個(gè) Failed loading language 'chi_sim_vert'
這岩灭。拌倍。。我看了一下。柱恤。数初。langdata/chi_sim/chi_sim.config這個(gè)文件打開,第一句:tessedit_load_sublangs chi_sim_vert
如果把這一句注釋掉了梗顺,就沒問題了泡孩。∷掳或者你再下一個(gè)chi_sim_vert.traineddata仑鸥。。
所以問題又來了矗漾。锈候。為什么要加載這個(gè)字典薄料。敞贡。
5.亂七八糟的提示
在創(chuàng)建訓(xùn)練文本的時(shí)候還會有很多不是很明白的提示,雖然看上去好像不影響(因?yàn)椴]有因?yàn)檫@些提示而停止創(chuàng)建)摄职,但心里很方誊役。。
比如:
Fontconfig error: line 1: no element found
Fontconfig error: Cannot load default config file
這個(gè)好像是最近剛跑出來的(之前沒注意過谷市。蛔垢。),不知道是為什么迫悠。鹏漆。
還有:
Setting unichar properties
Other case a of A is not in unicharset
Other case t of T is not in unicharset?
........
Setting script properties
Warning: properties incomplete for index 727 = +
Warning: properties incomplete for index 808 = =
Warning: properties incomplete for index 956 = ,
Config file is optional, continuing...
Null char=2
之類的创泄。艺玲。似乎沒有什么影響。鞠抑。
好了饭聚,創(chuàng)建數(shù)據(jù)這個(gè)步驟就到這里,進(jìn)行下一步搁拙。
二秒梳、Training From Scratch
開心,可以開始訓(xùn)練了;佟酪碘!
先是按照官網(wǎng)上的教程訓(xùn)練了英文,過程和結(jié)果與官網(wǎng)的差不多盐茎,然后就想試著去訓(xùn)練中文兴垦。
結(jié)果!Mノ亍;犀忱!中文的訓(xùn)練效果極差!7龉亍R趸恪!同樣的訓(xùn)練數(shù)據(jù)比官方的中文字典差的不知道哪里去了=诨薄2笫!
命令:
mkdir -p ~/tesstutorial/chisimoutput
training/lstmtraining --debug_interval 100 \?
(使用這個(gè)參數(shù)要先構(gòu)建ScrollView.jar工具)
--traineddata ~/tesstutorial/chisimtrain/chi_sim/chi_sim.traineddata \
--net_spec '[1,48,0,1Ct3,3,16Mp3,3Lfys64Lfx96Lrx96Lfx512O1c1]' \
--model_output ~/tesstutorial/chisimoutput/base --learning_rate 20e-4 \
--train_listfile ~/tesstutorial/chisimtrain/chi_sim.training_files.txt \
--eval_listfile ~/tesstutorial/chisimeval/chi_sim.training_files.txt \
--max_iterations 5000 &>~/tesstutorial/chisimoutput/basetrain.log
迭代5000次后發(fā)現(xiàn)铜异,非常的差8缇蟆!揍庄!無敵的差E剌铩!蚂子!
因?yàn)橹形牡挠?xùn)練樣本字符比較多沃测,我想可能是訓(xùn)練的次數(shù)太少所以效果才太差,
所以我就把 --max_iterations 改成了--target_error_rate 0.01讓它繼續(xù)訓(xùn)練
然后在迭代了13萬次之后食茎,效果依舊非常的差蒂破。牲蜀。而且花費(fèi)的時(shí)間非常的多把沼。晴玖。所以我放棄了孔飒。鸦概。放棄了蒙挑。贰剥。棄了垢啼。抄伍。了艘刚。。
然后在tesseract群里面看見 有人說訓(xùn)練了250W次效果都比官方的差很多截珍,所以不要糾結(jié)的去開啟新的篇章吧攀甚。
三、Fine Tuning
Fine tuning 訓(xùn)練就是從現(xiàn)有的訓(xùn)練語言開始岗喉,訓(xùn)練特定的附加數(shù)據(jù)秋度。