Tesseract-OCR的Training简明教程

引言: Tesseract虽然功能强大,但是依然由于图片本身诸多的干扰因素和识别能力,存在诸多的识别率不高和信息不准确的问题,Training的过程则可以提升起识别的准确率, 本文将介绍如何train tesseract-ocr。

1.  关于Training

Tesseract虽然很强,且可以处理各类的文字转换,但是我们的目标图片并非如我们所期没有各类的干扰因素;在实际的情况下,各类的干扰因素将导致我们的识别准确率和效果大幅度下降;针对这类问题,Tesseract提供了Training的各类工具和过程,以期提升其识别率和正确率,提供可定制化的灵活性。

  • 如何来提升输出的质量(Improve the quality of output),   https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality

2.   jTessEditorBox

jTessEditorBox是第三方提供了一个关于自定义用户识别结合的工具,非常的好用强大,其本身是基于Java开发而成的,需要依赖JRE的运行环境,推荐使用JDK8 u40+以上版本,具体信息可以参考其官网信息。

这里做一个小说明: 直接从其官网下载非常慢,且非常容易断线,故直接使用了baidu的离线下载,秒级下载成功;然后绕道从百度云盘上下载。

3.  安装好tesseract

这里假定已经安装好了tesseract,如果安装有问题,可以参考我之前写的一篇文字,关于如何安装tesseract的简明教程。

4.  创建用户自定义的原始图片文件

这里笔者自行使用window自带的工具,创建以下4个图片,分别写了简单的数字:

5.  运行jTessEditorbox工具,merge图片

点击打开Tool菜单,点击merge,选择多个文件,另存在一个合成之后的文件:

在生成另外一个merged文件之后,进行编辑和错误信息的纠偏:

另存文件或者保存文件之后,保存到当下目录。

6.. 运行tesseract命令,生成box文件

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

E:\testdir>tesseract num.font.exp0.tif num.font.exp0 batch.nochop makebox
Tesseract Open Source OCR Engine v3.05.00dev with Leptonica
Page 1
Page 2
Page 3
Page 4

结果会生成一个名称为num.font.exp0的文件,在命令运行的当下目录。BOX文件为Tessercat识别出的文字和其坐标。

注:Make Box File 文件名有一定的格式,不能随便乱取名字,命令格式为:

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

其中lang为语言名称,fontname为字体名称,num为序号,可以随便定义。

7. 定义字体特征文件。Tesseract-OCR3.01以上的版本在训练之前需要创建一个名称为font_properties的字体特征文件。font_properties不含有BOM头,文件内容格式如下:
   <fontname> <italic> <bold> <fixed> <serif> <fraktur>
   其中fontname为字体名称,必须与[lang].[fontname].exp[num].box中的名称保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值为1或0,表示字体是否具有这些属性。
    这里在样本图片所在目录下创建一个名称为font_properties的文件,用记事本打开,输入以下下内容:

font 0 0 0 0 0

这里全取值为0,表示字体不是粗体、斜体等。。

8. 生成语言文件。在样本图片所在目录下创建一个批处理文件 num_batch.bat,输入如下内容:

rem 执行改批处理前先要目录下创建font_properties文件

echo Run Tesseract for Training..
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train

echo Compute the Character Set..
unicharset_extractor.exe num.font.exp0.box
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr

echo Clustering..
cntraining.exe num.font.exp0.tr

echo Rename Files..
rename normproto num.normproto
rename inttemp num.inttemp
rename pffmtable num.pffmtable
rename shapetable num.shapetable 

echo Create Tessdata..
combine_tessdata.exe num.

然后运行这个bat文件,运行结果信息如下:

E:\testdir>num_batch.bat

E:\testdir>rem 执行改批处理前先要目录下创建font_properties文件

E:\testdir>echo Run Tesseract for Training..
Run Tesseract for Training..

E:\testdir>tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
Tesseract Open Source OCR Engine v3.05.00dev with Leptonica
Page 1
APPLY_BOXES:
   Boxes read from boxfile:       8
   Found 8 good blobs.
Generated training data for 2 words
Page 2
APPLY_BOXES:
   Boxes read from boxfile:       8
   Found 8 good blobs.
Generated training data for 2 words
Page 3
APPLY_BOXES:
   Boxes read from boxfile:       8
   Found 8 good blobs.
Generated training data for 2 words
Page 4
APPLY_BOXES:
   Boxes read from boxfile:       8
   Found 8 good blobs.
Generated training data for 1 words

E:\testdir>echo Compute the Character Set..
Compute the Character Set..

E:\testdir>unicharset_extractor.exe num.font.exp0.box
Extracting unicharset from num.font.exp0.box
Wrote unicharset file ./unicharset.

