如何提高tesseract ocr 识别-OCR的识别精度

tesseract-ocr有2和3两个版本,不同版本训练方法稍有不同。
第3版本的训练方法官版教程在这里:
第2版的训练方法官版教程在这里:
我使用的是最新的3.01版本的。训练所需准备:
1.下载并安装3.01版本的tesseract。事实上并不需要安装这步骤,我下载的是,解压即可,这里我解压到E:\Tesseract-ocr目录。
2.下载并安装 工具,这是一个Box file editors,用来编辑训练文件的,直接下载地址在。这个软件是用java写的,运行需要安装jre,好在这个东西比.net好装多了,怎么运行可以见它的readme文件。
3.一张用来训练的tiff格式图片。
在不通过训练的前提下,使用tesseract来识别一个订单号的内容,如图发现错误率很高,希望通过训练来提高准确率。
训练过程:
1.通过合并10张如上图的图片合并为一张tiff格式的图片,如何合并呢?通过jTessBoxEditor的Merge Tiff 来完成,不过他的小缺点就是只能合并多张tiff格式的,如果你的图片是jpg的,需要先转换。生成后的tiff图片叫做orderNo.tif
2.Make Box Files。在orderNo.tif所在的目录下打开一个命令行,输入:
E:\Tesseract-ocr\tesseract.exe orderNo.tif orderNo batch.nochop makebox
来生成一个box文件,该文件记录了tesseract识别出来的每一个字和其位置坐标。
3.使用jTessBoxEditor打开orderNo.tif文件,需要记住的是第2步生成的orderNo.box要和这个orderNo.tif文件同在一个目录下。逐个校正文字,后保存。
4.Run Tesseract for Training。输入命令:
E:\Tesseract-ocr\tesseract.exe orderNo.tif orderNo nobatch box.train
<pute the Character Set。输入命令:
E:\Tesseract-ocr\unicharset_extractor.exe orderNo.box
6.新建文件“font_properties”。如果是3.01版本,那么需要在目录下新建一个名字为“font_properties”的文件,并且输入文本 :
orderNo 0 0 0 0 0
大致意思就是说orderNo这个语言的字体为普通字体。
并执行命令:
E:\Tesseract-ocr\mftraining.exe -F font_properties -U unicharset orderNo.tr
7.Clustering。输入命令:
E:\Tesseract-ocr\cntraining.exe orderNo.tr
8.此时,在目录下应该生成若干个文件了,把unicharset, inttemp, normproto, pfftable这四个文件加上前缀“orderNo.”。然后输入命令:
E:\Tesseract-ocr\combine_tessdata.exe orderNo.
会显示一个结果如:
Combining tessdata files TessdataManager combined tesseract data files. Offset for type 0 is -1 Offset for type 1 is 108 Offset for type 2 is -1 Offset for type 3 is 1660 Offset for type 4 is 327545 Offset for type 5 is 327781 Offset for type 6 is -1 Offset for type 7 is -1 Offset for type 8 is -1 Offset for type 9 is -1 Offset for type 10 is -1 Offset for type 11 is -1 Offset for type 12 is –1
必须确定的是第2、4、5、6行的数据不是-1,那么一个新的字典就算生成了。
此时目录下“orderNo.traineddata”的文件拷贝到tesseract程序目录下的“tessdata”目录。
以后就可以使用该该字典来识别了,例如:
tesseract.exe test.jpg result –l orderNo
通过训练出来的新语言,识别率提高了不少。
大大 请问jTessBoxEditor支持中文吗?我想生成中文汽车牌照的语言包在线等 求!!!!!
& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区OCR文字识别(3)
模式识别新研究:微软OCR两层优化提升自然场景下的文字识别精度
发表于 23:46|&| 来源CSDN|&8&条评论|
摘要:OCR识别可分为两步:首先是文本检测,将文字从图片中提取出来;然后对文本进行识别。此次的突破主要是在文本检测环节的两个子阶段:先采用对比极&#20540;区域CER检测方法,再采用基于浅层神经网络的文字/非文字分类算法。
鼠标发明人Douglas Engelbart曾经针对人工智能的简称AI提出了另一个理念——Augmented Intelligence,即增强智能。在他看来,人已经足够聪明,我们无需再去复制人类,而是可以从更加实用的角度,将人类的智能进一步延伸,让机器去增强人的智能。
OCR (Optical Character Recognition,光学字符识别)就是这样的一项技术,它的本质上是利用光学设备去捕获图像并识别文字,将人&#30524;的能力延伸到机器上。本文将介绍OCR技术在移动环境下面临的新挑战,以及在自然场景图像下微软研究院文字识别技术的进展。
OCR的新挑战
早在20世纪50年代,IBM就开始利用OCR技术实现各类文档的数字化。到20世纪90年代,诞生十年的平板扫描仪对印刷体文本的识别率就已经达到99%以上,OCR由此迎来了第一个应用高潮。当时最著名的事件是谷歌数字图书馆,谷歌还申请了图书扫描专利,实现了批量化的高速扫描。在此期间,手写字体的识别也在并行发展,被广泛用于邮件分拣、支票分类、手写表&#26684;数字化等领域。
然而,自从2004年拥有300万像素摄像头的智能手机诞生之日起,这一情况发生了根本改变。越来越多的人随手拿起手机拍摄所看到的事物和场景,而此类自然场景中的文字识别难度远远高于平板扫描仪时期,即便是印刷字体,也不能得到很高的识别率,更别说手写体了。学术界因此将自然场景中的文字识别作为全新的课题来对待。
自然场景图像中的文字识别大大难于扫描仪图像中的文字识别,因为它具有极大的多样性和明显的不确定性。如文字中包含多种语言,每种语言含有多种字母,每个字母又可以有不同的大小、字体、颜色、亮度、对比度等;文字通常以文本行的形式存在,但文本行可能有不同的排列和对齐方式,横向、竖向、弯曲都有可能;因拍摄图像的随意性,图像中的文字区域还可能会产生变形(透视和仿射变换)、残缺、模糊断裂等现象。
自然场景图片中的文字多样性示例
此外,与传统&OCR 技术中的扫描文档图像相比,自然场景图像的背景更为复杂。如文字可能不是写在平面上而是在曲面上;文字区域附近有非常复杂的纹理和噪声;图像中的非文字区域有着跟文字区域非常相&#20284;的纹理,比如窗户、树叶、栅栏、砖墙等。这些复杂背景会极大增加误检率。
本文检测的改进方法
由于自然场景下的文字识别难度大,微软亚洲研究院团队对相关技术和算法进行了针对性的优化,从三个方面对文本检测技术进行了改进,并取得突破。通常,OCR识别的步骤可以分为两步:首先是文本检测(Text detection),将文字从图片中提取出来;然后,对文本进行识别(Recognition),此次的突破主要是在文本检测环节的两个子阶段。
阶段①:采用对比极&#20540;区域CER检测方法
一个字母或文字通常可以分为若干个连通区域,如o就拥有一个连通区域,i则拥有两个连通区域,文本检测首先要从图像中切割出可能存在的文字,即候选连通区域,然后再对其进行文字/非文字分类。
在确定候选连通区域阶段,微软亚洲研究院团队在传统检测方法ER(Extremal Region,极&#20540;区域)和MSER(Maximally Stable Extremal Region,最大平稳极&#20540;区域)基础之上采用了对比极&#20540;区域CER(Contrasting Extremal Region),CER是跟周围的背景有一定对比度的极&#20540;区域,这个对比度至少要强到能够被人&#30524;感知到,在低对比度的图像上比MSER效果更好,而且获得的候选连通区域数量远小于ER,候选范围大大缩小,提高了算法的效率。
为了提高所获得的候选连通区域的质量,微软亚洲研究院团队决定增加一个算法环节去增强CER。尤其在图像模糊、分辨率低或者噪声较多时,提取出来的CER有可能会含有冗余像素或者噪声,这些冗余像素或者噪声的存在会使得后面的文字/非文字分类问题变得更为复杂。
算法优化的另一个特点,是采用基于感知的光照不变(Perception-based Illumination Invariant, PII)颜色空间中的颜色信息去增强CER,利用颜色信息尽可能滤除CER中的冗余像素或者噪声,从而得到Color-enhanced CER。该颜色空间具有视觉感知一致性,而且对光照不敏感,更接近人&#30524;对颜色的判断。
受噪声影响的CER示例
在实际操作中,并不是每个CER都需要通过颜色信息来增强,因为有很多CER本身颜色均匀,没有噪声,尤其是在图片质量很高的时候。因此,在对CER进行增强操作之前我们会先判断该CER是否需要增强操作,以减少不必要的计算复杂度。
对CER的颜色增强效果示例
算法提取出来的候选连通区域结果示例
阶段②:基于浅层神经网络的文字/非文字分类算法
当获得了高质量的候选连通区域,就需要对其中的字符进行分辨,确定其是否为文字或非文字,微软亚洲研究院团队提出了一套基于浅层神经网络的文字/非文字分类算法,比以往的算法更加有效。
该算法根据文字本身的特性采用分治策略将原始问题空间划分为5个子空间,每个子空间对应一类文字样本,分别命名为Long类,Thin类,Fill类,Square-large类和 Square-small类(如下图所示),于是每个候选连通区域被划分到这5类中的一种。
文字类问题空间划分示例
在每个子空间中,微软亚洲研究院团队利用无歧义学习策略训练一个相应的浅层神经网络,作为该子空间的文字/非文字分类器,我们可以将该神经网络看作是一个黑盒子,在经过大量学习之后,它便能较为准确的将文字与非文字分类。
每次分类动作包括两个阶段——预剪枝(Pre-pruning)阶段和验证(Verification)阶段。在预剪枝阶段,分类器的任务是尽可能滤除无歧义的非文字候选连通区域;在验证阶段,则通过引入更多信息来消除孤立连通区域的歧义性,从而进一步滤除有歧义的非文字候选连通区域。
改进的有效性得到了验证。2014年8月,在瑞典首都斯德哥尔摩举办的国际模式识别大会(ICPR)上,微软亚洲研究院团队公布的研究成果在自然场景文字检测的标准数据集(ICDAR-2013测试集)上取得了92.1%的检测精度和92.3%的召回率。此前业界最好技术的检测精度是88.5%,而召回率只有66.5%,多年来这些数字每年增长只有几个百分点。
应用前景分析
人类需求牵引科技发展走到今天,智慧的无限延伸决定了世界的无限潜能。10年前的简单通讯工具手机如今已成为智慧生活的伴侣,曾经只被扫描仪应用的OCR技术亦已焕发新机。随着OCR研究工作的不断突破,云计算、大数据以及通讯网络的快速发展,以及智能&#30524;镜、可穿戴设备等智能设备的推陈出新,OCR的应用也将充满无限机会、无限可能性。
我们也可以设想一下OCR在未来工作中的应用场景:每次工作会议后,无需再把白板上的讨论内容抄写下来,然后群发邮件布置任务,前端只要将白板用手机等智能设备拍照留存,后端可以对其进行实时分析和处理,系统便能自动识别并分检出相关人员的后续工作,并将待办事项自动存放到各自的电子日历中。
事实上,基于微软亚洲研究院的OCR核心技术,微软前不久推出的Office Lens应用,已经可以通过视觉计算技术自动对图像进行清理并把它保存到OneNote,而OneNote中基于云端的OCR技术将对图片进行文字识别,随后用户就可以拥有一个可编辑、可搜索的数字文件,这为上述未来应用场景打下了基础。
作者简介:
霍强博士,微软亚洲研究院首席研究员
Qiang Huo is a Principal Research Manager of Speech Group in Microsoft Research Asia (MSRA), Beijing, China. Prior to joining MSRA in August 2007, he had been a faculty member at the Department of Computer Science, The University of Hong Kong since 1998. From
1995 to 1997, Dr. Huo worked at Advanced Telecommunications Research Institute (ATR) in Kyoto, Japan. In the past 30 years, he has been doing research and making contributions in the areas of speech recognition, handwriting recognition, OCR, gesture recognition,
biometric-based user authentication, hardware design for speech and image processing.&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:140822次
积分:3064
积分:3064
排名:第7882名
原创:24篇
转载:868篇
评论:19条
1)OpenCV俱乐部
2) 视频/音频/图像/算法/ML
备注:加群需要回答问题,避免广告党。
如果你是博客看到后加的,请注明“博客”并回答问题,只注明”博客“不回答问题的恕不加入。答案为和群相关的任何技术名词,不能出现1)和2)中的任何字&#30524;
(9)(56)(68)(107)(226)(78)(3)(9)(37)(46)(50)(19)(15)(13)(27)(12)(12)(103)(18)(18)开源库研究(3)
为了提高Tesseract库的中文识别率,可以对它进行中文字的训练。
1.首先安装Tesseract。这里注意要安装,因为安装的程序里面包含其他训练用到的程序,编译版本没有这些工具。
2.下载jTessBoxEditor工具。这个工具是Java写的,运行需要JRE。这个工具主要是用来修改BOX文件的,用来校对文字。下图为该工具的目录,直接点击红框中的程序即可跑起来。
这次准备让库可以识别取消这两个字,准备了5张图:
3.生成tif&#26684;式的文件
最好将图片都放在Tesseract库的安装目录下,然后就在这个目录下进行操作。点击jTessBoxEditor的Tools按钮中的Merge
TIFF。然后将我们做样本的5张图片全部选中,点击打开。这时候会弹出另一个保存对话框,就是我们想要的tif文件,对于tif文件命名规则
[lang].[fontname].exp[num].tif。其中lang是语言,fontname是字体。按自己需求自行设定即可。点击保存,这时候目录下就有我们的tif文件了。
4.生成BOX文件
首先打开命令行,进入Tesseract目录,输入命令:tesseract.exe
chi.myself.exp0.tif
chi.myself.exp0
batch.nochop makebox
5.校对文字
用jTessBoxEditor打开刚才生成的tif文件
我们会发现,文字显示的信息是不对的。
我们需要把每张图片的Char目录下的字符都改正过来。现在的Tesseract库将 取消 识别成了四部分,所以有1,2,3,4四行,我们需要它校正对两行,而且字符应该是 取消 。如下操作:
这个时候这两部分就合在一起了。但是Char这列显示的是 H,应该改成取。如下操作:
其他的字符同样操作,最后的效果就是这样了:
我这里一共有5张图,都把他们改好以后,点击Save即可。这时候我们可以看一下chi.myself.exp0.box文件(记事本打开即可),会发现里面做好了校正。
注:这步校正工具也可以在box文件里直接进行,但容易出错。
6.生成.tr文件
tesseract.exe
chi.myself.exp0.tif chi.myself.exp0
nobatch box.train
7.生成unicharset文件。
unicharset_extractor
chi.myself.exp0.box
7.新建font_properties文件
用记事本新建一个明文font_properties文件,内容&#26684;式为:
&fontname& &italic& &bold& &fixed& &serif& &fraktur&
用记事本如:myself 0 0 0 0 0 &记住是5个0。
7.运行下面三条命令:
shapeclustering.exe -F font_properties.txt -U unicharset chi.myself.exp0.tr
mftraining.exe -F font_properties.txt -U unicharset -O unicharset chi.myself.exp0.tr
cntraining.exe chi.myself.exp0.tr
把目录下的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件前面都加上myself.
&注意有 点 。如下图:
combine_tessdata myself.
生成这个文件,说明我们成功了。
将该文件拷贝到tessdata文件里,就可以进行测试使用了
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:20334次
排名:千里之外
原创:128篇
转载:17篇
(1)(4)(1)(4)(8)(5)(6)(1)(3)(1)(1)(4)(3)(104)(1)(2)二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
作者:jolly wang介绍tesseract 3.0x是完全可训练的。该页描述了训练过程,提供了一些指南来应用到各语言中。背景和权限tesseract原先只为English文本而设计。后来经过努力,可以处理其它语言,以及 utf8字符。tesseract 3.0可以处理任何unicode字符,但只限于已经成功的字符集。tesseract 3.01 新增了 从上到下 阅读顺序的语言, tesseract 3.02 添加了希伯来语Hebrew(从右到左)。tesseract当前只有一个辅助引擎cube来处理阿拉伯语(Arabic)。(在3.0+中新增)tesseract在一些大语种语言中进展缓慢,比如中文,但是目前可以运行。任何语言都有不同的标点和数字,很难被只认ASCII标点和数字的硬编码算法识别。该问题将在3.0x中解决。x&=24.1:需要的数据为了训练另一种语言,你可以在tessdata子目录下创建一些数据文件,接着使用combine_tessdata将它们融合进一个文件,命名规范为:languagecode.file_name。语言码可以遵从ISO 639-3标准。3.00使用的English文件有:tessdata/eng.configtessdata/eng.unicharsettessdata/eng.unicharambigstessdata/eng.inttemptessdata/eng.pffmtabletessdata/eng.normprototessdata/eng.punc-dawgtessdata/eng.word-dawgtessdata/eng.number-dawgtessdata/eng.freq-dawg接着融合成一个文件: tessdata/eng.traineddata然后提供另一个独立文件: tessdata/eng.user-wordstraineddata文件通常是一个输入文件的连接,带有目录表,并包含了已知文件类型的偏移。在源代码中见ccutil/tessdatamanager.h,可以看到当前接受的文件名列表。注意,traineddata文件不同于3.00版本以上的列表,并且很可能在以后版本中变动。4.2&准备文本输入文件文本输入文件(lang.config, lang.unicharambigs, font_properties, box files, wordlists for dictionaries..)需要满足以下需求:ASCII 或者 utf8 编码,没有uinx行结尾符('\n')文件尾空行(否则:将得到错误信息:last_char == '\n':Error:Assert failed..)4.2.1&How little can you get away with?你必须使用下面的过程来创建unicharset, inttemp, normproto, pfftable。如果你只尝试识别一个受限范围的字体(例如:单一字体),那么一个简单的训练页就足够了。在你的应用程序中不再需要提供另外的文件,但是必须更精确。老的DangAmbigs已经被替换成unicharambigs。4.3 训练过程一些过程不可避免是人工的。尽可能提供自动化帮助。在将来,会出来许多自动化工具,但需要更复杂的install/build过程。以下的工具是自带的:4.3.1 生成训练图像第一步是决定使用完整的字符集,准备一个包含了许多样本集的文本或词处理文件。重点要注意的是,当创建一个训练文件时:确保每个字符的最小数目的样本。10很好,但5只对少数字符有效。常用字符的样本应更多:至少20个。不要将所有非字母组合在一起。让文件更实际化。例如,“The quick brown fox jumps over the lazy dog.
!@#$%^&(),.{}&&/?”,这个就很糟糕。而这个则更好:“The (quick) brown {fox} jumps! over the $3,456.78&lazy&&#90 dog & duck/goose, as 12.5% of E-mail from
is spam?” ,这个给出了文本行查找码,来获取特定字符的基标语义。当打印时,文本空格绝对安全。。。。。。训练数据应该按字体分组。。。。。没必要训练多个size的文本。。。。。不要在一个image文件混合多种字体(确切的说:在单个.tr文件中),它将造成丢弃一些特征,导致识别错误下载页的boxtiff文件将帮助你如何格式化你的训练数据。接着,打印和扫描(使用一些电子渲染方法)来创建你的训练页的image。直到32个训练文件都被使用。它交创建一个混合的字体和样式,包含italic和bold。注意:由于间距,训练真实的image是相当困难的,这个将在未来改善。对于现在,更容易打印和扫描你自己的训练文本。你也可以保存你的文本成为一个utf8文本文件,用来在下一步中,将代码插入到另一个文件。对于大量训练数据的识别,对于多数字体,限制32个图像。每个字体都应被放到单个 多页tiff(只有你正使用libtiff),和boxfile中,可以通过修改指定页数来为每个字符做协调。。。。。4.3.2 制作box file接下来,tesseract需要一个‘box’文件来定位每个训练图像。box文件是一个文本文件,它在每行列出了训练图像的字符,以及围绕bounding box的坐标。tesseract 3.0有一个模式,可以用来输出一个需要格式的文本文件,但是如果字符集不同于当前训练,它将自然地具有不对的文本。因此,这里的关键是,需要人工编辑正确的文本进去。命令行下运行tesseract你的训练图片:tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox比如:tesseract eng.timesitalic.exp0.tif eng.timesitalic.exp0 batch.nochop makebox接下来是最困难的部分。你需要编辑文件&[lang].[fontname].exp[num].box,并为每个字符放至utf8编码在文件是每行起始处。例如:发行版包含了一个图像:eurotext.tif. 运行以上的命令来生成一个文本文件,可 以包含下面的行:s 734 494 751 519 0p 753 486 776 518 0r 779 494 796 518 0i 799 494 810 527 0n 814 494 837 518 0g 839 485 862 518 0t 865 492 878 521 0u 101 453 122 484 0b 126 453 146 486 0e 149 452 168 477 0r 172 453 187 476 0d 211 451 232 484 0e 236 451 255 475 0n 259 452 281 475 0因为Tesseract&以英文模式运行,它不能正确识别元音(umlaut)。这种字符需要使用一个合适的编辑器来纠正。可以使用能识别utf8的编辑器。HTML 编辑器是个不错的选择。。。。理论上,boxfile中的每行都表示了你训练文件中的每个字符,如果你需要水平分隔字符,比如双逗号 ,, 它将具有两个box需要合并。示例:lines 116-129:D 101 504 131 535 0e 135 502 154 528 0r 158 503 173 526 0, 197 498 206 510 0, 206 497 214 509 0s 220 501 236 526 0c 239 501 258 525 0h 262 502 284 534 0n 288 501 310 525 0e 313 500 332 524 0l 336 501 347 534 0l 352 500 363 532 0e 367 499 386 524 0” 389 520 407 532 0你将看到, 最下面的双引号字符被表达成两个单一的逗号。bounding box必须按以下方式合成:第一个数(左)采用两行中最小的(197)第二个数(下)采用两行中最小的(496)第三个数(右)采用两行中最大的(214)第四个数(上)采用两行中最大的(508)于是,给出:D 101 504 131 535 0e 135 502 154 528 0r 158 503 173 526 0? 197 497 214 510 0s 220 501 236 526 0c 239 501 258 525 0h 262 502 284 534 0n 288 501 310 525 0e 313 500 332 524 0l 336 501 347 534 0l 352 500 363 532 0e 367 499 386 524 0” 389 520 407 532 0如果你不能成功地在训练图像中将字符分隔开,其中一些会被圈进另一个box中。在一些情况下,你可以使用更好的空格和起点,重新标注图像。(比如:2.04,有24个字节来描述一个字符的限制,这将允许你根据你的unicode字符集,在6到24个unicode间来描述这个字符。如果达到该限制,请编写一个issue描述你的情况)注意:在box 文件中的坐标系统,在左下边有(0,0)。如果你的编辑器支持utf8,该过程将更简单,每个utf8字符都最高支持4字节来编写它,使用dumb功能可以查看所有字节。一些支持编辑box文件的可视化工具:.4.3.3 自引导一个新的字符集如果你尝试一个新的字符集,将它们使用单字体来获取一个新的box文件会很合适,运行其余的训练过程,接着使用tesseract来生成其它的box文件:tesseract fontfile.tif fontfile -l yournewlanguage batch.nochop makebox这将使得第二个box文件更容易生成,一种较好的选择是,tesseract将识别出大多数正确文本。你可以总是重复这个过程,来添加更多的字体到训练集中(比如:命令行工具 mfTraining 和 cnTraining)来制作它们,但是注意,还没有增量模式来允许你添加新的训练数据到存在的字符集中。这意味着每次你运行mfTraining和cnTraing工具,你可以从tr文件中制作新的数据文件,这些工具不会将采用已经存在的intproto/pffmtable/normproto并将它们直接添加进去。4.3.4 全新提供Tif/Box pair!!Tif/Box 对在新的下载页提供。(注意:tiff文件采用G4压缩以便节省空间,因此,你必须首先具有libtiff或者未压缩的数据)。你可以遵从以下过程,来为你的语言生成更好的训练数据或添加不同的字符形状到已经存在的语言中:过滤box文件,只保持你想要的字符。运行tesseract来训练。对于每种字体,从多个语言中cat出.tr文件,来获取你想要的字符休,并从你有的字体或字符中添加.tr文件以相同的方式cat出已经过滤的box文件到.tr文件中,以便在unicharset_extractor中处理运行训练过程的其它步骤注意!这听起来并不简单!cntraining和mftraining只能最多采用32个.tr文件,因此,对于相同的字体,你必须从多种语言中,以字体独立的方式,将所有的文件cat到一起来让32种语言结合在一起。cntraining/mftraining以及unicharset_extractor命令行工具必须各自由给定的.tr和.box文件,以相同的顺序,为不同的字体进行不同的过滤。可以提供一个程序来完成以上的事情,并在字符集表中挑出相同字符集。这样会将事情更简单些。4.3.5 运行 tesseract进行训练对于你的训练图像,box文件对,以训练模式运行tesseract:tesseract fontfile.tif junk nobatch box.train或者tesseract fontfile.tif junk nobatch box.train.stderr在版本2.03及以下,第一种方式发送所有错误给 tesseract.log(在所有平台上)。而使用box.train.stderr,将发送错误到stderr 上。注意,box文件名必须匹配tif文件名,包含路径,否则tesseract将找不到它。这一步的输出是fontfile.tr,它包含了训练页的每个字符的特征。注意,输出名从输入的图像名中派生出来,而非正常的输出名,这里的junk. junk.txt将被使用单个不带文本的新行来写。非常重要 在apply_box中确认输出错误。如果报告了FATALITIES,没必要继续训练过程,直到你你修正box文件。新的box.train.stderr配置文件使得它很选择输出的位置。一个FATALITY通常标明这一步错误。如果该坐标错误,那么关注的特征图像也将错误。如果一个字符没有工作样本不能被识别,那么生成的inttemp文件将不会茶杯unicharset文件,接着tesseract 将中止。另一个错误:box file format error on line n.。。。。。。。没必要编辑fontfile.tr文件的内容。里面的字体名不必设置。出于好奇,以下是该格式的信息:Every character in the box file has a corresponding set of entries inthe .tr file (in order) like thisUnknownFont &utf8 code(s)& 2mf &number of features&x y length dir 0 0... (there are a set of these determined by &number of features&above)cn 1ypos length x2ndmoment y2ndmomentThe mf features are polygon segments of the outline normalized to the1st and 2nd moments.x= x position [-0.5.0.5]y = y position [-0.25, 0.75]length is the length of the polygon segment [0,1.0]dir is the direction of the segment [0,1.0]The cn feature is to correct for the moment normalization todistinguish position and size (eg c vs C and , vs ')5 计算字符集tesseract需要知道可能要输出的字符集。为了生成unicharset数据文件,在相同的页bounding box文件上使用unicharset_extractor程序进行聚类:unicharset_extractor fontfile_1.box fontfile_2.box ...tesseract需要访问字符属性 &(isalpha, isdigit, isupper, islower.).该数据而可以以unicharset的数据形式被编码。每行都是一个字符。utf8的字符是按照十六进制数表达。每位表示一个属性。如果相应位置1,它意味着属性是真的。这些位(从最小位到最大位):isalpha, islower, isupper, isdigit。示例:';' 为非字母字符,小写字符,大小字符,而非数字。它的属性通过二进制数 10000表示(16进制的10表示 )'b'是一个字母字符,小写字符。它的属性通过二进制数00011表示(3)'W'是一个字母字符,大写字符。它的属性通过二进制数00101表示(5)'7'只是一个数字。它的属性通过二进制数01000表示(8)‘=’非数字或字母字符。它的属性通过二进制数字00000表示(0); 10 Common 46b 3 Latin 59W 5 Latin 407 8 Common 66= 0 Common 93日文或中文字母字符属性由二进制数00001表示(1)如果你的系统支持wctype函数,这些值都将通过unicharset_extractor自动设置,并且没必要通编辑unicharset文件。在一些老的系统中,unicharset文件必须通过手动添加属性描述代码。注意,当inttemp,normproto&和pffmtable被生成时,unicharset文件必须重新生成(比如:当box文件被更改时,它们必须被重新创建)。必须以正确的方式,随着inttemp存储成索引到unicharset中时,实际的字符将通过给定索引的unichaset分类器返回。最后两列表示脚本类型(Latin, Common, Greek, Cyrillic, Han, null),以及相应语言的字符id。5.1 字体属性(3.01 中新)3.01中的新需求是font_property文件。该文件的目的是提供字体形式信息,当字体被识别时,将出现在输出中。font_properties 文件是一个文本文件,通过 -F filename 选项指定来进行mftraining.每行的font_properties文件都以如下进行格式化:&fontname& &italic& &bold& &fixed& &serif& &fraktur&当&fontname&是一个字体的字符串名,并且&italic&, &bold&, &fixed&, &serif& and &fraktur&&是所有简单的0 或 1标记,表示字体具有命名属性。当运行mftraining时,每个.tr文件名必须有相关entry在font_properties文件中,否则将中止mftraining。。。。。例如:font_properties文件如下:timesitalic 1 0 0 1 0shapeclustering -F font_properties -U unicharset eng.timesitalic.exp0.trmftraining -F font_properties -U unicharset -O eng.unicharset eng.timesitalic.exp0.tr 5.2 聚合当所有训练页的字符特征被抽取出来时,我们需要将它们聚集起来创建prototype文件。这些字符形状特性可以通过使用shapeclustering(在3.02版本之后提供)、mftraining 和 cntraining 程序进行聚焦。shapeclustering -F font_properties -U unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...shapeclustering通过形状聚集创建了主形状表,并将它写到一个文件中:shapetable.mftraining -F font_properties -U unicharset -O lang.unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...-U 文件表示unicharset,由上面的unicharset_extractor&生成,&lang.unicharset是输出unicharset,它将由combine_tessdata给出。Mftraining将输出两个其它的数据文件:inttemp(形状原型)和pffmtable(每个字符所希望的特征)。 &cntraining lang.fontname.exp0.tr lang.fontname.exp1.tr ...它将输出normproto&数据文件(character normalization sensitivity prototypes)6.字典数据(可选)tesseract为每种语言使用三个字典文件。两种文件被编码成有向非循环字图.DAWG (&Directed Acyclic Word Graph).其它是普通utf8文本文件:NameTypeDescriptionpunc-dawgdawgA dawg made from punctuation patterns found around words. The&"word"&part is replaced by a single space.word-dawgdawgA dawg made from dictionary words from the language.number-dawgdawgA dawg made from tokens which originally contained digits. Each digit is replaced by a space character.freq-dawgdawgA dawg made from the most frequent words which would have gone into word-dawg.fixed-length-dawgsdawgSeveral dawgs of different fixed lengths —— useful for languages like Chinese.bigram-dawgdawgA dawg of word bigrams where the words are separated by a space and each digit is replaced by a&?.unambig-dawgdawgTODO: Describe.为了生成DAWG字典文件,你首先需要为你的语言提供一个wordlist。你需要找到一个合适的字典文件,用来作为一个spellcheckers&的wordlist的基础 (ispell aspell hunspell)== 注意lincense. wordlist格式化成一个utf8的文本文件,每行都有一个词。将wordlist分割成需要的集合: 比如:常用词,其它剩下的词,接着使用worldlist2dawg来生成DAWG文件:wordlist2dawg frequent_words_list lang.freq-dawg lang.unicharsetwordlist2dawg words_list lang.word-dawg lang.unicharset对于从右向左的语言(RTL)使用选项 "-r 1". &其它选项参照:。注意:wordlist必须包含至少一个单词!在合并的traineddata文件中不允许存在。如果单词总是具有标点在其中,比如: , 那么在字典中包含它们很合适。最后的字典文件称为:user-words,通常为空。如果你需要字典wordlists的样本文件,解合并(使用)已经存在的语言数据文件(比如:eng.traineddata),接着使用抽取wordlists.7、最后的文件(unicharambigs)tesseract最后使用的数据文件称为:unicharambigs。它表示了在字符或字符集间固有的模糊,这通常整个都是以人工方式生成。为了理解文件格式,查看以下示例:v13 & & & I I 0 & 2 & & & u o & & 33 & & & I - I & 1 & & & H & & & 22 & & & ' ' & & 1 & & & " & & & 12 & & & ?? 6 & &1 & & & ?? & & 11 & & & m & & & 2 & & & r n & & 03 & & & i i i & 1 & & & m & & & 0第一行是一个版本标识符。剩下的行包含了5个以tab分隔的字段。第一个字段表示的是第二个字段的字符串数。第三个字段表示的是第四个字段的字符串数。第5个字段是一个类型标识符。第二和第四个字段表示了空格分隔的字符串。这可以是一个utf8格式的文件,因此,每个字符串是一个utf8字符串。每个这样的字符串必须匹配unicharset文件中一些行的第一个字段,比如,它必须是一个可识别单元。类型表示符的值如下:ValueTypeDescription0NOT_AMBIGthe ngram pair is not ambiguous1REPLACE_AMBIGocred ngram should always be substituted with correct2DEFINITE_AMBIGadd correct ngram to the classifier results (1-1)3SIMILAR_AMBIGuse pairwise classifier for ocred/correct pair (1-1)4CASE_AMBIGthis is a case ambiguity (1-1)替代规则是,如果第5个字段为1, 在第二字段中的 字符串集联总会被第4字段中的字符串联连替代。如果第5个字段为0,那么没必要替换。它扮演着hint的角色,如果替换将一个非字典词替换为一个字典词,那么,这个词就应该用来训练该适配性分类器,分段搜索可以提高识别第4个字段的可能性。主要影响是,第5个字段为0的主要影响是,减少错误适配,它不会使用更高的hint来替代。当为2时,第一行显示了双引号('')应该被替换单引号(')。(第5个字段标是是否标准替换)。第二行表示的是,pair 'rn'可能有时被识别成'm'。而第三行表示,字母‘m’可能有时被识别成序列'iii'。第4行表示,埃纳德语符号“??”,常被误识别,因为符号“??”后面跟着的数字‘6’,接着的序列常常被替换。最后一行可以是空行('\n')。注意,两边的字符应出现在unicharset中。该文件不能用来从一种字符翻译成另一种字符。unicharambigs文件应该为空,或者不存在。8.将它们放在一起所有都合在一起!你需要做的所有事情是将它们收集在一起(shapetable, normproto, inttemp, pffmtable),并且重命名为一个lang.prefix,lang可以是3个字符的编码(&&),接着以如下方式运行:combine_tessdata lang.注意,不要忘记加句点。接着将生成lang.traineddata。tesseract可以识别文本:tesseract image.tif output -l lang实际上,你可以使用语言码中的任何字符串,但是,如果你想任何人能轻易理解,按ISO 639的方式命名。关于combine_tessdata更多选项,在&或者源码注释中()。翻译至:/p/tesseract-ocr/wiki/TrainingTesseract2/p/tesseract-ocr/wiki/TrainingTesseract3
阅读(17331)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'tesseract-ocr 第四课 如何训练新语言',
blogAbstract:'版权所有,转载请注明出处,并标明链接作者:jolly wang介绍tesseract 3.0x是完全可训练的。该页描述了训练过程,提供了一些指南来应用到各语言中。背景和权限tesseract原先只为English文本而设计。后来经过努力,可以处理其它语言,以及 utf8字符。tesseract 3.0可以处理任何unicode字符,但只限于已经成功的字符集。tesseract 3.01 新增了 从上到下 阅读顺序的语言, tesseract 3.02 添加了希伯来语Hebrew',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:2,
publishTime:7,
permalink:'blog/static/',
commentCount:4,
mainCommentCount:2,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 tesseract 提高识别率 的文章

 

随机推荐