Train Tesseract LSTM with make on Windows

Train Tesseract LSTM methods Comparison

Train Tesseract LSTM with tesstrain.sh on Windows

How the makefile in tesstrain-win work

Win10 Tesseract4.1 LSTM training


Train Tesseract LSTM with make 在github上对应的项目为tesseract-ocr/tesstrain,该项目用命令行来实现LSTM的训练,功能强大,简洁易用,但是它仅支持Linux下运行。为了让该项目能在Windows中运行,我对其中的makefile和文件结构进行了一些改动,修改后的项目请参考tesstrain-win本文主要记录tesstrain-win的使用方法及其改造过程。

环境说明

1. win10 x64

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

本文使用的是源码编译的Tesseract4.1发布版,根据tesseract-ocr / tesstrain的说明,4.0以上的含训练工具的的版本均可以。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. python3.x

makefile中会用到Python的Pillow库进行图像处理,请确认相应版本成功安装。

4. Cygwin

windows下运行makefile需要借助于cygwin,安装方法请参考Install Cygwin on Win10 for makefile.

tesstrain-win文件说明

tesstrain-win项目中有data和old-ocrd两个文件夹以及若干文件,其大致结构如下图所示:

data

–data/foo-ground-truth/ocrd-testset.zip 

   ground-truth样本数据,解压在当前路径下即可进行训练测试;若训练自定义字库,则用自定义的ground truth替代该文件。

–data/Latin.unicharset

–data/radical-stroke.txt

   这两个文件在训练中要用到,不论训练何种语言的字库均可用,不需要更改,从tesseract-ocr/langdata_lstm该路径下下载得到。

–data/foo.numbers

–data/foo.punc

–data/foo.wordlist

   这三个文件应该与训练的语言相关,例如若基础字库为eng.traineddata,则该文件应该从tesseract-ocr/langdata_lstm/tree/master/eng下载,下载完成后要将相应文件重命名为待训练字库的名称。

old-ocrd:该文件夹是tesseract-ocr/tesstrain的前身,原名为OCR-D/ocrd-train。它的makefile与现有的tesseract-ocr/tesstrain的makefile差异较大,有参考价值,可以协助我们理解makefile工作原理。

makefile: 为了让其在windows中运行,做了相应的修改。

其他文件均与tesseract-ocr / tesstrain相同,这里不做说明。

tesstrain-win使用方法

训练ocrd-testset

在训练自己的数据库之前,建议先用github中示例ocrd-testset.zip进行训练测试,该数据库测试完成,表示您电脑中的各项训练工具均可以正常使用。因此,我们接下来先以ocrd-testset.zip为例,说明tesstrain-win的使用方法。如果训练中遇到错误,可以到本文的《可能会遇到的错误及相应解决方案》小节先查看是否有您遇到的错误,可以参考解决。

1. 解压ocrd-testset.zip

tesstrain-win下载并解压缩之后,将./data/foo-ground-truth/ocrd-testset.zip 解压至./data/foo-ground-truth。

2. 以管理员身份运行命令提示符,进入tesstrain-win所在路径。

3.  运行make training


个人比较推荐运行make training  –trace,–trace可以在命令行输出makefile中的每一句命令,若出现错误,方便定位出错的位置和原因。

4. 训练完成命令行内容参考

如果不产生任何错误,ocrd-testset.zip在win10 64位 8G内存笔记本训练完成的时间约8小时,供参考。

训练自定义字库

1. 为字库命名

可以直接更改makefile中的第11行来命名:

或者在运行make training时命名

2. 准备基础字库(.traineddata)

若训练时未定义makefile中START_MODEL的值,那么本次训练将属于TRAINING FROM SCRATCH,例如ocrd-testset.zip的训练即属于此类型。TRAINING FROM SCRATCH不需要准备基础字库;若为START_MODEL赋值,例如START_MODEL=eng,那么本次训练则属于Fine-tune,那么我们需要从tessdata_best中下载eng.traineddata,放在data/tessdata文件夹中。

3. 更新data文件夹中的foo.numbers/foo.punc/foo.wordlist

这三个文件应该跟基础字库一致,例如若基础字库为eng,则从langdata_lstm/eng下载相应文件,并放在data文件夹中,然后为这三个文件重命名:New_Name.numbers/New_Name.punc/New_Name.wordlist。

4. 准备ground-truth

ground-truth由图像文件及其对应的文本文件组成。

图像必须为TIFF格式,后缀名可以是.tif/ .png/ .bin.png/ .nrm.png。

文本文件的名称与图像名称相同,内容是图像对应的文本,后缀名为.gt.txt。

图像与相应的文本均要求为单行文本。

gound-truth路径为:data/New_Name-ground-truth.

5. 以管理员身份运行命令提示符,进入tesstrain-win所在路径。

6.  运行make training

