关于使用tesseract-ocr开发简单的图文识别(转)
发布日期:2021-10-04 02:53:21 浏览次数:3 分类:技术文章

本文共 2549 字,大约阅读时间需要 8 分钟。

使用OCR图文识别库识别数字和字母

最近在做身份证号码识别,在网上搜索的一番后发现目前开源的OCR中tesseract-ocr算是比较强大的了,它由HP于1985年到1995年间开发,后来由google直接负责,经过谷歌进一步开发后,目前的tesseract-ocr有了显著的改进。

tesseract-ocr和Leptonica图像库一起工作,它可以读取多种图像格式,并将其转换成超过60种语言的文本。可以工作在Linux,Windows,Mac OSX等系统上,并且可以在android和iphone平台上编译。

目前android版本在这个地址:, 这个版本需要自己下载很多关联的库文件,我在编译的时候出了很多问题,后来没办法又在网上找到了这个项目:,说是tesseract-ocr-tool的一个分支,这个版本的好处是很多相关的库都已经为我们配置好了,我们只要git clone下来编译下就行了,github上相关介绍说的很详细,编译的过程这里就不做介绍了,我在编译的时候出现了permission权限的问题,文件的权限用chmod 777 ./ 这个命令修改下就Ok了。最后编译好的在libs下的so文件就是我们开发所需要的库文件。

android中tesseract-ocr的使用在tess-two这个项目中有例子程序,不过写的都比较简单,这里有个开源的识别项目,做的很好:, 我借鉴的就是这个项目来开发的,但是用过后发现,对于身份证识别的效果并不好,识别率不是很高,而且经常识别不出来。OCR用到的识别库:,其实我们可以根据自己的需求来训练一套自己的识别库的,比方说我们要识别验证码,识别身份证号码等,我们就可以用下面的方法来训练一套识别库。

网上关于OCR训练的方法很多,, 这两篇文章都是比较好的教程,我也是参照这两篇文章来训练的,下面结合我的操作经验来说下训练的过程。


所需工具

  • tesseract-ocr-3.01
  • jTessBoxEditor, 该工具是用java写的box编辑器

1、先新建一个trainocr文件夹,将上面两个文件拷贝进来,然后解压这两个文件,我们进入Tesseract-ocr文件夹下新建一个temp文件夹

2、接下来我们准备好我们需要训练的素材如下图

这里写图片描述

要想提高识别率,我们需要提供多张像上面这样的图片,我训练身份证号码识别库是用了50多张图片,等训练完了我眼睛也花了,图片格式需要为tiff格式的,可以通过windows自带的画图工具来另存为tiff格式,准备好多张图tiff图片后,打开jTessBoxEditor.jar,如下图

这里写图片描述

在此之前我们需要在第1步建立的temp文件夹下新建一个custom.tif的文件,接下来我们选择tool–>Merge TIFF 然后选择准备好的多张tiff图片,注意这里是全部选中,然后点击打开,然后选中我们刚刚建立的custom.tif文件,点击保存,这样我们就将多张tiff图片merge到了一个文件里面了。

3、接下来我们开始生成box文件了,cmd命令行进入temp文件夹下,然后输入如下命令

D:\Trainocr\Tesseract-ocr\temp>..\tesseract.exe custom.tif custom batch.nochop makebox

输入完后会在temp文件夹下多了个custom.box文件,该文件记录了识别出来的每个字和它对应的位置坐标。

4、接下来就开始矫正了,同样使用jTessBoxEditor工具,我们切换到Box Editor,然后open打开custom.tif,如图

这里写图片描述

通过右上角的X,Y,W,H对每个需要改正的字符进行调整,注意调整好后别忘记保存。

5、接下来是计算字符集,输入如下命令

D:\Trainocr\Tesseract-ocr\temp>..\unicharset_extractor.exe custom.box

6、接下来我们需要在temp文件夹下建一个font_properties文件,3.01版本的OCR需要这个文件,该文件的目的是提供输出时识别出来的字体样式信息,文件的格式为

timesitalic 1 0 0 1 0

我们可以根据实际情况新建font_properties,我写的是

custom 0 0 0 0 0

意思是普通字体,没有任何格式。

6 生成.tr训练文件

E:\Tesseract-ocr\tesseract.exe custom.tif custom nobatch box.train

然后执行以下命令

D:\Trainocr\Tesseract-ocr\temp>..\mftraining.exe -F font_properties -U unicharset custom.tr

8、Clustering,输入命令

D:\Trainocr\Tesseract-ocr\temp>..\cntraining.exe custom.tr

9、此时在temp文件夹下已经有很多文件了,需要把inttemp,Microfeat,normproto,pffmtable,unicharset这几个文件加上前缀custom. (注意有个点号),然后输入以下命令

D:\Trainocr\Tesseract-ocr\temp>..\combine_tessdata.exe custom.

必须确定的是第2、4、5、6行的数据不是-1,那么一个新的字典就算生成了。这样我们就可以用这个新字典来识别了,将生成的custom.traineddata文件拷贝到tessdata文件夹下,然后( test.jpg这个图片放在新建temp文件夹下)

tesseract.exe test.jpg result –l custom

就可以通过新的字典来识别,测试结果表明,识别率确实提高了。现实应用中我们需要使用多张图片来通过上面的步骤来生成我们需要的识别库,这样识别率才能提高。

ps:文章转自

转载地址:https://blog.csdn.net/leifengpeng/article/details/52089166 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:关于Android 4.4(华为)调用系统相机问题
下一篇:关于Android热修复技术(AndFix—阿里)

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月14日 20时28分48秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

计算机二级java技巧,计算机二级报java难考吗 2019-04-21
php foreach 数据库,php – 使用foreach将数据库检索的数据排列在HTML表中 2019-04-21
拉格朗日matlab编程例题,Matlab习题讲解.doc 2019-04-21
case是不是php语言关键字,PHP语言 switch 的一个注意点 2019-04-21
linux php mkdir失败,linux – mkdir错误:参数无效 2019-04-21
config.php渗透,phpMyAdmin 渗透利用总结 2019-04-21
java list 合并 重复的数据_Java ArrayList合并并删除重复数据3种方法 2019-04-21
c语言枪图形,6个变态的C语言Hello World程序[转载] 2019-04-21
郑州大学c语言课程设计2000行,C语言课程设计大作业(1).pptx 2019-04-21
Android5.1自定义闹钟铃声,Android 设置来电铃声、通知铃声、闹钟铃声中的坑 2019-04-21
android 程序更换字体,Android修改自己程序字体的方法详解 2019-04-21
c语言4x4矩形列互换,线反转法4x4键盘C语言程序问题.急... 2019-04-21
android服务开启线程,android之service与intentService的不同 2019-04-21
android 6.0 蓝牙进程,Android6.0-蓝牙权限问题 2019-04-21
wxml修改样式_[笔记]小程序支持的样式选择器 2019-04-21
banner 获取当前指示物_学会这些技巧,让你的banner脱颖而出 2019-04-21
线上banner什么意思_广交会线上直播怎么做 2019-04-21
获取默认值_TarsGo 服务获取自定义模版(配置)值 2019-04-21
启动rocketmq_rocketmq 部署启动指南-Docker 版 2019-04-21
热敏打印_热敏打印机需要碳带吗? 2019-04-21