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

简介:

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 plain copy print ?
  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 plain copy print ?
  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 plain copy print ?
  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 plain copy print ?
  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 plain copy print ?
  1. font 0 0 0 0 0  
font 0 0 0 0 0

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

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

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

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

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

 

使用训练后的语言库识别

 

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

 

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

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

转载请注明出处[ http://samlin.cnblogs.com/] 
作者赞赏
 


刚做的招标网: 八爪鱼招标网 请大家多意见
标签:  TesseractOCR文字识别

本文转自Sam Lin博客博客园博客,原文链接:http://www.cnblogs.com/samlin/p/Tesseract-OCR.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
文字识别 数据可视化 PyTorch
OCR-字符识别笔记
OCR-字符识别笔记
33 0
|
4月前
|
机器学习/深度学习 文字识别 算法
[Halcon&识别] OCR字符识别
[Halcon&识别] OCR字符识别
60 0
|
机器学习/深度学习 存储 文字识别
Halcon解决方案指南(18)OCR--字符识别
第18章 光学字符识别_OCR OCR(Optical Character Recongnition)即我们通常意义上讲的光学字符识别。在HALCON中,OCR常被用来分割区域及读取识别图像中的字符含义。
7069 0
|
10月前
|
文字识别 算法 计算机视觉
MATLAB实现OCR识别数字和字符
OCR也叫做光学字符识别,是计算机视觉研究领域的分支之一。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。
|
11月前
|
机器学习/深度学习 文字识别 算法
【OCR学习笔记】6、OCR传统字符识别实践
【OCR学习笔记】6、OCR传统字符识别实践
83 0
|
机器学习/深度学习 文字识别
OCR+CNN完成铭牌字符识别【MATLAB】
OCR+CNN完成铭牌字符识别【MATLAB】
473 0
OCR+CNN完成铭牌字符识别【MATLAB】
|
机器学习/深度学习 人工智能 文字识别
阿里云机器学习平台PAI-AI行业插件-视觉模型平台OCR模型训练使用简明教程
AI行业插件提供视觉模型训练插件和通用模型训练插件,他们支持在线标注、自动模型训练、超参优化及模型评估。您只需要准备少量标注数据,并设置训练时长,就可以得到深度优化的模型。同时,插件平台与PAI-EAS高效对接,可以快速将训练模型部署为RESTful服务。视觉模型训练插件支持视觉领域常用模型的标注、训练及发布,并针对移动端场景进行了模型深度优化,您可以通过手机扫码快速体验模型效果,也可以将模型进行服务端部署。本文着重讲述OCR文字识别使用简明教程
474 0
阿里云机器学习平台PAI-AI行业插件-视觉模型平台OCR模型训练使用简明教程
|
机器学习/深度学习 算法
MXNet之CNN:自定义CNN-OCR算法训练车牌数据集(umpy.ndarray格式数据)的模型实现一张新车牌照片字符预测
MXNet之CNN:自定义CNN-OCR算法训练车牌数据集(umpy.ndarray格式数据)的模型实现一张新车牌照片字符预测
MXNet之CNN:自定义CNN-OCR算法训练车牌数据集(umpy.ndarray格式数据)的模型实现一张新车牌照片字符预测
|
机器学习/深度学习 算法 计算机视觉
MXNet之CNN:自定义CNN-OCR算法训练车牌数据集(umpy.ndarray格式数据)实现车牌照片字符识别并评估模型
MXNet之CNN:自定义CNN-OCR算法训练车牌数据集(umpy.ndarray格式数据)实现车牌照片字符识别并评估模型
MXNet之CNN:自定义CNN-OCR算法训练车牌数据集(umpy.ndarray格式数据)实现车牌照片字符识别并评估模型
Tesseract-OCR 字符识别---样本训练
转自:http://blog.csdn.net/feihu521a/article/details/8433077             Tesseract是一个开源的OCR(Optical Character Recognition,光学字符识别)引擎,可以识别多种格式的图像文件并将其转换成文本,目前已支持60多种语言(包括中文)。
2727 0

热门文章

最新文章