Tesseract 3 语言数据的训练方法

OCR,光学字符识别

  光学字符识别(OCR,Optical Character Recognition)是指对文本资料进行扫描,然后对图像文件进行分析处理,获取文字及版面信息的过程。OCR技术非常专业,一般多是印刷、打印行业的从业人员使用,可以快速的将纸质资料转换为电子资料。关于中文OCR,目前国内水平较高的有清华文通、汉王、尚书,其产品各有千秋,价格不菲。国外OCR发展较早,像一些大公司,如IBM、微软、HP等,即使没有推出单独的OCR产品,但是他们的研发团队早已掌握核心技术,将OCR功能植入了自身的软件系统。对于我们程序员来说,一般用不到那么高级的,主要在开发中能够集成基本的OCR功能就可以了。这两天我查找了很多免费OCR软件、类库,特地整理一下,今天首先来谈谈Tesseract,下一次将讨论下Onenote 2010中的OCR API实现。可以在这里查看OCR技术的发展简史。

1、Tesseract概述

Tesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。然而,HP不久便决定放弃OCR业务,Tesseract也从此尘封。

数年以后,HP意识到,与其将Tesseract束之高阁,不如贡献给开源软件业,让其重焕新生--2005年,Tesseract由美国内华达州信息技术研究所获得,并求诸于Google对Tesseract进行改进、消除Bug、优化工作。

Tesseract目前已作为开源项目发布在Google Project,其项目主页在这里查看,其最新版本3.0已经支持中文OCR,并提供了一个命令行工具。本次我们来测试一下Tesseract 3.0,由于命令行对最终用户不太友好,我用WPF简单封装了一下,就可以方便的进行中文OCR了。

1.准备:

  • 安装Tesseract , 我这里用的是 tesseract 3.02.02
  • 下载图片,保存到本地,
  • 下载工具jTessBoxEditor. http://sourceforge.net/projects/vietocr/files/jTessBoxEditor/,这个工具是用来训练样本用的,由于该工具     是用JAVA开发的,需要安装JAVA虚拟机才能运行。

  



2.合并样本图像

运行jTessBoxEditor工具,在点击菜单栏中Tools--->Merge TIFF。在弹出的对话框中选择样本图像(按Shift选择多张),合并成total.tif文件。

3.Make Box Files。

在total.tif所在的目录下打开一个命令行,输入:

tesseract mjoren.normal.exp0.tif mjoren.normal.exp0   batch.nochop makebox

来生成一个box文件,该文件记录了tesseract识别出来的每一个字和其位置坐标。

 屏幕输出如下

E:\data\Users\Administrator\Desktop\ocrBuider2>tesseract mjoren.normal.exp0.tif
mjoren.normal.exp0   batch.nochop makebox
Tesseract Open Source OCR Engine v3.02 with Leptonica
Page 1 of 3
Page 2 of 3
Empty page!!
Empty page!!
Page 3 of 3
Empty page!!
Empty page!!

这时目录多出了一个 mjoren.normal.exp0.box和mjoren.normal.exp0.txt 文件

4.使用jTessBoxEditor打开total.tif文件,

需要记住的是第2步生成的mjoren.normal.exp0.box要和这个mjoren.normal.exp0.tif文件同在一个目录下。逐个校正文字,后保存。



4.Run Tesseract for Training。输入命令:

tesseract mjoren.normal.exp0.tif mjoren.normal.exp0 nobatch box.train

屏幕输出如下:

E:\data\Users\Administrator\Desktop\ocrBuider2>tesseract mjoren.normal.exp0.tif
mjoren.normal.exp0 nobatch box.train
Tesseract Open Source OCR Engine v3.02 with Leptonica
Page 1 of 3
APPLY_BOXES:
   Boxes read from boxfile:       7
   Found 7 good blobs.
TRAINING ... Font name = normal
Generated training data for 1 words
Page 2 of 3
Empty page!!
Empty page!!
Page 3 of 3
Empty page!!
Empty page!!

这时目录会多出2个文件: mjoren.normal.exp0.tr

5.Compute the Character Set。输入命令:

unicharset_extractor  mjoren.normal.exp0.box

执行结果:

