图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

  由于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种不同字体样本进行测试:

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

3、使用jTessBoxEditor生成训练样本的的合并tif图片:

(1)打开jTessBoxEditor,选择Tools->Merge TIFF,进入训练样本所在文件夹,选中要参与训练的样本图片:

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

(2)点击 “打开” 后弹出保存对话框,选择保存在当前路径下,文件命名为 “zwp.test.exp0.tif” ,格式只有一种 “TIFF” 可选。

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

比如我们要训练自定义字库 zwp,字体名test,那么我们把图片文件命名为 zwp.test.exp0.tif

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

 

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

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

 

 

 

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

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

打开jTessBoxEditor点击Box Editor ->Open,打开步骤2中生成的“zwp.test.exp0.tif”,会自动关联到“zwp.test.exp0.box”文件,这两文件要求在同一目录下。调整完点击“save”保存修改。

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

 

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

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

 

8、生成字符集文件:

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

unicharset_extractor zwp.test.exp0.box

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

 

9、生成shape文件:

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

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

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

 

10、生成聚字符特征文件:

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

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

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

 

11、生成字符正常化特征文件:

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

cntraining zwp.test.exp0.tr

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

 

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

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

 

13、合并训练文件:

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

combine_tessdata zwp.

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

Log输出中的Offset 1、3、4、5、13这些项不是-1,表示新的语言包生成成功。

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

 

14、测试:

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

tesseract test.PNG test -l zwp

使用新训练的语言包进行文字识别后,会发现之前识别不出来的文字也可以识别出来了。

 

附:最终所有的生成文件:

图像文字识别(三):Tesseract4.0训练字库,提高正确识别率

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114743.html原文链接:https://javaforall.net

(1)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sql左连接出现重复数据「建议收藏」

    情况说明:只需左表数据,右表数据只作为条件存在,左表数据与右边有1:n关系,左连接出现重复数据原因分析:由于1:n关系,右边数据连接后处于隐藏状态(类似),实际上数据未重复,由于只显示左边数据,就形成了数据重复情况例:左表:右表:左连接且只需要左表数据:如果取右表数据,上面显示的结果就不算重复:解决方法:直接对数据进行DISTINCT求唯一值,…

    2022年4月17日
    38
  • Attributable_文件属性里没有自定义

    Attributable_文件属性里没有自定义在做项目的时候,用没人写的代码和看Android源码时,经常看attr.xml的使用,每次都不知道是什么意思,今天网上查了些资料,终于明白了,这里做一个笔记,方便以后使用这里与一个关于AttributeSet的应用场景:一个自定义控件的有些属性内容是随着外部条件而动态改变的,forexample:一个自定义的ListView控件,需要在底部添加一个View,而这个View在不同的模块使用

    2022年10月26日
    0
  • python中延时函数_python延时函数

    python中延时函数_python延时函数广告关闭腾讯云11.11云上盛惠,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!可以使用python的time模块来实现类似于c中的sleep函数作用代码如下:importtimedefsleep(mytime=‘’):time.sleep(mytime)printcallsleepsleep(5)#sleep5sprint‘sleepen…

    2022年6月17日
    56
  • idea运行缓慢_intellij idea运行不了

    idea运行缓慢_intellij idea运行不了一、设置jvm  1、由于默认的jvm太多,但是实际上可以用的比较少,我们可以这样进行设置,使用鼠标右键单击桌面上的IntelliJIDEA软件图标,选择“打开文件所在的位置”一栏  2、然后根据类型的排序,找到后缀为“vmoptions”的文件(注意和你的操作系统版本一致,32bit||64bit)  3、找到之后将他们打开,然后更改Xmx与Xms这…

    2022年9月3日
    2
  • python mysql 清空表数据

    python mysql 清空表数据mydb=mysql.connector.connect(user=user,password=pwd,host=‘127.0.0.1’,database=‘stock’)mycursor=mydb.cursor()mycursor=mydb.cursor()sql=‘truncatetablehistory’##清空#mycursor.execute…

    2022年6月12日
    96

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号