Train Tesseract LSTM with tesstrain.sh on Windows

Train Tesseract LSTM methods Comparison

Train Tesseract LSTM with make on Windows

How the makefile in tesstrain-win work

Win10 Tesseract4.1 LSTM training

tesstrain.sh是How to use the tools provided to train Tesseract 4.00举例用的训练工具,主要用于训练各类语言的新字体,来源于Tesseract源码(Tesseract/src/training)。经过验证,tesstrain.sh在Windows10下可用,本文介绍在Windows下使用tesstrain.sh训练新字体的步骤,文中使用的训练文件已上传至tesstrainsh-win

环境说明

1.  Win10 X64

本文在Win10+X64环境下已验证。

2. 源码编译的Tesseract4.1发布版

本文使用的是源码编译的Tesseract4.1发布版,Tesseract4.1源码编译的方法与Tesseract4.0类似,可以参考Tesseract4.0+VS2017+win10源码编译攻略。源码编译且安装完成后,训练用的相关工具也随之安装完成,无须其他额外操作。

这里给出我编译好的包含训练工具的Tesseract4.1的链接,需要的同学自取(The down load link of the compiled version 4.1 with training tools):https://drive.google.com/file/d/1ALfBsy5C2l9vJkJ_treAqCvcwS7cfoLX/view?usp=sharing

3. Git for Windows

Git for Windows安装完成后,将Git/bin所在路径添加到环境变量的Path路径中。

参考链接

How to use the tools provided to train Tesseract 4.00