个人比较推荐运行make training  –trace,–trace可以在命令行输出makefile中的每一句命令,若出现错误,方便定位出错的位置和原因。

可能会遇到的错误及相应解决方案

在训练字库过程中可能会碰到各种各样的错误,来看看这里是否有你碰到的错误:

1. /bin/bash: python3: command not found

若您运行的是tesseract-ocr/tesstrain,可能会碰到此错误,将您的makefile中所有的python3,均修改为python。

修改原因:

在Windows10中,python3执行档在控制台程序中调用时名称为python.exe,在GUI程序中调用时名称为pythonw.exe,参考链接:bash-python3-command-not-found-windows-discord-py

2. UnicodeEncodeError: ‘gbk’ codec can’t encode character

运行OCR-D/ocrd-train的makefile时,会出现上述错误,旧版本的makefile调用python代码的程序是这样写的:

解决方案:添加PYTHONIOENCODING=utf-8

3. /bin/bash: ……/Microsoft/WindowsApps/python3: Permission denied

该错误参考链接:

“Permission Denied” trying to run Python on Windows 10

如何在Win10上管理应用程序执行别名

解决方案:

3.1 确保用户变量—>Path中,

……\AppData\Local\Programs\Python\Python36\

在%USERPROFILE%\AppData\Local\Microsoft\WindowsApps的上方,如下图所示:

3.2 通过“管理应用程序执行别名”禁用错误路径下的Python,操作步骤:

右键点击开始菜单—>设置—>应用—>应用和功能—>应用执行别名,关闭python.exe和python3.exe,如下图所示:


有的电脑只需要操作3.1就好,有的则需要3.1和3.2同时操作,我的电脑就需要两步同时操作。

4.command not found

/bin/bash: wget: command not found

/bin/bash: line 1: bc: command not found

请参考Install Cygwin on Win10 for makefile.,确认wget、bc已安装。

5.Failed to load any lstm-specific dictionaries for lang……

若使用tesseract-ocr/tesstrain训练,训练过程中不会出现此错误,在调用训练完成的字库进行识别时也可以正常识别,但会报出该警告。

该错误与data文件夹下后缀名分别是.wordlist/.numbers/.punc的三个文件有关。

[.wordlist]:系统单词列表语言模型。

[.numbers]:带有允许的数字模式。

[.punc]:单词周围允许使用标点符号。

tesseract-ocr/tesstrain中,上述三个文件的默认路径为$(OUTPUT_DIR)=data/$(MODEL_NAME),该路径下所有的文件均是训练过程中自动生成的。

若未为变量START_MODEL赋值,makefile并不会在该路径下生成任何相关文件;

若已为变量START_MODEL赋值,则makefile中的以下语句会执行:

该语句会将基础字库分解为多个文件,例如foo.lstm-number-dawg、foo.lstm-punc-dawg、foo.lstm-word-dawg等等文件,但是训练时需要的是.wordlist/.numbers/.punc文件。因此若使用tesseract-ocr/tesstrain训练,无论选择何种方式,调用训练完成的字库时,均会报出此警告。

目前最新版本的tesseract-ocr/tesstrain的makefile应该是有BUG的,tesstrain-win中makefile关于这个问题也暂未修正,使用了另外一种解决方案:修改了相关变量的路径,在相应路径下准备了.wordlist/.numbers/.punc文件,用tesstrain-win训练完成后调用时不会有此警告。

如果您想用tesseract-ocr/tesstrain训练,又想解决这个问题,可以在makefile中搜索WORDLIST_FILE/NUMBERS_FILE/PUNC_FILE这几个变量,参考tesstrain-win进行修改,自行准备.wordlist/.numbers/.punc文件放入相应路径即可。

理论上而言,可以根据实际需求自行对下载的.wordlist/.numbers/.punc进行微调,我没有尝试过,有兴趣的同学可以试试。

该问题点的相关链接Failed to load any lstm-specific dictionaries for lang xxx

6./bin/bash: merge_unicharsets: command not found

若为变量START_MODEL赋值,当前的训练类型为Fine_tune,会执行以下语句:

若您使用的tesseract4.1的编译的发布版本是参考Tesseract4.0+VS2017+win10源码编译攻略完成的,有可能会出现如下错误:

/bin/bash: merge_unicharsets: command not found

原因是这种方式编译的tesseract发布版本中,没有merge_unicharsets这个命令,具体原因与解决方案暂未知。

merge_unicharsets的作用是将基础字符集与Fine_tune时新增的字符集合并,将该语句改成如下语句,可以在merge_unicharsets命令缺失的情况下将训练执行完成,最终字库效果可能有差异。

修改之后的功能是用新增字符集作为训练的总字符集。

或者也可以用基础字库的字符集作为训练的总字符集。

本文到此结束,谢谢阅读,欢迎关注。


发表评论

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

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

Fork me on GitHub