Tesseract-OCR 字库训练

一、环境搭建

安装Tesseract-OCR自带下载中文字库进行识别!但是在实际使用识别效果不佳,
为了提高识别效果所以决定根据所需要的识别的内容训练字库!
字库的训练最好在Tesseract-OCR的安装目录下进行。

  1. 下载Tesseract-OCR引擎:详情请点击

  2. jTessBoxEditor 下载:https://www.softpedia.com/get/Multimedia/Graphic/Graphic-Others/jTessBoxEditor.shtml
    https://github.com/tesseract-ocr/tesseract/wiki/AddOns
    jTessBoxEditorFX 2.0下载: https://dl.pconline.com.cn/download/1060986.html
    解压:
    在这里插入图片描述

  3. 下载jdk-8u201-windows-x64.exe,并安装JRE环境。(jTessBoxEditor是用java开发的依赖于Java)
    jdk-8u201-windows-x64.exe下载地址(需要注册登录)
    https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
    在这里插入图片描述

  4. 运行train.bat,就可以打开jTessBoxEditor工具。
    在这里插入图片描述

二、用jTessBoxEditor训练数字

先将步骤整理如下:
下载chi_sim.traindata字库。要有这个才能识别中文。下好后,放到Tesseract-OCR项目的tessdata文件夹里面。

2.1 示例一:

2.1. 准备图片在这里插入图片描述
2.1.2 合并样本图片
执行train.bat启动jTessBoxEditorFX,选择菜单Tools->Merge TIFF 执行图片合并,选中上面将5张tif图片文件,合并为1个tif文件命名为:num.hand_num.exp0.tif,关闭jTessBoxEditorFX。

合成图片后,我们可以预览一下。查看刚才合成的图片。

合并后的文件命名格式:
【语法】: [lang]. [fontname].exp[ num].tif
lang为语言名称
fontname为字体名称
num为序号,可自定义。
在这里插入图片描述

2.1.3 生成box文件
终端进入合成的tif图片文件夹下执行(无特别申明都是在此目录下运行终端命令):
tesseract num.hand_num.exp0.tif num.hand_num.exp0 [-l eng --psm 7] batch.nochop makebox

说明:
以上 [ ]中的内容当返回Empty page的时候可以加上.
-psm 7 表示用单行文本识别,
-l eng 表示使用英语语言.
在这里插入图片描述

2.1.4 字符纠正
执行train.bat启动jTessBoxEditorFX,点击Box Editor,再点击Open选中之前生成的合并样本图片num.hand_num.exp0.tif,其对应的box文件会自动加载。
检查修改每页中的各个数字字符解析结果,有不正确的修改,完成后保存替换原box文件。
在这里插入图片描述
2.1.5 创建font_properties文件
创建字体属性文件font_properties,该文件为文本文件,但没有扩展名。
终端执行:echo hand_num 0 0 0 0 0 >font_properties

【语法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur>
fontname为字体名称,
italic为斜体,
bold为黑体字,
fixed为默认字体,
serif为衬线字体,
fraktur德文黑字体,
1和0代表有和无,精细区分时可使用。

在这里插入图片描述
2.1.6 生成训练文件
终端执行:tesseract num.hand_num.exp0.tif num.hand_num.exp0 -l eng --psm 7 nobatch box.train
运行后在目标文件夹生成文件num.hand_num.exp0.tr。

2.1.7 生成字符集文件
终端执行:unicharset_extractor num.hand_num.exp0.box
运行后在目标文件夹生成文件unicharset。

2.1.8 生成shape文件
终端执行:shapeclustering -F font_properties -U unicharset -O num.unicharset num.hand_num.exp0.tr
运行后在目标文件夹生成文件num.unicharset和shapetable。
在这里插入图片描述
2.1.9 生成聚集字符特征文件
终端执行:mftraining -F font_properties -U unicharset -O num.unicharset num.hand_num.exp0.tr
运行后在目标文件夹生成文件inttemp和pffmtable。

2.1.10 生成字符正常化特征文件
终端执行:cntraining num.hand_num.exp0.tr
运行后在目标文件夹生成文件normproto。

2.1.11 对特征文件更名,终端执行:
rename normproto hand_num.normproto
rename inttemp hand_num.inttemp
rename pffmtable hand_num.pffmtable
rename unicharset hand_num.unicharset
rename shapetable hand_num.shapetable

2.1.12 合并训练文件
终端执行:combine_tessdata hand_num.
注意命令中最后有个小数点,运行后在目标文件夹生成文件hand_num.traineddata。
在这里插入图片描述
2.1.13 将最终生成的训练数据文件hand_num.traineddata复制到Tesseract-OCR软件安装路径的tessdata目录下,以后Tesseract即可将其作为新的语言识别包使用。

