文章目录
- 附加
一、环境搭建
安装Tesseract-OCR自带下载中文字库进行识别!但是在实际使用识别效果不佳,
为了提高识别效果所以决定根据所需要的识别的内容训练字库!
字库的训练最好在Tesseract-OCR的安装目录下进行。
- 下载Tesseract-OCR引擎:详情请点击。
- jTessBoxEditor 下载:https://www.softpedia.com/get/Multimedia/Graphic/Graphic-Others/jTessBoxEditor.shtml
https://github.com/tesseract-ocr/tesseract/wiki/AddOnsjTessBoxEditorFX 2.0下载: https://dl.pconline.com.cn/download/1060986.html
解压: - 下载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 - 运行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训练中文字库
- 先把训练用样本图像准备好。
- 打开 jTessBoxEditor ,选择 Tools -> Merge TIFF,打开对话框,选择训练样本所在文件夹,并选中所有要参与训练的样本图片,注意对话框中“文件类型”的选取png
- 之后有打开对话框,输入“chi_my.font.exp0.tif”,格式为tiff。其中chi_my可改为自己定义。会生成chi_my.font.exp0.tif文件。
- 生成“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
- 打开 jTessBoxEditor ,点击 Box Editor -> Open,选择chi_my.font.exp0.tif文件。
- 调整识别错误的情况。尤其是图像,字符比较多的情况。
注意、修改后的保存需点击界面上charater后的标识为设置图标的button后,再点击save按钮。 - 创建字体特征文件
echo font 0 0 0 0 0>font_properties
会生成“font_properties” 文件。文件size显示为0字节。其实里面有‘“font 0 0 0 0 0”’内容。 - 训练
tesseract chi_my.font.exp0.tif chi_my.font.exp0 -l eng -psm 7 nobatch box.train
- 生成字符集文件
unicharset_extractor chi_my.font.exp0.box
生成 “unicharset” 文件。 - 生成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” 文件。
- 更名,合并训练文件
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文件。 - 将生成的 “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
鸣谢
自动训练3500常用汉字
官方字库:https://github.com/tesseract-ocr/tesseract/wiki/Data-Files#format-of-traineddata-files