赞
踩
最近工作需要,要对特定字体准确识别,用官方下载的eng识别库,错误率比较高,不能满足要求,所以就踏上了训练字库的征程,我说下我寻找的几种训练方法
注意: Tesseract-OCR 和 Tesseract 不是同一个东西
1. Tesseract-OCR手动训练,需要自己生成或收集样本图片,然后用jTessBoxEditor手动纠正识别错误的地方,然后敲命令生成各种文件,总体来说太慢太麻烦,容易出错,效果不佳
2. 仍然是Tesseract-OCR训练,这次智能化一点了,采用LSTM技术,可以自动训练,无需图片,无需手动纠错,但是要自己提供训练样本的TXT(要识别的文字,字符等),然后敲命令生成训练文件,但是效果不好,出错概率较大,不能满足生产需要。
3. 使用 Tesseract 训练,训练步骤和Tesseract-OCR的LSTM几乎一样,不同的是,样本采用官方提供的训练样本,而且有大佬提供的训练脚本,训练起来方便多了。效果也比前2种方法好,比官方自带的eng训练包好很多
总结:训练可能一样,但是训练样本同样重要,合理的样本能事半功倍
下面就只看最简单最有效的训练方法Tesseract LSTM训练(Windows)
1. 下载并编译Tesseract,本文末尾提供了已经编译好的Tesseract,大家可自行下载
2. 配置Tesseract/bin到环境变量
3. 下载训练需要的脚本程序,本文后面也会提供下载地址
4. 准备好你要训练的字体样本
5. 将待训练的字体文件拷贝到tesstrain/fonts路径下,tesstrain.sh支持同时训练多个字体文件。
6. 将待训练的字体所属语言相关文件拷贝到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路径下。
7. 将待训练的字体的基础字库拷贝到路径tesstrainsh-win/tessdata下,本文该路径下的文件为tesstrainsh-win/tessdata/eng.traineddata,这里的.traineddata需要从github/tesseract-ocr/tessdata_best项目中下载。
8. 将lstm.train拷贝至路径tesstrainsh-win/tessdata/configs下。该文件在tesseract的安装路径下C:/Program Files/tesseract/tessdata/configs。我在tesstrainsh-win中已准备好该文件,但我的是Tesseract4.1版本,如果您使用的是其他版本的训练工具,建议该文件版本也保持一致,在安装路径下找到该文件拷贝到路径tesstrainsh-win/tessdata/configs下覆盖现有文件即可。
9. tesstrainsh-win项目下的tesstrain.sh、tesstrain_utils.sh、language-specific.sh这三个文件是从Tesseract源码(Tesseract/src/training)拷贝而来,是Tesseract4.1的release版本。如果您使用的是其他版本的训练工具,建议这三个文件版本也保持一致。在源码路径下找到这三个文件并拷贝到路径tesstrainsh-win下覆盖现有文件即可。
10. 从langdata_lstm下载radical-stroke.txt并拷贝至路径tesstrainsh-win/langdata_lstm下。我在tesstrainsh-win已准备好该文件,radical-stroke.txt已有2年未更新,目前有LSTM的Tesseract版本应该均通用。
上面我们已经做好了准备工作,下来我们开始训练
1. 管理员身份打开命令提示符(cmd.exe),进入tesstrainsh-win所在路径。
2. 执行 sh tesstrainDone.sh,提示没有sh命令的请用git的命令窗口进行
然后就等待训练完成,训练也不需要太长时间
训练完成后,输出文件在output文件夹下面,也可以利用sh eval.sh命令进行训练结果评估
参考文献:Train Tesseract LSTM with tesstrain.sh on Windows - LiveZingy
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。