Tesseract-OCR 字符识别---样本训练

转自:http://blog.csdn.net/feihu521a/article/details/8433077

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 plaincopy

  1. 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 plaincopy

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

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

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

[plain] view plaincopy

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

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

【Yasi】:先前自己定义了tessdata的环境变量 TESSDATA_PREFIX 值为 E:\tesseract\tessdata,但没有从tesseract源文件目录中将tessdata子目录中的内容copy到 E:\tesseract\tessdata 中,造成上面的命令报错,说找不到batch.nochop 和 makebox。解决办法:将 tesseract 源文件目录中所有文件和子文件夹(可能充分但非必要,先不管这些啦)copy到 E:\tesseract\tessdata 中

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

【Yasi】这里必须修改识别错误的字符,否则做出来的traineddata文件也是错的。可以在下面的界面中修改并保存,也可以直接在traineddata文件中修改。

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

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

[plain] view plaincopy

  1. <fontname> <italic> <bold> <fixed> <serif> <fraktur>

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

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

[plain] view plaincopy

  1. font 0 0 0 0 0

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

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

[plain] view plaincopy

  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.

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

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

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

使用训练后的语言库识别

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

[plain] view plaincopy

  1. tesseract.exe number.jpg result -l eng

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

【Yasi】试验结果如下:

下面是num-yasi.png

将生成的num.traineddata拷贝到E:\tesseract\tessdata,即环境变量TESSDATA_PREFIX 设置的路径下,执行下面的命令(注意第二条命令结尾是num,即新加的traineddata,而不是eng

[plain] view plain copy

  1. E:\tesseract\tesseract-svn\vs2008\LIB_Debug\tesseractd.exe num-yasi.png result-eng -l eng
  2. E:\tesseract\tesseract-svn\vs2008\LIB_Debug\tesseractd.exe num-yasi.png result-num -l num

下图是两次识别结果对比

使用eng traineddata的结果完全不靠谱;使用了自己的traineddata,识别出来的当然都是数字,但正确率实在糟糕。可能是我自己手写的字体和用来做traineddata的手写数字的字体差别太大了吧。

时间: 2024-10-12 18:48:36

Tesseract-OCR 字符识别---样本训练的相关文章

转 Tesseract-OCR 字符识别---样本训练

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

利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别率,tesseract训练样本

http://www.bkjia.com/Pythonjc/1131343.html 利用jTessBoxEditor工具进行Tesseract3.02.02样本训练,提高验证码识别率,tesseract训练样本 1.背景 前文已经简要介绍tesseract ocr引擎的安装及基本使用,其中提到使用-l eng参数来限定语言库,可以提高识别准确率及识别效率. 本文将针对某个网站的验证码进行样本训练,形成自己的语言库,来提高验证码识别率. 2.准备工具 tesseract样本训练有一个官方流程说明

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

原文地址:http://blog.csdn.net/viewcode/article/details/7790065 正文: 原文: An Overview of the Tesseract OCR Engine 下载地址http://code.google.com/p/tesseract-ocr/wiki/Documentation Tesseract的识别步骤大致如下: 1. 连通区域分析: 2. 检测出字符区域区域(轮廓外形),以及子轮廓: 3. 由字符轮廓,得出文本行,以及通过空格识别出

Python3.x:pytesseract识别率提高(样本训练)

Python3.x:pytesseract识别率提高(样本训练) 1,下载并安装3.05版本的tesseract 地址:https://sourceforge.net/projects/tesseract-ocr/ 2,如果你的训练素材是很多张非tif格式的图片,首先要做的事情就是将这么图片合并(个人觉得素材越多,基本每个字母和数字都覆盖了训练出来的识别率比较好) 下载这个工具:VietOCR.NET-3.3.zip 地址:http://sourceforge.net/projects/viet

Python下Tesseract Ocr引擎及安装介绍

1.Tesseract介绍 tesseract 是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/tesseract,目前最新的源码可以在这里下载. 实际使用tesseract ocr也有两种方式:1- 动态库方式 libtesseract  2  - 执行程序方式 tesseract.exe 由于本人也是python菜鸟一个,所以方式1暂时不会,只好采取方式2. 2.Tesseract安装包下载 Tesseract的relea

Tesseract——OCR图像识别 入门篇

今天来给大家分一下一下自己觉得还是挺不错的jar包下载网址,it-tidalwave-semantic-aux-1.0.13.jar,作为java开发者可能时时刻刻都在跟jar包打交道,即使这会用不上,大家也都记录一下,以便于以后能够用得着,这个网站叫59biye网也是我找了好久才找到看了一下上面有几十万个jar包可供大家下载,今天跟大家一起分享一下,希望对大家有所帮助.Tesseract--OCR图像识别 入门篇

Tesseract OCR集成Android Studio实现OCR识别

Tesseract OCR集成Android Studio实现OCR识别 介绍 Tesseract OCR谷歌开源的OCR识别引擎,支持多国文字包括中文简体与繁体.最新的版本是3.x.可以通过安装程序安装在机器上然后通过命令行运行该程序识别各种图片中的文字.同时还提供二次开发包,支持二次开发包括C.C++语言.也可以被移植到Android平台实现移动应用领域的OCR识别APP. 下载 在Android平台上使用Tesseract OCR首先要下载Tess2工程,它是专门针对Android平台编译

利用jTessBoxEditor工具进行Tesseract-OCR样本训练

jTessBoxEditor依赖java虚拟机 , 所以要先安装 java. jTessBoxEditor下载地址: https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/jTessBoxEditor-1.5.zip/download?use_mirror=nchc 解压后跳转到解压目录, 启动 jTessBoxEditor,命令行输入 java -Xms128m -Xmx1024m -jar jTessBoxEditor.j

基于Tesseract OCR的文字识别Android应用开发资料整理

前言 一.Tesseract OCR引擎 Tesseract OCR是HP公司于1985~1995年间开发的商业级OCR(Optical Character Reader, 光学字符阅读器)引擎,并于2005年开放源代码.以下是它sourceforge上的网址: http://sourceforge.net/projects/tesseract-ocr/?source=directory 现在已转移到谷歌的代码服务下: https://code.google.com/p/tesseract-oc