Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文)。 Tesseract最初由HP公司开发,后来由Google维护,目前发布在Googel Project上。地址为http://code.google.com/p/tesseract-ocr/。

使用默认的语言库识别

1.安装Tesseract

从http://code.google.com/p/tesseract-ocr/downloads/list下载Tesseract,目前版本为Tesseract3.02。因为只是测试使用,这里直接下载winodws下的安装文件tesseract-ocr-setup-3.02.02.exe。安装成功后会在相应磁盘上生成一个Tesseract-OCR目录。通过目录下的tesseract.exe程序就可以对图像字符进行识别了。
2.准备一副待识别的图像,这里用画图工具随便写了一串数字,保存为number.jpg,如下图所示:
        

3.  打开命令行,定位到Tesseract-OCR目录,输入命令:

[plain] view plaincopyprint?
  1. tesseract.exe number.jpg result -l eng
 tesseract.exe number.jpg result -l eng

其中result表示输出结果文件txt名称,eng表示用以识别的语言文件为英文。

3.  打开Tesseract-OCR目录下的result.txt文件,看到识别的结果为7542315857,有3个字符识别错误,识别率还不是很高,那有没有什么方法来提供识别率呢?Tesseract提供了一套训练样本的方法,用以生成自己所需的识别语言库。下面介绍一下具体训练样本的方法。

训练样本

关于如何训练样本,Tesseract-OCR官网有详细的介绍http://code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3。这里通过一个简单的例子来介绍一下如何进行样本训练。

1.下载工具jTessBoxEditor. http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,这个工具是用来训练样本用的,由于该工具是用JAVA开发的,需要安装JAVA虚拟机才能运行。

2. 获取样本图像。用画图工具绘制了5张0-9的文样本图像(当然样本越多越好),如下图所示:

3.合并样本图像。运行jTessBoxEditor工具,在点击菜单栏中Tools--->Merge TIFF。在弹出的对话框中选择样本图像(按Shift选择多张),合并成num.font.exp0.tif文件。4.生成Box File文件。打开命令行,执行命令:

[plain] view plaincopyprint?
  1. tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox
  tesseract.exe num.font.exp0.tif num.font.exp0 batch.nochop makebox

生成的BOX文件为num.font.exp0.box,BOX文件为Tessercat识别出的文字和其坐标。

注:Make Box File的命令格式为:

[plain] view plaincopyprint?
  1. tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox
  tesseract [lang].[fontname].exp[num].tif [lang].[fontname].exp[num] batch.nochop makebox

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

5.文字校正。运行jTessBoxEditor工具,打开num.font.exp0.tif文件(必须将上一步生成的.box和.tif样本文件放在同一目录),如下图所示。可以看出有些字符识别的不正确,可以通过该工具手动对每张图片中识别错误的字符进行校正。校正完成后保存即可。

6.定义字体特征文件。Tesseract-OCR3.01以上的版本在训练之前需要创建一个名称为font_properties的字体特征文件。

font_properties不含有BOM头,文件内容格式如下:

[plain] view plaincopyprint?
  1. <fontname> <italic> <bold> <fixed> <serif> <fraktur>
<fontname> <italic> <bold> <fixed> <serif> <fraktur>

其中fontname为字体名称,必须与[lang].[fontname].exp[num].box中的名称保持一致。<italic> 、<bold> 、<fixed> 、<serif>、 <fraktur>的取值为1或0,表示字体是否具有这些属性。

这里在样本图片所在目录下创建一个名称为font_properties的文件,用记事本打开,输入以下下内容:

[plain] view plaincopyprint?
  1. font 0 0 0 0 0
font 0 0 0 0 0

这里全取值为0,表示字体不是粗体、斜体等等。 7.生成语言文件。在样本图片所在目录下创建一个批处理文件,输入如下内容。

[plain] view plaincopyprint?
  1. rem 执行改批处理前先要目录下创建font_properties文件
  2. echo Run Tesseract for Training..
  3. tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train
  4. echo Compute the Character Set..
  5. unicharset_extractor.exe num.font.exp0.box
  6. mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.tr
  7. echo Clustering..
  8. cntraining.exe num.font.exp0.tr
  9. echo Rename Files..
  10. rename normproto num.normproto
  11. rename inttemp num.inttemp
  12. rename pffmtable num.pffmtable
  13. rename shapetable num.shapetable
  14. echo Create Tessdata..
  15. combine_tessdata.exe num.
rem 执行改批处理前先要目录下创建font_properties文件echo Run Tesseract for Training..
tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.trainecho Compute the Character Set..
unicharset_extractor.exe num.font.exp0.box
mftraining -F font_properties -U unicharset -O num.unicharset num.font.exp0.trecho Clustering..
cntraining.exe num.font.exp0.trecho 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.

将批处理通过命令行执行。执行后的结果如下:

需确认打印结果中的Offset 1、3、4、5、13这些项不是-1。这样,一个新的语言文件就生成了。

num.traineddata便是最终生成的语言文件,将生成的num.traineddata拷贝到Tesseract-OCR-->tessdata目录下。可以用它来进行字符识别了。

 