E:\data\Users\Administrator\Desktop\ocrBuider2>unicharset_extractor  mjoren.norm
al.exp0.box
Extracting unicharset from mjoren.normal.exp0.box
Wrote unicharset file ./unicharset.

6.定义字体特征文件

新建文件“font_properties”。那么需要在目录下新建一个名字为“font_properties”的文件,并且输入文本 :

注意:这里  normal 必须与训练名中的名称保持一致,填入下面内容 ,这里全取值为0,表示字体不是粗体、斜体等等。

normal 0 0 0 0 0

并执行命令:

mftraining -F font_properties  -U unicharset mjoren.normal.exp0.tr

执行结果

E:\data\Users\Administrator\Desktop\ocrBuider2>mftraining  -F font_properties  -U unicharset  mjoren.normal.exp0.tr
Warning: No shape table file present: shapetable
Reading mjoren.normal.exp0.tr ...
Flat shape table summary: Number of shapes = 7 max unichars = 1 number with mult
iple unichars = 0
Warning: no protos/configs for j in CreateIntTemplates()
Warning: no protos/configs for 搂 in CreateIntTemplates()
Warning: no protos/configs for a in CreateIntTemplates()
Done!

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

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

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

7.Clustering。输入命令:

cntraining  mjoren.normal.exp0.tr

执行结果:

E:\data\Users\Administrator\Desktop\ocrBuider2>cntraining  mjoren.normal.exp0.tr

Reading mjoren.normal.exp0.tr ...
Clustering ...

Writing normproto ...

8.此时,在目录下应该生成若干个文件了,把unicharset, inttemp, normproto, pffmtable这四个文件加上前缀“normal.”。然后输入命令:

combine_tessdata normal.

执行结果如下:

E:\data\Users\Administrator\Desktop\ocrBuider2>combine_tessdata normal.
Combining tessdata files
TessdataManager combined tesseract data files.
Offset for type 0 is -1
Offset for type 1 is 140
Offset for type 2 is -1
Offset for type 3 is 792
Offset for type 4 is 128180
Offset for type 5 is 128262
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
Offset for type 13 is -1
Offset for type 14 is -1
Offset for type 15 is -1
Offset for type 16 is -1

必须确定的是第2、4、5、6行的数据不是-1,那么一个新的字典就算生成了。

此时目录下“normal.traineddata”的文件拷贝到tesseract程序目录下的“tessdata”目录。

以后就可以使用该该字典来识别了,例如:

tesseract mjoren.normal.exp0.tif result  -l normal

通过训练出来的新语言,识别率提高了不少。

E:\data\Users\Administrator\Desktop\ocrBuider2>tesseract mjoren.normal.exp0.tif
result  -l normal
Tesseract Open Source OCR Engine v3.02 with Leptonica
Page 1 of 3
Page 2 of 3
Empty page!!
Empty page!!
Page 3 of 3
Empty page!!
Empty page!!

纠正出来的结果

1234567

Tesseract 3 语言数据的训练方法,布布扣,bubuko.com

时间: 2024-10-24 08:04:50

Tesseract 3 语言数据的训练方法的相关文章

05.C语言数据、常量和变量

C语言数据.常量和变量 图片文字等都是数据 ,在计算中的0和1存储 一.分类 数据分成静态数据和动态数据. 1.静态数据:一些永久性的数据,一般存储在硬盘中,只要硬盘没有损坏数据都是存在的 一般以文件的形式存储在硬盘上,电脑关机启动依然存在 2.动态数据:程序运行过程中,动态产生的临时数据,一般存储在内存中,内存的存储空间一般较小,计算机关闭 后这些数据就会被清除,软件或者电脑关闭则这些临时数据也会被清除. 3.静态数据和动态数据可以转换. 4.为什么不把动态数据存放到硬盘?因为直接访问内存速度

R语言数据操作之apply系列

1 ###################R语言中apply类型问题 2 data<-data.frame(x=c(1,2,3,4),y=c(2,3,4,5),z=c(5,6,7,8)) 3 apply(data,2,mean)##apply针对数据框 4 lapply(data,mean)##lapply针对list,当然对dataframe也有效 5 data1<-list(a=1:10,b=exp(-3:3),c=c(FALSE,FALSE,FALSE)) 6 lapply(data1,

