文档章节

Tesseract-OCR识别中文与训练字库实例

不最醉不龟归
 不最醉不龟归
发布于 2017/04/14 10:51
字数 806
阅读 1317
收藏 4

关于中文的识别,效果比较好而且开源的应该就是Tesseract-OCR了,所以自己亲身试用一下,分享到博客让有同样兴趣的人少走弯路。

文中所用到的身份证图片资源是百度找的,如有侵权可联系我删除。

 

一、准备工作

1、下载Tesseract-OCR引擎,注意要3.0以上才支持中文哦,按照提示安装就行。

2、下载chi_sim.traindata字库。要有这个才能识别中文。下好后,放到Tesseract-OCR项目的tessdata文件夹里面。

3、下载jTessBoxEditor,这个是用来训练字库的。

以上的几个在百度都能找到下载,就不详细讲了。

 

 

二、识别

1、进入cmd,进入到要识别的图片的路径下。

2、输入命令

1

tesseract 图片名称 生成的结果文件的名称 字库

例如我的图片识别就是:

1

tesseract test.jpg result -l chi_sim

识别完后会生成result.txt文件

当然啦效果不太理想。所以我们要训练自己的字库。

 

三、训练

1、将图片转换成tif格式,用于后面生成box文件。可以通过画图,然后另存为tif即可。

更改图片名字,这个是有要求的=。=

tif文面命名格式[lang].[fontname].exp[num].tif
lang是语言 fontname是字体 
比如我们要训练自定义字库 mjorcen字体名normal
那么我们把图片文件重命名 mjorcen.normal.exp0.jpg在转tif。

 

2、生成box文件。

1

tesseract mjorcen.normal.exp0.jpg mjorcen.normal.exp0 -l chi_sim batch.nochop makebox

box文件和对应的tif一定要在相同的目录下,不然后面打不开。

 

3、打开jTessBoxEditor矫正错误并训练

打开train.bat

找到tif图,打开,并校正。

 

4、训练。

只要在命令行输入命令即可。

1

tesseract  mjorcen.normal.exp0.jpg mjorcen.normal.exp0  nobatch box.train

1

unicharset_extractor mjorcen.normal.exp0.box

 

在这我明明已经矫正好了,但是还是有1个字符不能识别出来,报的错跟实际上完全没有相关性,不知道是不是bug,到后面的结果就是“园”字没有识别出来。

先不管,毕竟只有一个样本。

 

新建一个font_properties文件

里面内容写入 normal 0 0 0 0 0 表示默认普通字体

 

继续敲命令

1

2

3

4

5

6

7

8

9

shapeclustering -F font_properties -U unicharset mjorcen.normal.exp0.tr

 

 

 

mftraining -F font_properties -U unicharset -O unicharset mjorcen.normal.exp0.tr

 

 

 

cntraining mjorcen.normal.exp0.tr

 

最后会生成五个文件,把目录下的unicharset、inttemp、pffmtable、shapetable、normproto这五个文件前面都加上normal.

如图:

 

命令行输入,合并五个文件:

1

combine_tessdata normal.

得到训练好的字库。

 

四、测试

1、把 normal.traineddata 复制到Tesseract-OCR 安装目录下的tessdata文件夹中

 

2、识别命令:

1

tesseract mjorcen.normal.exp0.jpg mjorcen.normal.exp0 -l normal

 

3、效果

 

对比:

 

 

总结:肯定要自己训练过后的字库识别效果好,接下来要把整个项目弄进android,还要研究怎么将多个字库合并成一个字库,因为我不可能一次训练完所有的图片文字的。到时候有什么成果了再分享博文。希望大家可以点赞!谢谢。

 

更新:没有错误的话命令行的提示应该是这样的

 

本文转载自:http://www.cnblogs.com/wzben/p/5930538.html

不最醉不龟归
粉丝 25
博文 443
码字总数 465172
作品 0
深圳
程序员
私信 提问
加载中

评论(4)

小熊thinking
小熊thinking

引用来自“277067264”的评论

将多个字库合并成一个字库?怎么实现?将自己训练的字库和chi_sim字库合并成一个
你怎么实现的啊
277067264
277067264
将多个字库合并成一个字库?怎么实现?将自己训练的字库和chi_sim字库合并成一个
不最醉不龟归
不最醉不龟归 博主

引用来自“Mr_Root”的评论

为什么我的jTessBoxEditor不能显示中文,对于汉字只是显示正方形框框
编码问题,这篇文章我只是暂时转载留存,我还没去试过呢~哈,等工作不忙的时候,在看看。暂时帮不上哈~不好意思
M
Mr_Root
为什么我的jTessBoxEditor不能显示中文,对于汉字只是显示正方形框框
PDF处理、Tesseract-OCR的介绍

相关文章 OCR识别-python版(一) 基于Python实现对PDF文件的OCR识别 使用Google开源tesseract OCR用语言库报allowblob_division解决方案 Tesseract-OCR识别中文与训练字库实例 Tesseract训练...

致Great
2017/12/09
0
0
Tesseract-OCR4.0识别中文与训练字库实例

关于中文的识别,效果比较好而且开源的应该就是Tesseract-OCR了,所以自己亲身试用一下,分享到博客让有同样兴趣的人少走弯路。 文中所用到的身份证图片资源是百度找的,如有侵权可联系我删除...

---dgw博客
2018/04/06
0
0
深入学习Tesseract-ocr识别中文并训练字库的方法

  上篇文章简单的学习了tesseract-ocr识别图片中的英文(链接地址如下:https://www.cnblogs.com/wj-1314/p/9428909.html),看起来效果还不错,所以这篇文章继续深入学习tesseract-ocr识别...

战争热诚
2018/08/14
0
0
利用tess-two和cv4j实现简单的ocr功能

ocr 光学字符识别(英语:Optical Character Recognition, OCR)是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。 Tesseract Tesseract是Ray Smith于1985到1995年间在...

fengzhizi715
2017/10/02
0
0
比 tesseract 更好的中文识别--deep_ocr

deepocr 是使得 OCR 比 tesseract 更好的中文识别、身份证识别等等。 估计很多开发员使用 tesseract 做中文识别,但是结果不是一般的差,譬如下面的图片 $ tesseract -l chisim testdata.png...

chongdata
2016/11/29
7.8K
3

没有更多内容

加载失败,请刷新页面

加载更多

总结

一、设计模式 简单工厂:一个简单而且比较杂的工厂,可以创建任何对象给你 复杂工厂:先创建一种基础类型的工厂接口,然后各自集成实现这个接口,但是每个工厂都是这个基础类的扩展分类,spr...

BobwithB
22分钟前
2
0
java内存模型

前言 Java作为一种面向对象的,跨平台语言,其对象、内存等一直是比较难的知识点。而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚。比如本文我们要讨论的JVM内存结构、Java内存模...

ls_cherish
26分钟前
2
0
友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
4
0
JAVA 利用时间戳来判断TOKEN是否过期

import java.time.Instant;import java.time.LocalDateTime;import java.time.ZoneId;import java.time.ZoneOffset;import java.time.format.DateTimeFormatter;/** * @descri......

huangkejie
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部