全网最全最细Tesseract-OCR 5.0LSTM训练

最近在研究ocr,网上查了很多关于tesseract帖子,大多数都是一篇文章复制粘贴,对于一个初入者没有任何帮助,本文以最全最细的角度,按着步骤包上手

准备工作

1.安装tesseract5.0版本

2.配置tesserac环境变量

3.jTessBoxEditor(需要java环境)

很多博客已有详细教程,不再赘述,本文以训练为主

最终文件目录:

全网最全最细Tesseract-OCR 5.0LSTM训练_第1张图片

–tif 需要训练的tif文件

–lstmf 后文会讲到生成的方式

–txt 后文会讲到生成的方式

–box 后文会讲到生成的方式

–lstm 后文会讲到生成的方式

–traineddata 简体中文包后文会有下载方式

–output 文件夹存放训练内容

规范

命名:按照官方的命名规范,不然会出现不明问题

tif文件命名格式[lang].>[fontname].exp[num].tif

tif命名规则:lang为语言名称,fontname为字体名称,num为图片序号,方便记录训练样本;

例本次需要训练自定义字库znzd、字体名normal,则命名为znzd.normal.exp0.tif

特别注意:5.0语法是和4.0有区别的

后文都以znzd.normal.exp0为文件名字,根据自己实际情况替换

代码中不能包含回车

1.生成.box文件

tesseract znzd.normal.exp0.tif znzd.normal.exp0 -l chi_sim --psm 6 lstmbox

语法: tesseract [tif文件名字] [生成文件名(一般情况与tif名字一样注意没有后缀)] -l [语言库] --psm [psm值] lstmbox

–chi_sim:中文语言库(可替换自己的语言库)

psm

0 = Orientation and script detection (OSD) only.

1 = Automatic page segmentation with OSD.

2 = Automatic page segmentation, but no OSD, or OCR. (not implemented)

3 = Fully automatic page segmentation, but no OSD. (Default)

4 = Assume a single column of text of variable sizes.

5 = Assume a single uniform block of vertically aligned text.

6 = Assume a single uniform block of text.

7 = Treat the image as a single text line.

8 = Treat the image as a single word.

9 = Treat the image as a single word in a circle.

10 = Treat the image as a single character.

11 = Sparse text. Find as much text as possible in no particular order.

12 = Sparse text with OSD.

13 = Raw line. Treat the image as a single text line

中文翻译

0 = 仅方向和脚本检测 (OSD)。

1 = 自动页面分割,带 OSD。

2 = 自动页面分割,但无 OSD 或 OCR。(未执行)

3 = 完全自动页面分割,但无 OSD。(默认值)

4 = 假设一列文字大小可变。

5 = 假定垂直对齐的单个统一文本块。

6 = 假定单个统一的文本块。

7 = 将图像视为单一文本行。

8 = 将图像视为单个单词。

9 = 将图像视为圆圈中的单个单词。

10 = 将图像视为单个字符。

11 = 文本稀疏。不按特定顺序查找尽可能多的文本。

12 = 带 OSD 的稀疏文本。

13 = 原始行。将图像视为单行文本、

2.jTessBoxEditor矫正

注意:box坐标框的范围5.0是从单个文字改成一整行,需要以一行作为矫正,不是4的时候拆成一个个框,不然会无限循环打印Compute CTC targets failed! 又浪费了训练时间

具体官方说明:https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00

3.生成LSTMF文件

tesseract znzd.normal.exp0.tif znzd.normal.exp0 -l chi_sim --psm 6 lstm.train

语法: tesseract [tif文件名] [生成文件名(一般情况与tif名字一样注意没有后缀)] -l [语言库] --psm [psm值] lstm.train

–chi_sim:中文语言库(可替换自己的语言库)

4.提取LSTM文件

从https://github.com/tesseract-ocr/tessdata_best下载所需语言的.traineddataw文件,放入同级文件夹,此为chi_sim语言(第一次用tesseract\tessdata目录下的chi_sim.traineddata报错了,找了很多博客 建议去/tessdata_best下载)

combine_tessdata -e chi_sim.traineddata chi_sim.lstm
#此例是下载后文件方在根目录下执行 所以没带路径 也能是 -e E:\xx\chi_sim.traineddata

语法: combine_tessdata -e [语言.traineddata] [文件名称(也可以路径+文件名称)]

初次可以用chi_sim 后续可替换自己的自定义字体

5.创建txt文件

名称为:znzd.normal.exp0.list.text(可根据之前tif取名的名字命名)

内容: E:\xxx\znzd.normal.exp0.lstmf(第三步自己生成的LSTMF文件路径)

6.训练

lstmtraining   --model_output E:\xxx\output\  --continue_from E:\xxx\chi_sim.lstm  --traineddata   E:\xxx\chi_sim.traineddata --train_listfile  E:\xxx\znzd.normal.exp0.list.txt  --max_iterations 0     --target_error_rate 0.001

语法:

–model_output 模型训练输出的路径(模型训练文件,会自动生成output_checkpoint文件可以用于后期训练)

–continue_from 训练从哪里开始(可以是第四步提取的lstm文件路径。也可以是上次训练的output_checkpoint文件路径)

–train_listfile 第五步创建的TXT文件路径ch.simhei.exp0.list.txt文件路径

–traineddata .traineddata文件的路径(此例以chi_sim.traineddata)

–debug_interval 当值为-1时,训练结束,会显示训练的一些结果参数,此参数可略去

–max_iterations 指明训练遍历次数 最大是9000,0 表示无限迭代(类型:整数默认值:0)

–target_error_rate 0.01 训练至错误率低于0.01终止

如果一切配置成功,训练会持续一段时间请耐心等待

7.合并训练 生成.traineddata文件

训练完成后合并结果.traineddata

lstmtraining --stop_training --continue_from="E:\xxx\output\output_checkpoint" --traineddata="E:\xxx\chi_sim.traineddata" --model_output="E:\xxx\znzd.traineddata"

语法:

stop_training 默认要有

–continue_from 第6步model_output输出路径的output_checkpoint文件路径

–traineddata 已有.traineddata文件的路径

–model_output 输出训练好的语言包的路径 路径+语言包名.traineddata

8.查看识别结果

把新语言traineddata文件放入\tesseract\tessdata文件夹下

tesseract znzd.normal.exp1.tif result -l znzd
#tesseract 图片名称 生成的结果文件的名称 -l 新语言名称

你可能感兴趣的:(ocr,lstm,人工智能)