文章目录

一、环境搭建

安装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
    解压:
    Tesseract-OCR 字库训练_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​Tesseract-OCR 字库训练_html_02
  4. 运行train.bat,就可以打开jTessBoxEditor工具。
  5. Tesseract-OCR 字库训练_git_03

二、用jTessBoxEditor训练数字

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

2.1 示例一:

2.1. 准备图片

Tesseract-OCR 字库训练_git_04


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为序号,可自定义。

Tesseract-OCR 字库训练_目标文件_05

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​​ 表示使用英语语言.

Tesseract-OCR 字库训练_目标文件_06

2.1.4 字符纠正

执行train.bat启动jTessBoxEditorFX,点击Box Editor,再点击Open选中之前生成的合并样本图片​​num.hand_num.exp0.tif​​,其对应的box文件会自动加载。

检查修改每页中的各个数字字符解析结果,有不正确的修改,完成后保存替换原box文件。

Tesseract-OCR 字库训练_git_07


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代表有和无,精细区分时可使用。

Tesseract-OCR 字库训练_git_08


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。

Tesseract-OCR 字库训练_html_09


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。

Tesseract-OCR 字库训练_html_10


2.1.13 将最终生成的训练数据文件hand_num.traineddata复制到Tesseract-OCR软件安装路径的tessdata目录下,以后Tesseract即可将其作为新的语言识别包使用。随机从上面5张手写数字图片中截取数字,拼成由一串数字构成的手机号码digit.png,然后对比训练前后的识别效果。

Tesseract-OCR 字库训练_git_11


不使用训练后的语言包,直接使用默认识别

​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” 文件。
  1. 更名,合并训练文件
    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文件。
  2. 将生成的 “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