跳转到正文
Monster Cone
返回

Tesseract 5.0 LSTM 训练实战:优化字体并提升识别率

编辑页面

Tesseract 已经更新到了 5.0 版本,从 4.0 版本开始就可以使用 LSTM 模型进行训练了,相对于 4.0 版本之前的训练方法,通过 LSTM 模型训练更简单,准确率也更高。

训练准备工作

训练流程

生成 tif 文件

使用 jTessBoxEditor 工具生成 tif 文件。

image

在弹窗中选择你所有需要训练的图片,然后保存 tif 文件,文件名为你的字体名。例如 num.tif,我要生成的字体就是 num。

生成 box 文件

进入我们存放 num.tif 的文件夹,执行以下命令:

tesseract num.tif num -l eng --psm 6 lstmbox

我们将得到 num.box 文件,它的内容如下:

6 2 2 73 21 0
7 2 2 73 21 0
0 2 2 73 21 0
4 2 2 73 21 0
8 2 2 73 21 0
	 2 2 73 21 0
B 0 0 73 21 1
8 0 0 73 21 1
3 0 0 73 21 1
	 0 0 73 21 1
... 其他数据

以第一行数据为例: 6: 表示这张图片的第一个识别字符是 6 2 2 73 21: 表示这张图片的识别结果的盒坐标 0: 表示 tif 图片中的索引,也可以认为是第几张图片,从 0 开始计数

LSTM 的 box 文件跟之前的 box 文件区别在于它以整行来进行识别,所有识别的字符盒坐标都是整个识别结果的坐标,不是单个字符的盒坐标。

修正识别结果,生成 lstmf 训练模型

在修正完错误的识别结果后,执行以下命令生成 lstmf 文件:

tesseract num.tif num -l eng --psm 6 lstm.train

前面参数跟上一步相同,最后的 lstm.train 表示生成 lstmf 文件,我们将得到 num.lstmf 文件

提取已训练的 lstmf

LSTM 训练是在已完成训练模型基础上继续进行训练的方法,所以必须基于已完成训练的 lstmf。我们上面指定了 eng 语言进行识别,所以我们从 eng.traineddata 中提取 lstmf。

combine_tessdata -e eng.traineddata eng.lstm

我们将得到一个 eng.lstm 文件

traineddata 必须使用 tessdata_best 库中的字体。

开始训练

我们现在有 eng.lstm、eng.traineddata、num.lstmf 文件,将他们放在同一文件夹中,创建一个 output 文件夹,再创建一个 num.training_files.txt 文件,内容是 num.lstmf 文件的路径。

目录结构如下:

LSTM_train
│  eng.lstm
│  eng.traineddata
│  num.lstmf
│  num.training_files.txt
│
└─output

然后执行以下命令进行训练:

lstmtraining --debug_interval -1 --max_iterations 10000 --target_error_rate 0.01 --continue_from=".\eng.lstm" --model_output=".\output\output" --train_listfile=".\num.training_files.txt" --traineddata=".\eng.traineddata"

训练完成后我们将得到这样的结果

At iteration 100/100/100, Mean rms=3.709000%, delta=21.513000%, BCER train=69.175000%, BWER train=99.000000%, skip ratio=0.000000%,  New best BCER = 69.175000 wrote best model:.\output\output_69.175000_100_100.checkpoint wrote checkpoint.

Finished! Selected model with minimal training error rate (BCER) = 69.175

表示最佳训练模型是 output_69.175000_100_100.checkpoint,识别错误率为 69.175,这只是示例,所以错误率较高。

生成字体文件

我们将根据 output_69.175000_100_100.checkpoint 模型生成字体文件,使用以下命令:

lstmtraining --stop_training --traineddata=".\eng.traineddata" --model_output=".\num.traineddata" --continue_from=".\output\output_69.175000_100_100.checkpoint"

我们将在当前目录下得到 num.traineddata 文件,将它放在放在你 Tesseract-OCR 安装路径下的 tessdata 文件夹中,就可以使用这个字体了。


编辑页面
分享这篇文章:

上一篇
YOLOv8 自定义目标检测训练实战
下一篇
Windows 编译 PaddleOCR DLL:给 Python 调用的完整流程