【OCR】win10环境下Tesseract-OCR 4.0LSTM训练流程

本文使用tesseract 4.0 LSTM版本训练mnist数据集。
安装过程见此博客:https://blog.csdn.net/ayayayayo/article/details/107811559
训练步骤如下:

1. 下载mnist数据集,并处理数据生成.tif和.box文件。

本文使用Pytorch中的MNIST类进行数据下载,将10个数字拼接成一张tif图片用于后期合成输入Tesseract的tif,对于60000数据样本,总共生成6000张图片和一个.box文件。.box文件的格式如下:
在这里插入图片描述
其中从左到右分别代表:数字标签、左上角横坐标、左上角纵坐标、右下角横坐标、右下角纵坐标、数字所在页码。接下来利用 jTessBoxEditor合并之前生成的6000张tif图片为一个tif文件。这里用于lstm训练,每一个数据所在位置都标记为其所在的一整行。因此这些中间四个数字都是一样的。(我也不知道为啥这样,GitHub上有人提出了这个问题,让这么标记,我一开始单独标记每一个数字训练过程会出错)
打开下载的 jTessBoxEditor文件包,点击train.bat即可打开该工具。
点击Tool–MergeTIFF,全选所有6000张图片
在这里插入图片描述
注意全选图片后会弹出生成的tif文件保存路径选择框,在命名时要注意最好使用如下格式::<语言名.字体名.版本号>,例如我用的名称为num.mnist.exp0.tif。
图片数量过多生成时间可能会比较长,稍等片刻即可。
至此,用于Tesseract训练的文件以准备完毕。
在这里插入图片描述

2. 生成用于训练的lstmf文件

首先展示一下文件路径,以免后期造成路径混乱。
在这里插入图片描述
data: 为第一步生成的.tif和.box文件,在第一部中生成之后将其复制至该路径。
lstm: 保存从现有语言包中抽取的lstm文件
lstmf: 保存利用现有语言包生成的用于训练的lstmf文件
output:保存输出的断点文件、中间文件及新生成的模型
testfiles:测试图片文件夹。
traineddata:语言包所在文件
trainfiles: 第一步中6000张图片所在路径
num.test_files.txt: 保存着用于测试的lstmf文件所在路径。
num.training_files.txt: 保存着用于训练的lstmf文件所在路径。

下面开始训练。

tesseract data/num.mnist.exp2.tif lstmf/num.mnist.exp2 -l eng --psm 6 lstm.train

其中,data/num.mnist.exp2.tif为输入的tif文件所在路径, lstmf/num.mnist.exp2为生成的lstmf文件名称, /前是路径。-l eng 表示使用的语言包名称 --psm 6 为分页类型。

3. 从现有包中抽取lstm

combine_tessdata -e traineddata/eng.traineddata lstm/eng.lstm

traineddata/eng.traineddata为语言包名、lstm/eng.lstm为保存的文件名。

4. 创建TXT文件,里边的内容为.lstmf文件的绝对路径地址。

在这里插入图片描述

5. 训练

lstmtraining --debug_interval -1 --max_iterations 6000 --target_error_rate 0.01 --continue_from="F:\Python\****\train\lstm\eng.lstm"  --model_output="F:\Python\****\train\output\aug2\output" --train_listfile="F:\Python\****\train\num.training_files.txt" --traineddata="F:\Python\****\train\traineddata\eng.traineddata"  

训练参数意义:

–model_output 模型训练输出的路径
–continue_from 训练从哪里开始,这里指定从第4步中提取的eng.lstm文件。也可从之前训练生成的阶段文件output_checkpoint开始。
–train_listfile 指定上一步创建的chi_sim.training_files.txt文件路径。
–traineddata 第4步中下载的.traineddata文件的路径。
–debug_interval 当值为-1时,训练结束,会显示训练的一些结果参数,此参数可略去。
–max_iterations 指明训练遍历次数。也可以使用这个参数:–target_error_rate 0.01 训练至错误率低于0.01%终止。

6. 合并模型:

lstmtraining --stop_training --traineddata="F:\Python\****\train\traineddata\eng.traineddata" --continue_from="F:\Python\****\train\output\aug2\output_checkpoint"  --model_output="F:\Python\****\train\output\aug2\mnist_aug2.traineddata"

–stop_training 默认要有

–continue_from 上一步生成的output_checkpoint文件路径

–traineddata 第5步中下载的已有.traineddata文件的路径

–model_output chi.traineddata 输出的路径和文件名

7. 测试

有两种测试方式,一是利用测试集进行测试,二是将新生成的语言包导入安装路径进行实际的文字识别。
测试方式1:
首先,用与训练集相同的方式生成测试集的.lstmf文件

tesseract testfiles/num_test.mnist.exp0.tif lstmf/num_test.mnist.exp0 -l eng --psm 6 lstm.train

接着,创建txt文件。
在这里插入图片描述
最后进行测试。

lstmeval --model="F:\Python\****\train\output\aug2\mnist_aug2.traineddata" --eval_listfile="F:\Python\SGCC_OCR\train\num.test_files.txt"

–model : 为生成的语言包名称
–eval_listfile: 为刚刚创建的txt文件

测试方式2:
首先,将新生成的语言包复制到Tesseract-OCR根目录中的tessdata文件夹,
然后使用如下代码进行文字识别:

import pytesseract
from PIL import Image

img = Image.open('222.jpg')
img = img.convert('RGB')
print(pytesseract.image_to_string(img, lang='mnist_aug2'))

【遇到的问题】
训练时使用中文包chi_sim进行训练会出现系统内存溢出,直接退出程序,暂时未找到原因,欢迎各位大神解答。

参考:
https://blog.csdn.net/m0_37693841/article/details/105672637
https://blog.csdn.net/Hu_helloworld/article/details/100923215
https://blog.csdn.net/qq_30110069/article/details/98742701

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值