使用训练后的语言库识别

用训练后的语言库识别number.jpg文件, 打开命令行,定位到Tesseract-OCR目录,输入命令:

[plain] view plaincopyprint?
  1. tesseract.exe number.jpg result -l eng
tesseract.exe number.jpg result -l eng

识别结果如如图所示,可以看到识别率提高了不少。通过自定义训练样本,可以进行图形验证码、车牌号码识别等。感兴趣的朋友可以研究研究。

转载于:https://www.cnblogs.com/samlin/p/Tesseract-OCR.html

Tesseract-OCR 字符识别---样本训练 [转]相关推荐

  1. Tesseract OCR手写数字的样本训练

    Tesseract OCR样本训练除需要安装Tesseract OCR软件外,还需要下载Tesseract OCR样本训练工具jTessBoxEditorFX,下载地址: http://dl.pcon ...

  2. Tesseract OCR 训练字库

    Tesseract OCR是一款由HP实验室开发由Google维护的开源OCR引擎,在字符识别领域发挥着举足轻重的作用.除了使用软件自带的中英文识别库,我们可以使用Tesseract OCR训练属于自 ...

  3. tesseract OCR的多语言,多字体字符识别

    识别多种字体.多种语言的字符,在实际应用中是很常见的问题. 经过测试,及查看tesseract3.01的源码,tesseract 3.01版本是不支持多语言.多种字体OCR识别的. tesseract ...

  4. tesseract ocr训练样本库以及样本库使用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.tesseract ocr训练样本库 二.样本库的使用 总结 前言 这篇报告主要介绍两个内容: 1.tessera ...

  5. 关于Tesseract OCR 中文训练识别小试(java调用Tess4j)

    2017.9.20日小结 最近接到是关于消防系统协议解析仪器的项目,目的是从协议解析仪器获取有效数据,并解析数据(目的是不希望消防主机的数据信息再传给主机厂商而是最后能给自己收集调用).由于各个消防器 ...

  6. [转]tesseract OCR Engine overview字符识别学习

    原文地址:http://blog.csdn.net/viewcode/article/details/7790065 正文: 原文: An Overview of the Tesseract OCR ...

  7. 应用OpenCV进行OCR字符识别

    opencv自带一个字符识别的例子,它的重点不是OCR字符识别,而主要是演示机器学习的应用.它应用的是UCI提供的字符数据(特征数据). DAMILES在网上发布了一个应用OpenCV进行OCR的例子 ...

  8. An Overview of the Tesseract OCR Engine译文

    An Overview of the Tesseract OCR Engine译文 Abstract Tesseract OCR引擎以及UNLV OCR精度第四次年度测试中的HP Research P ...

  9. tesseract简单介绍和训练

    Python--图片文字识别--Tesseract 1.tesseract介绍 Tesseract,一款由HP实验室开发由Google维护的开源OCR(Optical Character Recogn ...

最新文章

  1. 【HDU】1305 Immediate Decodability(字典树:结构体数组,二维数组,链表/指针)
  2. 淘金尖端领域:全球量子技术最新投资趋势
  3. Linux——文件管理之inode
  4. 万达放弃A股上市,数据揭秘王思聪投资为何频繁跳水?
  5. java代码同时下载_java代码实现打包多个文件下载功能
  6. 在一台服务器上搭建多个项目的SVN
  7. 3D远方纯动态白云页面源码
  8. Java的简单了解。
  9. “数”驰天下,华为云DRS 高效支撑T3出行平稳迁移
  10. solr与zookeeper搭建solrcloud分布式索引服务实例
  11. [转载] strtol() -- 将字符串转换成长整型数(转载)
  12. 【高德LBS开源组件大赛】iOS版地图选中Overlay功能组件
  13. java每日学习回忆录
  14. 蓝鸽集团云计算机,‎App Store 上的“蓝鸽教育云”
  15. word2016添加题注|图注文献标号的交叉引用及引用的更新|添加不同类型的页码|文献自动编号|文献编号的自动引用|删除空白页
  16. 诗歌九 声律启蒙(云对雨,雪对风,晚照对晴空)
  17. github不小心同步覆盖了本地文件
  18. 美军回应网传UFO:视频为真 现有人类技术无法达到
  19. c语言浮点数和0比较大小,C-浮点数为什么不能和0比较?
  20. “仅三天可见” 的朋友圈有方法破解啦!

热门文章

  1. 如何使用idea远程debug调试代码详解
  2. k8s pod资源限制策略:requests、limits配置示例
  3. Linux shell if判断=左右必须要有空格
  4. arthas使用示例:profiler火焰图(CPU)
  5. jenkins+Docker+springcloud微服务持续集成
  6. Scala模式匹配:for循环表达式中的模式匹配
  7. scala逻辑运算符的一览图和代码案例
  8. 分布式框架seata启动命令
  9. Scala代码案例:100以内的数求和,求出当和第一次大于20的当前数(循环中断机制)
  10. 【Java面试题视频讲解】提取不重复的整数