tesseract4.0用自己的样本训练字体库

转载自:
原文链接:https://blog.csdn.net/whatday/article/details/38493551

由于tesseract的中文语言包“chi_sim”对中文手写字体或者环境比较复杂的图片,识别正确率不高,因此需要针对特定情况用自己的样本进行训练,提高识别率,通过训练,也可以形成自己的语言库。
步骤:

1、工具准备:

(1)官方文档:https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00

(2)Java虚拟机,由于jTessBoxEditor的运行依赖Java运行时环境,所以需要安装Java虚拟机。

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

(3)jTessBoxEditor2.0工具,用于调整图片上文字的内容和位置,

下载地址:https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/

安装包解压后双击里边的“jTessBoxEditor.jar”,或者双击该目录下的“train.bat”脚本文件,就可以打开该工具了。

2、样本图片准备:(进行训练的样本图片数量越多越好)
这里只准备2种不同字体样本进行测试:
在这里插入图片描述
在这里插入图片描述
3、使用jTessBoxEditor生成训练样本的的合并tif图片:

(1)打开jTessBoxEditor,选择Tools->Merge TIFF,进入训练样本所在文件夹,选中要参与训练的样本图片:
在这里插入图片描述
(2)点击 “打开” 后弹出保存对话框,选择保存在当前路径下,文件命名为 “zwp.test.exp0.tif” ,格式只有一种 “TIFF” 可选。

tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言,fontname是字体,num为自定义数字。

比如我们要训练自定义字库 zwp,字体名test,那么我们把图片文件命名为 zwp.test.exp0.tif
在这里插入图片描述
4、使用tesseract生成.box文件:

在上一步骤生成的“zwp.test.exp0.tif”文件所在目录下打开命令行程序,执行下面命令,执行完之后会生成zwp.test.exp0.box文件。

tesseract zwp.test.exp0.tif zwp.test.exp0 -l chi_sim --psm 7 batch.nochop makebox

在这里插入图片描述
其中,有关于–psm的训练参数,可在cmd中,tesseract --help-psm查询。

C:\Users\lei-pc>tesseract --help-psm

Page segmentation modes:
  0    Orientation and script detection (OSD) only.
  1    Automatic page segmentation with OSD.
  2    Automatic page segmentation, but no OSD, or OCR.
  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,
       bypassing hacks that are Tesseract-specific.

  0    方向和脚本检测(OSD)
  1    自动页面分割与OSD
  2    自动页面分割,但没有OSD,而是OCR。
  3    全自动页面分割,但没有OSD. (Default)
  4    假设有一列大小不同的文本.
  5    假设有一个垂直对齐的文本块.
  6    假设只有一个统一的文本块.
  7    将图像视为单个文本行.
  8    将图像看作一个单个词.
  9    将图像视为一个圆圈中的单个单词.
 10    将图像视为单个字符.
 11    Sparse text. 在没有特定顺序的情况下,尽可能多地查找文本.
 12    Sparse text with OSD.
 13    Raw line. 将图像视为单个文本行,绕过特定于tesseract的技巧。

5、使用jTessBoxEditor矫正.box文件的错误:

.box文件记录了每个字符在图片上的位置和识别出的内容,训练前需要使用jTessBoxEditor调整字符的位置和内容。

打开jTessBoxEditor点击Box Editor ->Open,打开步骤2中生成的“zwp.test.exp0.tif”,会自动关联到“zwp.test.exp0.box”文件,这两文件要求在同一目录下。调整完点击“save”保存修改。
在这里插入图片描述
6、生成font_properties文件:(该文件没有后缀名)

(1)执行命令,执行完之后,会在当前目录生成font_properties文件

echo test 0 0 0 0 0 >font_properties

(2)也可以手工新建一个名为font_properties的文本文件,输入内容 “test 0 0 0 0 0” 表示字体test的粗体、倾斜等共计5个属性。这里的“test”必须与“zwp.test.exp0.box”中的“test”名称一致。
7、使用tesseract生成.tr训练文件:

执行下面命令,执行完之后,会在当前目录生成zwp.test.exp0.tr文件。

tesseract zwp.test.exp0.tif zwp.test.exp0 nobatch box.train

在这里插入图片描述
8、生成字符集文件:

执行下面命令:执行完之后会在当前目录生成一个名为“unicharset”的文件。

unicharset_extractor zwp.test.exp0.box

在这里插入图片描述
9、生成shape文件:

执行下面命令,执行完之后,会生成 shapetable 和 zwp.unicharset 两个文件。

shapeclustering -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr

在这里插入图片描述
10、生成聚字符特征文件:

执行下面命令,会生成 inttemp、pffmtable、shapetable和zwp.unicharset四个文件。

mftraining -F font_properties -U unicharset -O zwp.unicharset zwp.test.exp0.tr

在这里插入图片描述
11、生成字符正常化特征文件:

执行下面命令,会生成 normproto 文件。

cntraining zwp.test.exp0.tr

在这里插入图片描述
12、文件重命名:

重新命名inttemp、pffmtable、shapetable和normproto这四个文件的名字为[lang].xxx。

这里修改为zwp.inttemp、zwp.pffmtable、zwp.shapetable和zwp.normproto

rename normproto zwp.normproto
rename inttemp zwp.inttemp
rename pffmtable zwp.pffmtable
rename shapetable zwp.shapetable

在这里插入图片描述
13、合并训练文件:

执行下面命令,会生成zwp.traineddata文件。

combine_tessdata zwp.

在这里插入图片描述
Log输出中的Offset 1、3、4、5、13这些项不是-1,表示新的语言包生成成功。

将生成的“zwp.traineddata”语言包文件复制到Tesseract-OCR 安装目录下的tessdata文件夹中,就可以使用训练生成的语言包进行图像文字识别了。

14、测试:

输入下面命令,-l后面为训练生成的语言包。

tesseract test.PNG test -l zwp

附:最终所有的生成文件:
附:最终所有的生成文件:
可以发现命令很多 很复杂,这样训练较少样本的字符可以。但耗时耗力,大多是重复性工作。都是命令行,因此可以写一个批处理文件 自动化训练字符。
请移步:

转载自:
原文链接:https://blog.csdn.net/whatday/article/details/38493551

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值