E:\testdir>mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
Warning: No shape table file present: shapetable
Reading num.font.exp0.tr ...
Flat shape table summary: Number of shapes = 8 max unichars = 1 number with multiple unich
Warning: no protos/configs for Joined in CreateIntTemplates()
Warning: no protos/configs for |Broken|0|1 in CreateIntTemplates()
Done!

E:\testdir>echo Clustering..
Clustering..

E:\testdir>cntraining.exe num.font.exp0.tr
Reading num.font.exp0.tr ...
Clustering ...

Writing normproto ...

E:\testdir>echo Rename Files..
Rename Files..

E:\testdir>rename normproto num.normproto

E:\testdir>rename inttemp num.inttemp

E:\testdir>rename pffmtable num.pffmtable

E:\testdir>rename shapetable num.shapetable

E:\testdir>echo Create Tessdata..
Create Tessdata..

E:\testdir>combine_tessdata.exe num.
Combining tessdata files
TessdataManager combined tesseract data files.
Offset for type  0 (num.config                ) is -1
Offset for type  1 (num.unicharset            ) is 140
Offset for type  2 (num.unicharambigs         ) is -1
Offset for type  3 (num.inttemp               ) is 710
Offset for type  4 (num.pffmtable             ) is 130474
Offset for type  5 (num.normproto             ) is 130573
Offset for type  6 (num.punc-dawg             ) is -1
Offset for type  7 (num.word-dawg             ) is -1
Offset for type  8 (num.number-dawg           ) is -1
Offset for type  9 (num.freq-dawg             ) is -1
Offset for type 10 (num.fixed-length-dawgs    ) is -1
Offset for type 11 (num.cube-unicharset       ) is -1
Offset for type 12 (num.cube-word-dawg        ) is -1
Offset for type 13 (num.shapetable            ) is 131715
Offset for type 14 (num.bigram-dawg           ) is -1
Offset for type 15 (num.unambig-dawg          ) is -1
Offset for type 16 (num.params-model          ) is -1
Output num.traineddata created successfully.

需确认打印结果中的Offset 1、3、4、5、13这些项不是-1。这样,一个新的语言文件就生成了。
num.traineddata便是最终生成的语言文件,将生成的num.traineddata拷贝到Tesseract-OCR-->tessdata目录下。可以用它来进行字符识别了。

9. 基于新的字符集合,进行字符识别验证

验证新的测试集合

创建新的测试图片,我们还是使用输入数字,重新做了一个图片:

打开命令行,我们进行OCR转换:

E:\testdir>tesseract newtestnum.png newresulttest -l num
Tesseract Open Source OCR Engine v3.05.00dev with Leptonica
Warning in fopenReadFromMemory: work-around: writing to a temp file

E:\testdir>

注意: 这里我们使用了一个新的语言类型 num,就是我们之前进行的用户自定义的识别字符集合。

我们查看一下我们的识别结果集合:

12357 684

效果还是非常棒的。

FAQ

1.  在windows下安装成功之后,进行tesseract的操作,碰到如下错误信息:

E:\testdir>tesseract ttest1.png test1 -l eng
Error opening data file \Program Files (x86)\Tesseract-OCR\tessdata/eng.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.
Failed loading language ‘eng‘
Tesseract couldn‘t load any languages!
Could not initialize tesseract.

错误信息的关键词是tesseract_prefix的环境变量设置。

解决办法:  找到testData所在的目录,默认情况下是在tesseract安装的目录,在环境变量中设置TESSDATA_PREFIX的环境变量为testdata所在的目录即可。 重新运行命令即可正常使用。

参考资料

  • JTessBoxEditor   http://vietocr.sourceforge.net/training.html    Tesseract 训练工具
  • Tesseract Guide  https://github.com/tesseract-ocr/tesseract/wiki   使用指南
  • Train Tesseract  http://blog.csdn.net/yasi_xi/article/details/8763385   训练指南
时间: 2024-09-30 06:29:48

Tesseract-OCR的Training简明教程的相关文章

Tesseract-OCR安装以及Training简明教程

引言:  OCR领域大名鼎鼎的Tesseract,开源项目,可以直接将图片中的文字进行识别,转换成文本信息,本文将简介如何安装以及进行数据的训练操作. 1.  Tesseract-OCR 目前最新的tesseract项目已经全部迁移到了github上,我们可以从中获取所有主要的信息. 地址: https://github.com/tesseract-ocr/tesseract 2.  Tesseract-OCR安装 windows下的安装非常简单,直接安装可执行程序即可.这里重点介绍centos

docker简明教程(二)