Training/Fine Tuning Tesseract OCR LSTM for New Fonts(https://www.youtube.com/watch?v=TpD76k2HYms)

感谢原作者的分享。

tesstrainsh-win使用步骤

How to use the tools provided to train Tesseract 4.00的介绍中,tesstrain.sh需要结合combine_tessdata、lstmtraining 等训练工具,在命令行中分别键入相应命令来完成Tesseract LSTM的训练。本文介绍的tesstrainsh-win项目将所有必要的训练命令写入同一个.sh文件,大家根据自己的需求更改tesstrainDone.sh文件中相应的参数,运行该文件即可。建议先用tesstrainsh-win已准备好的相应文件进行训练测试,若训练成功,表示当前电脑的训练环境可用,然后再训练自己准备的字体以及相应的文件。

1. 准备工作

1.1 将待训练的字体文件拷贝到tesstrain/fonts路径下,tesstrain.sh支持同时训练多个字体文件。本文以Impact.ttf为例,字体文件路径为tesstrain/fonts/Impact.ttf。

1.2 将待训练的字体所属语言相关文件拷贝到tesstrainsh-win/langdata_lstm下。例如本文训练的字库属于英语,将langdata_lstm/eng该文件夹下所有文件下载并放在tesstrainsh-win/langdata_lstm/eng路径下。假如您需要训练简体中文,则在tesstrainsh-win/langdata_lstm路径下新建chi_sim文件夹,将langdata_lstm/chi_sim下所有文件下载并放在tesstrainsh-win/langdata_lstm/chi_sim路径下。

1.3 将待训练的字体的基础字库拷贝到路径tesstrainsh-win/tessdata下,本文该路径下的文件为tesstrainsh-win/tessdata/eng.traineddata,这里的.traineddata需要从github/tesseract-ocr/tessdata_best项目中下载。

1.4 将lstm.train拷贝至路径tesstrainsh-win/tessdata/configs下。该文件在tesseract的安装路径下C:/Program Files/tesseract/tessdata/configs。我在tesstrainsh-win中已准备好该文件,但我的是Tesseract4.1版本,如果您使用的是其他版本的训练工具,建议该文件版本也保持一致,在安装路径下找到该文件拷贝到路径tesstrainsh-win/tessdata/configs下覆盖现有文件即可。

1.5 tesstrainsh-win项目下的tesstrain.sh、tesstrain_utils.sh、language-specific.sh这三个文件是从Tesseract源码(Tesseract/src/training)拷贝而来,是Tesseract4.1的release版本。如果您使用的是其他版本的训练工具,建议这三个文件版本也保持一致。在源码路径下找到这三个文件并拷贝到路径tesstrainsh-win下覆盖现有文件即可。

1.6 从langdata_lstm下载radical-stroke.txt并拷贝至路径tesstrainsh-win/langdata_lstm下。我在tesstrainsh-win已准备好该文件,radical-stroke.txt已有2年未更新,目前有LSTM的Tesseract版本应该均通用。

tesstrainsh-win项目的文件结构如下图所示:

tesstrainsh-win file structure

2. 管理员身份打开命令提示符(cmd.exe),进入tesstrainsh-win所在路径。

3. sh tesstrainDone.sh

运行该命令时,可能会出现如下错误:

出现该错误的原因:

Unix和Mac OS的换行符是LF,而Windows的换行符是CRLF。为了处理该项特征,Windows环境下,Git在提交代码时自动把行结束符CRLF转换成LF,而在签出代码或者Git clone到本地时把LF转换成CRLF。

但是在用sh运行.sh文件时,要求换行符是LF。故出现此错误。

解决方案:

将tesstrainsh-win/langdata_lstm/lang路径下的文件换行符改为LF。Windows批量修改文件换行符的方法有很多种,大家可以各显神通。

我用的方法比较繁笨拙:

用NotePad++逐一打开待修改文件—>编辑—>文件格式转换—>转为Unix(LF)—>保存。

该命令运行完成的提示内容如下:

执行过程中,会在tesstrainsh-win路径下创建两个文件夹,分别是train和output。

train:训练过程中产生的中间文件均在此路径下,例如.box/.tif/.lstmf等等文件均在此文件夹中。

output:训练过程中产生的阶段性的checkpoint和效果最好的checkpoint,以及最终得到的Impact.traineddata均会放在此文件夹中。

4. sh eval.sh

这一步用lstmeval来评估训练结果,并不是新字体训练必须步骤,您可以忽略此步骤,或者通过其他方式来检验训练结果。

lstmeval命令的参数组合如下:

–model:用于设定语言模型文件名,可以是.lstm/.checkpoint/.traineddata文件。

如果是.lstm/.checkpoint文件,则可选参数–traineddata必须设定,且该文件是提供给lstmtraining训练的traineddata文件。

如果是 .traineddata文件,可选参数–traineddata不需要设定。

–eval_listfile:待评估文件列表。

用从tessdata_best下载的eng.traineddata评估时eval.sh中的代码

评估结果如下:

用新训练的字库的评估时eval.sh中的代码:

评估结果如下:

由评估结果可知,无论是Char error rate,还是Word error rate,训练得到的字库的错误率有明显下降。目前tesstrainsh-win设定的训练迭代次数为500,若将此迭代次数增加,错误率也会继续下降。

tesstrainsh-win参数说明

接下来,我们对tesstrainsh-win中tesstrainDone.sh所使用的命令及其参数进行说明。

下面我们逐一说明tesstrainDone.sh中所使用命令的参数意义。

tesstrain.sh参数意义说明

–fonts_dir:Path to font files

存放字体文件的路径。

–fontlist:A list of fontnames to train on.

待训练字体的名称列表,tesstrain.sh支持同时训练多个字体。Windows10环境下可选择的字体列表可用以下命令查询:

–lang:ISO 639 code.

待训练字体所属语言的编码。

–linedata_only:Only generate training data for lstmtraining.

仅生成供lstmtraining使用的训练数据。若未设定该参数,那么tesstrain.sh将生成非LSTM用的数据。

–langdata_dir :Path to tesseract/training/langdata directory.

若lang设定为eng,则该参数需要设定的是langdata_lstm/eng训练所需文件在本地电脑中的路径。

–tessdata_dir:Path to tesseract/tessdata directory.

指定现有训练数据文件字库的路径,训练过程中特征提取时用到。 如果未指定,将使用TESSDATA_PREFIX中定义的路径。

–save_box_tiff:Save box/tiff pairs along with lstmf files.

保存训练过程中生成的.box和.tiff文件。

–maxpages :Specify maximum pages to output (default:0=all).

限制training_text文件的大小,避免训练过程中占用电脑过多内存。

–output_dir:Location of output traineddata file.

训练过程中生成的阶段性文件。

上述参数是tesstrainDone.sh文件中tesstrain.sh所设定参数的说明,tesstrain.sh完整的参数说明可以打开tesstrainsh-win/tesstrain.sh进行查阅。

还有其他我们tesstrainDone.sh未用到的参数,在这里记录一下,后续可以根据具体需求进行设定。

–my_boxtiff_dir:Location of user specified box/tiff files.

使用者可以指定已准备好的box/tiff文件路径,但文件的命名格式需遵循${LANG_CODE}.${fontname}.exp${EXPOSURE}.box/tif。从代码上看,设置该参数之后,自己准备的.box/.tif文件与text2image生成的.box/.tif同时参与训练,并不是只训练.box/.tif文件。若需要仅仅训练.box/.tif文件,需要对tesstrain.sh进行改造,或者手动单独输入各项命令。

–training_text:Text to render and use for training.

指定待训练文字或字符的文件路径,若未指定,将从–langdata_dir设定路径寻找。该参数会赋值给text2image命令,相当于Win10 Tesseract4.1 LSTM trainingtext2image命令用到的–text参数。

简单的说,我们训练时可以自行准备并指定想要训练的字符集。

–wordlis:Word list for the language ordered by decreasing frequency.

使用语言按使用频率降序排列的单词表,可以根据需求自行准备。

–xsize:Specify width of output image (default:3600).

设定text2Image输出图像的宽度,默认为3600。

combine_tessdata

combine_tessdata完整的使用说明可以参考这里combine_tessdata。在tesstrainDone.sh用到此命令的作用是从eng.traineddata提取eng.lstm文件,供lstmtraining 训练使用。

lstmtraining

lstmtraining 完整的使用说明可以参考这里lstmtraining 。在tesstrainDone.sh用到此命令的作用与Win10 Tesseract4.1 LSTM training文中大致相同,这里不再详述。

本文到此结束,感谢阅读,谢谢支持。

Comments

  1. By Swapnil

    回复

    • By livezingy

      回复

      • By Swapnil

        回复

        • By livezingy

          回复

    • By livezingy

      回复

      • By Swapnil

        回复

        • By livezingy

          回复

        • By livezingy

          回复

          • By swapnil

  2. By livezingy

    回复

  3. By swapnil

    回复

    • By livezingy

      回复

      • By swapnil

        回复

        • By livezingy

          回复

          • By swapnil

          • By swapnil

      • By Ivan Smirnov

        回复

  4. By livezingy

    回复

    • By Swapnil

      回复

      • By livezingy

        回复

        • By Swapnil

          回复

  5. By livezingy

    回复

    • By Swapnil

      回复

  6. By livezingy

    回复

    • By Swapnil

      回复

  7. By livezingy

    回复

    • By Swapnil;

      回复

      • By livezingy

        回复

  8. By Ivan Smirnov

    回复

  9. By Ivan Smirnov

    回复

  10. By 愤怒的小马

    回复

    • By livezingy

      回复

      • By 愤怒的小马

        回复

      • By 愤怒的小马

        回复

  11. By livezingy

    回复

    • By 愤怒的小马

      回复

  12. By livezingy

    回复

    • By 愤怒的小马

      回复

  13. By livezingy

    回复

    • By 愤怒的小马

      回复

      • By 愤怒的小马

        回复

  14. By livezingy

    回复

    • By 愤怒的小马

      回复

      • By livezingy

        回复

  15. By livezingy

    回复

  16. By maswood

    回复

  17. By maswood

    回复

    • By livezingy

      回复

  18. By kilian

    回复

    • By livezingy

      回复

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Fork me on GitHub