记录我训练tesseract4.0时遇到的问题

一、创建培训数据


training/tesstrain.sh 

--fontlist 'font1' 'font2' #要训练的字体名称列表。

--fonts_dir /path/to/fonts   #字体文件的路径。

--lang LANG_CODE 

--linedata_only  #仅为训练生成训练数据。

--noextract_font_properties 

--langdata_dir /path/to/langdata # / langdata目录的路径。

 --tessdata_dir /path/to/tessdata  #指定现有的受训数据文件的位置,如果没有指定会从TESSDATA_PREFIX定义的路径中查找)

--output_dir ~/path/to/output #输出的训练数据文件的位置。

--wordlist  /path/to/wordlist file#排序的语言的单词列表 

--training_text /path/to/text file #要用于训练的文本。(如果 没有指定wordlist和trainingtext,tesseract会从langdata里查找)

还有一些其他的参数可以在这里看到。

1.字体

在使用tesstrain.sh创建训练数据的时候,必须先安装所需字体!!

所需要的字体可以在字体 tesseract/training/language-specific.sh 文件中看到,比如想知道训练中文字典的时候需要哪些字体,在这个文件中找到以下的代码(296行):

CHI_SIM_FONTS=( \

"AR PL UKai CN"\

"AR PL UMing Patched Light"\

"Arial Unicode MS"\

"Arial Unicode MS Bold"\

"WenQuanYi Zen Hei Medium"\

)

上面列出来的字体就是你系统中必须有的字体,不然在创建训练数据的时候会报无法加载字体的错误。

想要知道自己的系统里已有的字体可以使用text2image --fonts_dir /usr/share/fonts --list_available_fonts命令来查看。

上面的字体列表你可以删除其中的任一字体,也可以往里添加你想要的字体,如果添加了一种字体,比如SIMSUN(简体宋),还需要在langdata/font_properties文件中添加一行数据:SIMSUN 0 0 0 0 0(如果langdata/font_properties文件中没有关于SIMSUN的配置的话)

2.langdata文件

tesstrain.sh在培训过程中会使用到某些文件,比如 [lang] .training_text (要训练的文本,也可以通过--training_text /路径/文件.txt指定)、[lang].wordlist等等都在langdata文件夹里,下载地址:https://github.com/tesseract-ocr/langdata

每个文件具体的意义可以在这里查看。

(其实我并不知道这个文件夹下的那些文件到底是不是必须的,官网上只说必须有[lang].training_text这个文件,其他文件有没有不知道会不会有什么影响阿。。还有就是如果我自己指定了一个--training_text,那是不是连[lang].training_text都可以不要了。。)

3.训练文本太大

在training/tesstrain_utils.sh文件中,代码215行:common_args+=" --outputbase=${outbase} --max_pages=3"

--max_pages=3 限制了在创建训练数据的时候最多只能生成3页的文档图像,如果训练文本很大,超过3页的内容就会没了,可以自己修改这个值,例如修改为--max_pages=100。

(似乎有一个设置图像大小的参数,暂时想不起来了)

还有一次在训练的时候,成功的生成训练数据后开始训练的时候报了一个图片尺寸太大什么的错误,记不得了。。原因是训练的文本每行的文字太多,行宽太长,截成几行就好了。。

4.字典

在创建训练数据的时候,如果还没有从官网上下载任何字典,那么会报一个

Failed loading language 'eng'

Tesseract couldn't load any languages!

Could not initialize tesseract.

的错误(虽然我训练的是中文)。。似乎是eng.traineddata这个字典是默认需要加载的。。反正下一个就好了。。

还有一个 Failed loading language 'chi_sim_vert'

这。。。我看了一下。。。langdata/chi_sim/chi_sim.config这个文件打开,第一句:tessedit_load_sublangs chi_sim_vert

如果把这一句注释掉了,就没问题了。。或者你再下一个chi_sim_vert.traineddata。。

所以问题又来了。。为什么要加载这个字典。。

5.乱七八糟的提示

在创建训练文本的时候还会有很多不是很明白的提示,虽然看上去好像不影响(因为并没有因为这些提示而停止创建),但心里很方。。

比如:

Fontconfig error: line 1: no element found

Fontconfig error: Cannot load default config file

这个好像是最近刚跑出来的(之前没注意过。。),不知道是为什么。。

还有:

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

之类的。。似乎没有什么影响。。

好了,创建数据这个步骤就到这里,进行下一步。

二、Training From Scratch


开心,可以开始训练了!!

先是按照官网上的教程训练了英文,过程和结果与官网的差不多,然后就想试着去训练中文。

结果!!!!中文的训练效果极差!!!!同样的训练数据比官方的中文字典差的不知道哪里去了!!!

命令:

mkdir -p ~/tesstutorial/chisimoutput

training/lstmtraining --debug_interval 100 \ 

(使用这个参数要先构建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次后发现,非常的差!!!无敌的差!!!

因为中文的训练样本字符比较多,我想可能是训练的次数太少所以效果才太差,

所以我就把 --max_iterations 改成了--target_error_rate 0.01让它继续训练

然后在迭代了13万次之后,效果依旧非常的差。。而且花费的时间非常的多。。所以我放弃了。。放弃了。。弃了。。了。。

然后在tesseract群里面看见 有人说训练了250W次效果都比官方的差很多,所以不要纠结的去开启新的篇章吧。

三、Fine Tuning


Fine tuning 训练就是从现有的训练语言开始,训练特定的附加数据。

你可能感兴趣的:(记录我训练tesseract4.0时遇到的问题)