前言这篇博文承接我的上一篇<docker简明教程一> http://9399369.blog.51cto.com/9389369/1758576 相对于上一篇来说这篇所讲到的知识会高深一点因为学习的过程不就是一步步的由简单到复杂嘛但是我的风格没变用简单的文字让朋友们学习高深的docker技术.如果觉得我写的好的话顶我上推荐希望能让跟多人看到.学习和受益. 二十二.Docker导出容器到本地文件 不管是容器不是处于运行状态都可以导出 首先查看那容器状态 [[email protected] ~]

Lisp简明教程

此教程是我花了一点时间和功夫整理出来的,希望能够帮到喜欢Lisp(Common Lisp)的朋友们.本人排版很烂还望多多海涵! <Lisp简明教程>PDF格式下载 <Lisp简明教程>ODT格式下载 具体的内容我已经编辑好了,想下载的朋友可以用上面的链接.本人水平有限,如有疏漏还望之处(要是有谁帮我排排版就好了)还望指出!资料虽然是我整理的,但都是网友的智慧,如果有人需要转载,请至少保留其中的“鸣谢”页(如果能有我就更好了:-)). Lisp简明教程 整理人:Chaobs 邮箱:[

Linux防火墙iptables简明教程

前几天微魔部落再次遭受到个别别有用心的攻击者的攻击,顺便给自己充个电,复习了一下linux下常见的防火墙iptables的一些内容,但是无奈网上的很多教程都较为繁琐,本着简明化学习的目的,微魔为大家剔除了许多冗余的内容,提取出尽量多的精华部分成文,和大家共同学习,本文涉及的内容包括如下 Linux防火墙iptables简明教程 1.安装iptables 2.查看现有的iptables规则 3.删除某iptables规则 4.清除现有iptables规则 5.创建规则 6.设置开机启动 7.保存i

Markdown简明教程4-Markdown UML图

1. 前言 Markdown是一种轻量级的标记语言,把作者从繁杂的排版工作中解放出来,实现易读易写的文章写作,已经逐渐成为事实上的行业标准.CSDN博客支持Markdown可以让广大博友更加专注于博客内容,大赞.但是,不少博友可能对Markdown比较生疏,本博接下来用一个系列文章<Markdown简明教程>扼要介绍Markdown,希望可以对大家有所帮助. 系列教程目录 关于Markdown Markdown基本使用 Markdown表格和公式 Markdown UML图 CSDN Mark

JSP 简明教程(二):JSP基本语法

基本语法 JSP只是在html的基础上嵌入一些动态的元素.下面是HelloWorld代码: <html> <% out.println("hello world"); %> </html> 以上代码中的<% %>就是动态元素.JSP中所有的特殊语法如下: <% %>:用于表示一段Java代码.这段代码在编译之后会放在_jspService()方法中. <%! %>:多了一个叹号,也用于表示一段Java代码,但是这段

第一课 C语言简明教程

1序言: 1与Java.C#等高级语言相比,C语言却非常简单,学习简单,使用也简单,但是也非常重要,到目前为止基本上操作系统的内核代码超过百分之九十使用C语言完成,因此学好C语言是学好计算机这门课程的基础,特别是进入系统编程尤为明显. 今天是本人复习C语言课程的第一课,主要重新记录一下C语言的基础知识,这节课涉及到C语言的结构.变量以及类型.输入输出.条件判断以及循环知识. 2知识点: 2.1 C语言的结构 2.1.1 通常情况下C语言程序是由: 1.相关的代码注释,使用/* ··· */可注释

Vbs 脚本编程简明教程之一

-为什么要使用 Vbs ? 在 Windows 中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改名.删除,也许你每天启动 计算机第一件事情就是打开 WORD ,切换到你喜爱的输入法进行文本编辑,同时还要播放优美的音乐给工作创造一个舒心的环境,当然也有可能你经常需要对文本中的某 些数据进行整理,把各式各样的数据按照某种规则排列起来--.这些事情重复.琐碎,使人容易疲劳. 第三方软件也许可以强化计算机的某些功能,但是解决这些重复劳动往

Smarty教程1.引擎定义2.主要优点3.简明教程4.使用判断5.循环数组6.常见问题8.解释程序

Smarty是一个php模板引擎.更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法.可以描述为应用程序员和美工扮演了不同的角色,因为在大多数情况下 ,他们不可能是同一个人.例如,你正在创建一个用于浏览新闻的网页,新闻标题,标签栏,作者和内容等都是内容要素,他们并不包含应该怎样去呈现.在Smarty的程序里,这些被忽略了.模板设计者们编辑模板,组合使用html标签和模板标签去格式化这些要素的输出(html表格,背景色,字体大小,样式表,等等).有一天程序员想要改变文章检索的方式(