《美团 R 语言数据运营实战》

美团 R 语言数据运营实战 2018年08月02日 作者: 喻灿 刘强 文章链接 3689字 8分钟阅读 一.引言 近年来,随着分布式数据处理技术的不断革新,Hive.Spark.Kylin.Impala.Presto 等工具不断推陈出新,对大数据集合的计算和存储成为现实,数据仓库/商业分析部门日益成为各类企业和机构的标配.在这种背景下,是否能探索和挖掘数据价值,具备精细化数据运营的能力,就成为判定一个数据团队成功与否的关键. 在数据从后台走向前台的过程中,数据展示是最后一步关键环节.与冰冷的表

C语言 数据存储方式

C语言 数据存储方式 一.源码 一个数的原码(原始的二进制码)有如下特点: 最高位做为符号位,0表示正,为1表示负 其它数值部分就是数值本身绝对值的二进制数 负数的原码是在其绝对值的基础上,最高位变为1 下面数值以1字节的大小描述: 十进制数 原码 +15 0000 1111 -15 1000 1111 +0 0000 0000 -0 1000 0000 注:原码表示法简单易懂,与带符号数本身转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减

第二篇:R语言数据可视化之数据塑形技术

前言 绘制统计图形时,半数以上的时间会花在调用绘图命令之前的数据塑型操作上.因为在把数据送进绘图函数前,还得将数据框转换为适当格式才行. 本文将给出使用R语言进行数据塑型的一些基本的技巧,更多技术细节推荐参考<R语言核心手册>. 数据框塑型 1. 创建数据框 - data.frame() # 创建向量p p = c("A", "B", "C") # 创建向量q q = 1:3 # 创建数据框:含p/q两列 dat = data.fra

第四篇:R语言数据可视化之折线图、堆积图、堆积面积图

前言 折线图通常用来对两个连续变量的依存关系进行可视化,其中横轴很多时候是时间轴. 但横轴也不一定是连续型变量,可以是有序的离散型变量. 绘制基本折线图 本例选用如下测试数据集: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用条形图函数geom_line()便可绘制出基本折线图.R语言示例代码如下: # 基函数 ggplot(BOD, aes(x = Time, y = demand)) + # 折线图函数 geom_line()     运行结果: 向折线

C语言数据输入与输出

1 概论 C语言提供了跨平台的数据输入输出函数scanf()和printf()函数,它们可以按照指定的格式来解析常见的数据类型,例如整数,浮点数,字符和字符串等等.数据输入的来源可以是文件,控制台以及网络,而输出的终端可以是控制台,文件甚至是网页. 2 数据输出 从第一个C语言程序中,就使用了跨平台的库函数printf实现将一段文字输出到控制台,而实际上,printf()不仅可以将数据按照指定的格式输出到控制台,还可以是网页或者是指定的文件中,printf()函数执行的返回结果是输出字符的个数.

R语言数据可视化之散点图

散点图简介 散点图通常是用来表述两个连续变量之间的关系,图中的每个点表示目标数据集中的每个样本. 同时散点图中常常还会拟合一些直线,以用来表示某些模型. 回到顶部 绘制基本散点图 本例选用如下测试数据集: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用散点图函数geom_point()便可绘制出基本散点图.R语言示例代码如下: 1 2 3 4 # 基函数 ggplot(ah, aes(x = ageYear, y = heightIn)) +   # 散点图

第三篇:R语言数据可视化之条形图

条形图简介 数据可视化中,最常用的图非条形图莫属,它主要用来展示不同分类(横轴)下某个数值型变量(纵轴)的取值.其中有两点要重点注意: 1. 条形图横轴上的数据是离散而非连续的.比如想展示两商品的价格随时间变化的走势,则不能用条形图,因为时间变量是连续的: 2. 有时条形图的值表示数值本身,但也有时是表示数据集中的频数,不要引起混淆: 绘制基本条形图 本例选用测试数据集如下: 绘制方法是首先调用ggplot函数选定数据集,并在aes参数中指明横轴纵轴.然后调用条形图函数geom_bar(stat