随机从上面5张手写数字图片中截取数字,拼成由一串数字构成的手机号码digit.png,然后对比训练前后的识别效果。
在这里插入图片描述
不使用训练后的语言包,直接使用默认识别
tesseract digit.png digit1 识别结果:1390652649]

使用训练后的语言包来识别
tesseract digit.png digit2 -l hand_num 识别结果:13908526497

三、 用jTessBoxEditor训练中文字库

  1. 先把训练用样本图像准备好。

  2. 打开 jTessBoxEditor ,选择 Tools -> Merge TIFF,打开对话框,选择训练样本所在文件夹,并选中所有要参与训练的样本图片,注意对话框中“文件类型”的选取png

  3. 之后有打开对话框,输入“chi_my.font.exp0.tif”,格式为tiff。其中chi_my可改为自己定义。会生成chi_my.font.exp0.tif文件。

  4. 生成“chi_my.font.exp0.box” 文件;在命令行下执行
    tesseract chi_my.font.exp0.tif chi_my.font.exp0 -l chi_sim batch.nochop makebox
    tesseract chi_my.font.exp0.tif chi_my.font.exp0 -l eng batch.nochop makebox

  5. 打开 jTessBoxEditor ,点击 Box Editor -> Open,选择chi_my.font.exp0.tif文件。

  6. 调整识别错误的情况。尤其是图像,字符比较多的情况。
    注意、修改后的保存需点击界面上charater后的标识为设置图标的button后,再点击save按钮。

  7. 创建字体特征文件
    echo font 0 0 0 0 0>font_properties
    会生成“font_properties” 文件。文件size显示为0字节。其实里面有‘“font 0 0 0 0 0”’内容。

  8. 训练
    tesseract chi_my.font.exp0.tif chi_my.font.exp0 -l eng -psm 7 nobatch box.train

  9. 生成字符集文件
    unicharset_extractor chi_my.font.exp0.box
    生成 “unicharset” 文件。

  10. 生成shape文件,聚集字符特征文件,字符正常化特征文件等四个文件。

    • 命令 shapeclustering -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
      生成 “shapetable”“inttemp”“pffmtable” 文件。
    • 命令 mftraining -F font_properties -U unicharset -O langyp.unicharset langyp.fontyp.exp0.tr
      生成 “pinyin.unicharset” 文件。
    • 命令 cntraining langyp.fontyp.exp0.tr
      生成 “normproto” 文件。
  11. 更名,合并训练文件
    rename normproto langyp.normproto
    rename inttemp langyp.inttemp
    rename pffmtable langyp.pffmtable
    rename unicharset langyp.unicharset
    rename shapetable langyp.shapetable
    合并训练文件,
    combine_tessdata langyp.
    生成langyp.traineddata文件。

  12. 将生成的 “langyp.traineddata” 语言包文件拷贝到tesseract的tessdata 目录下,
    就可以用它来进行中文字符识别了。

附加

自动化字库训练脚本

待续

实例:
G:\Program Files (x86)\jTessBoxEditorFX\samples\pinyin>unicharset_extractor pinyin.font.exp0.box
Extracting unicharset from pinyin.font.exp0.box
Wrote unicharset file ./unicharset.
G:\Program Files (x86)\jTessBoxEditorFX\samples\pinyin>shapeclustering -F font_properties -U unicharset -O pinyin.unicharset pinyin.font.exp0.tr
Reading pinyin.font.exp0.tr …
G:\Program Files (x86)\jTessBoxEditorFX\samples\pinyin>mftraining -F font_properties -U unicharset -O pinyin.unicharset pinyin.font.exp0.tr
Read shape table shapetable of 27 shapes
G:\Program Files (x86)\jTessBoxEditorFX\samples\pinyin>cntraining pinyin.font.exp0.tr
Reading pinyin.font.exp0.tr …
Clustering …

G:\Program Files (x86)\jTessBoxEditorFX\samples\pinyin>combine_tessdata pinyin.
Combining tessdata files

鸣谢
https://www.cnblogs.com/zhongtang/p/5555950.html
自动训练3500常用汉字:https://blog.csdn.net/woaipangruimao/article/details/78741022
https://blog.csdn.net/duanshao/article/details/79835651
https://blog.csdn.net/woaipangruimao/article/details/78685727
http://www.cnblogs.com/wzben/p/5930538.html

https://blog.csdn.net/sylsjane/article/details/83751297
中文训练:https://www.cnblogs.com/asker009/p/11119005.html
官方字库:https://github.com/tesseract-ocr/tesseract/wiki/Data-Files#format-of-traineddata-files

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SongpingWang

你的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值