Tesseract-OCR的训练与使用

参考http://blog.csdn.net/yasi_xi/article/details/8763385

概述:用4幅手写数字图片为训练样本,1幅为测试样本,按下面方法得Tesseract-OCR新字库num.traineddata。最终识别结果准确率较高。

一 前期准备

1.下载并安装tesseract-ocr

我下载的是tesseract-ocr-setup-3.02.02.exe,安装路径为D:\Program Files (x86)\Tesseract-OCR

尽量不安装在C盘,因为有写限制,不方便。

2.下载并解压jTessBoxEditor

jTessBoxEditor的作用:(1).将多幅图片合并成1幅.tif文件;(2).更正识别错误的字符。

jTessBoxEditor是用java写的,运行前还要安装jre(Java RuntimeEnvironment)。

3.准备训练图片和测试图片

    训练图片 1.jpg

    训练图片 2.jpg

   训练图片 3.jpg

    训练图片 4.jpg

    测试图片 test.jpg

4.合并训练图片

打开jTessBoxEditor.jar,点击菜单栏Tools→ Merge TIFF...

选择多幅训练图片(1.jpg、2.jpg、3.jpg、4.jpg),点击打开


输入.tif文件名“num.font.exp0”,点击保存,得num.font.exp0.tif,存放路径为D:\train

────────────────────────────────────────────────

二 Tesseract-OCR训练

1.打开cmd命令行,进入num.font.exp0.tif所在目录

D:
cd D:\train

2.生成box文件

得num.font.exp0.box。box文件为Tesseract识别出的字符结果及字符在图片中位置信息。在命令行输入:

tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox

注意:box文件命名有一定规则,不能随便乱取名字,命名格式为:

tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox

其中,lang为语言名称,fontname为字体名称,num为序号,3个都可以自定义。

注意:善用布局参数-psm,描述如下:

-psm N
    Set Tesseract to onlyrun a subset of layout analysis and assume a certain form of image.The options for N are:
    0 = Orientation andscript detection (OSD) only.
    1 = Automatic pagesegmentation with OSD.
    2 = Automatic pagesegmentation, but no OSD, or OCR.
    3 = Fully automatic pagesegmentation, but no OSD. (Default)
    4 = Assume a singlecolumn of text of variable sizes.
    5 = Assume a singleuniform block of vertically aligned text.
    6 = Assume a singleuniform block of text.
    7 = Treat the image as asingle text line.
    8 = Treat the image as asingle word.
    9 = Treat the image as asingle word in a circle.
    10 = Treat the image asa single character.
若图片为一行字符,可以在tesseract命令中添加"-psm 7";若图片为一个字符,可以在tesseract命令中添加"-psm 10";选择最合适的布局参数值,提高准确率。

3.识别结果校正

打开jTessBoxEditor.jar,点击工具栏Box Editor → Open,打开num.font.exp0.tif(必须将.box和.tif样本文件放在同一目录);

可以看到有些字符的识别结果不正确。校正每页图片中识别错误的字符Char,校正完成后Save退出。

注意:边框不能正确框住字符时,校正X、Y、Width、Weight的值。

也可以用记事本打开box文件校正字符,每个字符信息为“字符Char、方框左下角坐标、方框右上角坐标、在tif中序号”。修改速度更快。


4.新建字体特征文件

Tesseract-OCR3.01及以上版本在训练前要创建一个名称为font_properties的字体特征文件(新建.txt文件,去掉.txt后缀,命名为font_properties)。

用记事本打开font_properties文件,输入内容并保存:

font 0 0 0 0 0
注意:font_properties文件内容格式为:
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
其中,<fontname>为字体名称,必须与[lang].[fontname].exp[num].box中的[fontname]保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>表示字体属性,取值为0或1。上面全0表示不是粗体、斜体等,即这个字库的字体为普通字体。

5.生成字库文件

在命令行输入:

tesseract num.font.exp0.tif num.font.exp0 nobatch box.train  
 
unicharset_extractor num.font.exp0.box  
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr  
  
cntraining num.font.exp0.tr  

此时,在目录下生成了若干文件。把normproto、inttemp、pffmtable、shapetable这四个文件加上前缀"num.":

rename normproto num.normproto  
rename inttemp num.inttemp  
rename pffmtable num.pffmtable  
rename shapetable num.shapetable   

在命令行输入:

combine_tessdata num.  

注意:不要漏掉末尾的"."

cmd界面显示:


注意:必须确定Offset 1、3、4、5、13的数据都不是-1。否则,找出前面哪步出错或重做一遍。

得到num.traineddata,一个新的字库生成了。将num.traineddata复制到D:\Program Files (x86)\Tesseract-OCR\tessdata目录下,可以用来识别字符了。

────────────────────────────────────────────────

三 使用新字库识别图片

对比使用原字库和新字库的识别结果。在命令行输入:

tesseract test.jpg 1
tesseract test.jpg 2 -l num

其中,test.jpg为测试样本,要在当前目录下;1.txt、2.txt为识别结果。

识别结果:

   原字库识别结果

   新字库识别结果

新字库识别结果中,除了"9"识别为"7"外,其它字符都能正确识别。与原字库识别结果比较,正确率显然更高。

当然,训练样本更多时,正确率会进一步提高。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值