最近在研究ocr,网上查了很多关于tesseract帖子,大多数都是一篇文章复制粘贴,对于一个初入者没有任何帮助,本文以最全最细的角度,按着步骤包上手
1.安装tesseract5.0版本
2.配置tesserac环境变量
3.jTessBoxEditor(需要java环境)
很多博客已有详细教程,不再赘述,本文以训练为主
最终文件目录:
–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为文件名字,根据自己实际情况替换
代码中不能包含回车
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 = 原始行。将图像视为单行文本、
注意:box坐标框的范围5.0是从单个文字改成一整行,需要以一行作为矫正,不是4的时候拆成一个个框,不然会无限循环打印Compute CTC targets failed! 又浪费了训练时间
具体官方说明:https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00
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:中文语言库(可替换自己的语言库)
从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 后续可替换自己的自定义字体
名称为:znzd.normal.exp0.list.text(可根据之前tif取名的名字命名)
内容: E:\xxx\znzd.normal.exp0.lstmf(第三步自己生成的LSTMF文件路径)
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终止
如果一切配置成功,训练会持续一段时间请耐心等待
训练完成后合并结果.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
把新语言traineddata文件放入\tesseract\tessdata文件夹下
tesseract znzd.normal.exp1.tif result -l znzd
#tesseract 图片名称 生成的结果文件的名称 -l 新语言名称