Tesseract3 训练(转载整合) 3.0.1
来源:互联网 发布:星海牌萨克斯淘宝网 编辑:程序博客网 时间:2024/06/05 13:35
文章一
本文在Google code的原文地址:https://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
要训练一个新的语言(自定义语言或者某种自然语言都可以)对应的traineddata文件,需要产生下列过程文件:
? lang.config
? lang.unicharset
?lang.unicharambigs
? lang.inttemp
? lang.pffmtable
? lang.normproto
? lang.punc-dawg
? lang.word-dawg
?lang.number-dawg
? lang.freq-dawg
在这八个文件中,红色标示的是必须的,其他的文件可选。当这些文件都准备好之后,再使用combine_tessdata进行最后的合并工作,生成lang.traineddata ,这个文件就是最终训练出来语言库。下面再来说一下如何产生上述的文件:
1、获取一个训练图片(*.tif)
2、产生相应的Box文件(*.box)
tesseractlang.fontname.number.tif lang.fontname.number batch.nochop makebox
这一步产生对应的lang.fontname.number.box 文件。
编辑该Box文件,校正识别出来的字符,如果单个字符识别成了两个或者多个字符,则要将这些行进行合并。前两项坐标取最小值,后两项坐标取最大值。
3、产生字符特征文件(*.tr)
tesseractlang.fontname.number.tif lang.fontname.number nobatch box.train
这一步产生三个文件:
(1) tesseract.log记录该步骤执行结果;
(2) lang.fontname.number.txt;
(3) lang.fontname.number.tr为特征文件。
4、计算字符集(unicharset)
unicharset_extractorlang.fontname.number_1.box
这一步产生字符集文件unicharset。
5、聚集字符特征(inttemp、pffmtable、normproto)
mftraining -Uunicharset -O lang.unicharset lang.fontname.number_1.tr
使用上一步产生的字符集文件unicharset,来生成当前新语言的字符集文件lang.unicharset。同时还会产生图形原型文件inttemp和每个字符所对应的字符特征数文件pffmtable。附带还会产生Microfeat文件,但是并没有用到该文件。
cntraininglang.fontname.number_1.tr
这一步产生字符形状正常化特征文件normproto。
6、产生字典文件(可选)
wordlist2dawgfrequent_words_list lang.freq-dawg lang.unicharset
wordlist2dawgwords_list lang.word-dawg lang.unicharset
frequent_words_list存放出现频率较高的字符;words_list存放所有字符集,至少一个字符。每个字符占一行。这样可以产生对应语言的字典文件了,共五个。
同样的方法产生punc-dawg文件(符号)、number-dawg文件(数字)以及user-words文件(用户自定义字符,通常为空)。
7、模糊字集校正文件(unicharambigs)(可选)
例如某unicharambigs文件内容如下:
2 ' ' 1 " 1
1 m 2 r n 0
3 i i i 1 m 0
每一行表示一条校正信息:第一个数字表示接下来有几个字符,第二个数字也表示后面跟有几个字符,最后一个数字表示校正动作的类型。
在这个例子中,第一行表示将连续的两个单引号(’)合并成一个双引号(”),最后的数字1表示强制转换;第二行、第三行表示一个字母m有可能被识别成两个字母’r’’n’,也有可能识别成连续三个字母’i’。
这个校正文件可以为空或者不存在。
8、合并训练文件(*.traineddata)
combine_tessdata lang.
这是最后一步,产生训练结果文件lang.traineddata。
注意这一步控制台执行的结果显示,有0-9项指示了文件的地址,这十个地址对应了文章前面所提到的十项所需要的文件。其中1、3、4、5这四项(从0开始排序)是必须的,缺少一项(显示为-1)都将不算成功。
9、测试
tesseract image.tifoutput -l lang
使用我们刚刚训练好的lang.traineddata文件来识别图形。识别出来的结果将会存放在output.txt文件中。
特别说明:
在训练的过程中,初次接触的人容易犯一些小错误,这些错误虽然小,但很可能让你陷入困惑和痛苦中。下面简单的罗列一下几点需要注意的地方:
(1)前面提到的lang可以被你想要的任何字符串代替,主要是为了给你训练的库取个名字。
(2)第二步产生的Box文件,需要手动修改,一定要以Unicode模式保存。修改的时候要注意方法和含义,详细的说明Google原文中有说明。
(3)第五步程序自动产生的文件是只有扩展名的,需要你自己手动将名字改成前缀一致。后面产生的可选文件也依照此法操作。
(4)所有的这些文件都准备好了之后,需要放到同一目录下,执行combine_tessdata进行合并的时候,注意要切换到文件所在的目录执行,否则将会报错,提示找不到文件。
(5)合并成功之后,要记得将训练好的文件(lang.traineddata)放到程序的tessdata子目录下,否则测试就会提示找不到语言库文件。
好了,到这里,基本上所有的问题都能解决了。
文章二:
Tesseract-OCR3.01语言库训练步骤
时间:2012-09-16 作者:佚名 出处:互联网
这些天由于工作需要,需要对验证码进行识别,当然验证码识别是老问题了,这里介绍了google开源项目Tesseract-OCR3.01对于验证码的识别。对于这款开源项目,要想彻底搞清楚这款开源OCR软件的来龙去脉,还得看Google开源项目的说明:http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3,这里就不罗嗦了。
我使用的是最新的3.01版本的。训练所需准备:
1.下载并安装3.01版本的tesseract。事实上并不需要安装这步骤,我下载的是压缩包版,解压即可,这里我解压到E:\Tesseract-ocr目录。
2.下载并安装jTessBoxEditor工具,这是一个Box file editors,用来编辑训练文件的,直接下载地址在这里。这个软件是用java写的,运行需要安装jre,好在这个东西比.net好装多了,怎么运行可以见它的readme文件。
3.当然也可以用cowboxer1.01.exe这个工具,他也是Box file编辑工具,在实际应用中,最好将这两个工具结合。
4.接下来要训练一个新的语言(自定义语言或者某种自然语言都可以)对应的traineddata文件,需要产生下列过程文件:
■cnlp.config
■cnlp.unicharset
■cnlp.unicharambigs
■cnlp.inttemp
■cnlp.pffmtable
■cnlp.normproto
■cnlp.punc-dawg
■cnlp.word-dawg
■cnlp.number-dawg
■cnlp.freq-dawg
在这八个文件中,红色标示的是必须的,其他的文件可选。当这些文件都准备好之后,再使用combine_tessdata进行最后的合并工作,生成cnlp.traineddata,这个文件就是最终训练出来语言库。
下面再来说一下如何产生上述的文件:
1、获取一个训练图片(*.tif)
这里采用铁道部购票系统中的验证码 [点击图片可在新窗口打开] ,将这个验证码下载后,用上文提到的jTessBoxEditor工具将其转换为tif文件,或者直接重命名也可以。名称为cnlp.lpft.exp0.tif,命名规则可以参照官网说明:
tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num]batch.nochop makebox。
2、产生相应的Box文件(*.box)
命令:tesseract.exe cnlp.lpft.exp0.tif cnlp.lpft.exp0 batch.nochop makebox
这一步产生对应的cnlp.lpft.exp0.box文件。该文件记录了tesseract识别出来的每一个字和其位置坐标。使用jTessBoxEditor编辑该Box文件,校正识别出来的字符,如果单个字符识别成了两个或者多个字符,则要将这些行进行合并。前两项坐标取最小值,后两项坐标取最大值。
备注:这时候要注意的是编辑box要和tif文件同在一个目录下,然后逐个校正文字,后保存。
如果使用cowboxer1.01,他会自动找到与之相对于的box文件。
3、产生字符特征文件(*.tr)
命令:tesseract cnlp.lpft.exp0.tif cnlp.lpft.exp0 nobatch box.train
这一步产生两个文件:
(1)cnlp.lpft.exp0.txt;
(2)cnlp.lpft.exp0.tr为特征文件。
可能会产生tesseract.log主要是记录该步骤执行结果的日志没啥用;
4、计算字符集(unicharset)
命令:unicharset_extractor cnlp.lpft.exp0.box
这一步产生字符集文件unicharset。
5、聚集字符特征(inttemp、pffmtable、normproto)
命令:mftraining -F font_properties -U unicharset cnlp.lpft.exp0.tr
这一步中的font_properties这个文件需要自己手动创建,windows下后缀为.txt 文件内容
<fontname><italic><bold><fixed><serif><fraktur>。
where<fontname>is a string naming the font (no spaces allowed!),and<italic>, <bold>, <fixed>, <serif> and<fraktur>are all simple 0 or 1 flags indicating whether the font has thenamed property.
官网有详细说明,大致意思就是你设置的字体。
这是我的font_properties内容:lpft 0 0 1 0 0。
根据上一步产生的字符集文件unicharset,来生成当前新语言的字符集文件mfunicharset。同时还会产生图形原型文件inttemp和每个字符所对应的字符特征数文件pffmtable。附带还会产生Microfeat文件,但是这个文件没啥用。
接下来使用命令cntraining.exe cnlp.lpft.exp0.tr,这一步产生字符形状正常化特征文件normproto。
到这里基本上所需的文件都形成了,下面就开始生成字典文件。
6、合并训练文件(*.traineddata)
此时,在目录下应该生成若干个文件了,把unicharset, inttemp, normproto, pffmtable这四个文件加上前缀“cnlp.“。然后使用命令:combine_tessdatacnlp.
将其合并成一个字典文件。这时会生成如下结果:
必须确定的是第2、4、5、6行的数据不是-1,那么一个新的字典就算生成了。
此时目录下“cnlp.traineddata”的文件拷贝到tesseract程序目录下的“tessdata”目录。
以后就可以使用该该字典来识别了。
7、测试
-----------------------------------------------
另一篇文章
-----------------------------------------------
前提条件:
tesseract-ocr3.00正常安装
训练步骤:
1.将要加入字典的图片转化为.tif格式的图片,文件的命名规则为[lang].[fontname].exp[num].tif,例如:eng.oms261.g4.tif,注意此处[fontname]命名不能相同。 再根据.tif格式图片生成.box文件,命令:
tesseracteng.oms261.g4.tif eng.oms261.g4 batch.nochop makebox
2.纠正.box文件中的错误,这里可以使用工具,有不同的工具,根据环境不同选择,Linux下推荐使用 moshPyTT(下载地址,http://code.google.com/p/moshpytt/)
3.根据生成的.box文件生成.tr文件。 命令:
tesseracteng.oms261.g4.tif eng.oms261.g4 nobatch box.train
4.生成unicharset文件。 命令:
unicharset_extractoreng.oms261.g4.box ...
注意:从5~9步骤必须在windows环境下进行,Linux下不支持,这是Tesseract-3.00的BUG.
5.生成 pffmtable, inttemp文件. 命令:
mftraining-U unicharset -O lang.unicharset eng.oms261.g4.tr
需要编写font_properties.txt(windows下加txt 无BOM保存)
mftraining -F font_properties.txt -Uunicharset -O lang.unicharset eng.oms261.g4.tr
6.生成 normproto文件。 命令 :
cntrainingeng.oms261.g4.tr ...
7.将pffmtable,inttemp,normproto文件加前缀,手动改名为: eng.pffmtable,eng.inttemp,eng.normproto, 前缀名与前面的命名保持一致。
8.字典文件和模糊校正文件可以提高OCR的识别率,我们可以获得官方的eng.traindata的此文件, 命令:
combine_tessdata-u tessdata/eng.traineddata path/eng.
此时语言包的所有文件都解压了,挑出我们需要的
eng.unicharambigs
eng.punc-dawg
eng.word-dawg
eng.number-dawg
eng.freq-dawg
这些文件放到我们训练字典的那个路径.
9.合并训练文件,命令:
combine_tessdataeng.
得到我们最终训练的文件
- Tesseract3 训练(转载整合) 3.0.1
- Tesseract3.01 训练步骤
- tesseract3.01的训练和使用
- tesseract3.01的训练和使用
- tesseract3.01的训练和使用
- tesseract3.01的训练和使用
- 关于图片识别引擎Tesseract3.02的训练
- 如何通过jTessBoxEditor进行Tesseract3.02.02样本训练
- 利用jTessBoxEditor工具进行Tesseract3.02.02样本训练
- Linux下利用jTessBoxEditor工具进行Tesseract3.02.02样本训练
- 利用jTessBoxEditor工具进行Tesseract3.02.02样本训练
- 利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高识别率
- OCR-光学字符识别之训练Tesseract3字库图文详解
- 利用jTessBoxEditor工具进行Tesseract3.02样本训练,提高识别率
- Tesseract3.02训练生成新的识别语言库的详细步骤
- 使用tesseract3.01字库训练教程完成全国企业信息中心简单验证码的字库建立。
- 利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别率
- 利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别率
- HTML5 - video标签和audio标签
- 新网域名如何绑定dnspod解析服务并添加相关记录?
- 因缓存机制产生的数据实时性问题
- HTML5 - canvas标签
- iOS程序打包上传及新版本更新
- Tesseract3 训练(转载整合) 3.0.1
- Gradle 1.12用户指南翻译——第二十二章. 标准的 Gradle 插件
- IOS多线程
- HTML5 - 智能表单
- iOS开发UI篇—在UItableview中实现加载更多功能
- js随笔1
- 海思SDK安装时,无法运行sdk.unpack
- 提高第6课时,实践1,k次方之和
- switch在打包环境是的无效