Android实现扫一扫识别图像数字(镂空图像数字Tesseract训练)(上)
Android实现扫一扫识别图像数字(镂空图像数字训练)(上)
- 关于
- 需要的工具以及安装运行步骤如下
- 1.安装tesseract
- 2.下载使用jTessBoxEditor与素材准备
- 3.开始操作 步骤一 生成box文件
- 4.步骤二 使用jTessBoxEditor修正.box文件
- 5.生成font_properties文件
- 5.使用tesseract生成.tr训练文件
- 6.生成字符集文件
- 7.生成shape文件
- 8.生成聚字符特征文件
- 9.生成字符正常化特征文件
- 10. 文件重命名特征文件
- 11.合并训练文件
- 12.验证识别效果
关于
应项目需求,要开发Android实现扫一扫将数字识别出来。但是网上得一些涉及到数字的识别率不高。所以需要自己针对要扫描得数字类型进行特别训练。查了一些资料,Android想扫描识别数字需要采用OCR (Optical Character Recognition,光学字符识别)来实现。tess-two使我们可以在Android上使用OCR。本篇主要讲解得是学习训练识别镂空数字的过程。
需要的工具以及安装运行步骤如下
1.安装tesseract
tesseract不是python的库文件,因此需要从网上下载安装,安装文件下载请点这里,进入网页后,根据需要选择高亮的蓝色字体进行下载,下载后按默认安装即可。
tesseract实际上是在windows命令行模式下使用的工具,因此需要配置其环境变量。配置方法如下:打开我的电脑属性——更改设置——高级——环境变量,在系统变量中添加tesseract的路径。如下:
新增名为TESSDATA_PREFIX 变量值为D:\Program Files (x86)\Tesseract-OCR\tessdata (这里放你的安装地址里面得tessdata)如下:
打开cmd输入 tesseract -v 如果显示版本信息则表示成功。失败的话可能是你得电脑没有java环境。
2.下载使用jTessBoxEditor与素材准备
下载地址 网盘 提取码 tobe(不过不是最新的)。最新下载地址
下载完成后直接解压到你想放到的盘区里,打开解压文件夹,找到里面train.bat的如下图,单机运行即为我们要修改训练数据的软件(这里是windows系统):
打开的界面如下,其中箭头所指的方向则是我们需要用到的修改产生的box文件:
下面就是我们的自己训练找的网图如下(你可以找自己要训练的数字类型):
需要先把其转为.tif格式图片,我们只需要使用电脑本身的画图工具另存为number01.tif图片如下:
这里样本图片越多越好,我就以这三张为例,打开我们的jTessBoxEditor软件,选择Tools选择Merge TIFF选项找到这三张图片,然后shift全选之后命名为一个新的图片。命名规范如下:
[lang].[fontname].exp[num].tif
这里我们命名为num.normal.exp0.tif 如下图:
3.开始操作 步骤一 生成box文件
打开cmd 输入如下命令:
tesseract num.normal.exp0.tif num.normal.exp0 batch.nochop makebox
这里我是先把图片放到了我的个人用户下面,这样就不用再num前面加上地址了:
这将会在13115下生成一个num.normal.exp0.box文件。
4.步骤二 使用jTessBoxEditor修正.box文件
我们打开jTessBoxEditor选择 Box Editor,然后打开我们刚才第二步合并出来的num.normal.exp0.tif图片,会在下方显示出识别的数据如下,其中最下方有三页,因为我们合并了三张,对每一张的数据进行修正,然后保存。:
要对每一页数据都进行校正,在上方进行多余行数的删减或是修改等等,这张截图是我已经修改好的。
5.生成font_properties文件
打开cmd输入如下:
echo normal 0 0 0 0 0 > font_properties
其中的normal是我们在前面定义图片素材格式时候使用的,num.normal 中的normal 你也可以改成其他字体类型。这个时候会在你的路径下生成一个文件:
5.使用tesseract生成.tr训练文件
打开cmd输入如下:
tesseract num.normal.exp0.tif num.normal.exp0 nobatch box.train
成功则如下:
这里如果出现错误一般可能是没有事先生成.box文件
6.生成字符集文件
打开cmd输入命令如下:
unicharset_extractor num.normal.exp0.box
如果出现如下图所示则表示成功:
这里说下我的出错坑之旅。报错大概率是因为你的路径或者文件名称问题。
一般可能出错如下:
Extracting unicharset from num.normal.exp0.box Cannot open box file num.norm
出现这个错误就是没有生成.box文件。
7.生成shape文件
打开cmd,输入如下:
shapeclustering -F font_properties -U unicharset -O num.unicharset num.normal.exp0.tr
效果如下:
如果这里报错如下:
Warning: No shape table file present: shapetable Failed to load font_propert
说明你的上面步骤还是出错了。百度也解决不了问题,所以建议文件路径放到你的用户下。
8.生成聚字符特征文件
要生成 inttemp
、pffmtable
、shapetable
和num.unicharset
文件
打开cmd输入如下:
mftraining -F font_properties -U unicharset -O num.unicharset num.normal.exp0.tr
会在目录下生成这四个文件:
9.生成字符正常化特征文件
生成 normproto
文件,打开cmd输入如下:
cntraining num.normal.exp0.tr
如下图:
10. 文件重命名特征文件
修改inttemp
、pffmtable
、shapetable
和num.unicharset
文件名字为[lang].xxx文件,例如,num.inttemp
所有的生成文件如下:
11.合并训练文件
打开cmd,输入如下:
combine_tessdata num.
# offset 1、3、4、5、13这些项不是-1,表示新的字库生成成功。
Combining tessdata files
Output num.traineddata created successfully.
1:unicharset:size=676, offset=168
3:inttemp:size=132160, offset=844
4:pffmtable:size=117, offset=133004
5:normproto:size=1262, offset=133121
13:shapetable:size=166, offset=134383
如下图:
此时可以在目录下找到一个名为num.traineddata的文件,此时我们需要将这个包拷贝到Tesseract-OCR–>tessdata目录下,如下图:
12.验证识别效果
自己手写一张镂空数字,并拍照把它命名为test.png图片。如下图(你可以网上百度,手写有点丑):
调用cmd,输入如下命令:
tesseract test.png newresulttest -l num
这个方法是将我们识别出来的结果通过新建newresult.txt文本方式显示出来,里面内容就是我们识别的数据了。
虽然数字8没有识别出来,但是识别率已经很高了,毕竟我们的素材样本很少,样本越多,识别率也就越高。
本篇内容就到此结束了,整体流程也很清晰,下一篇就是在Android上实现扫描图像识别数字功能了。
下一篇Android实现扫一扫识别图像数字(使用训练的库拍照查看扫描结果)(下)
Android实现扫一扫识别图像数字(镂空图像数字Tesseract训练)(上)相关推荐
- Android实现扫一扫识别图像数字(使用训练的库拍照查看扫描结果)(下)
Android实现扫一扫识别图像数字(使用训练的库拍照查看扫描结果)(下) 关于 效果图 第一步,添加我们的训练库 编写扫描框控件 新建扫码界面ScannerActivity.java 关于二维码拍照 ...
- 安卓实现扫一扫识别数字
本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. 公司业务需求,需要做手机号码的识别.所以有了此篇文章,现在就将实现过程分享给大家. 1.准备工作 首先实现识别数字等字符,我们要 ...
- Android扫车牌号识别技术SDK
Android扫车牌号识别技术SDK Android扫车牌号识别技术SDK描述 Android扫车牌号识别技术SDK是我公司开发的基于移动平台的车牌识别软件开发包,支持android.iOS等多种主流 ...
- android 带手电筒的扫一扫(1 可以自动打开手电筒,2 可以自动对焦,增加识别率)
android 扫一扫 功能: 1 可以类似于摩拜单车的扫一扫,自动打开手电筒图标让我们打开手电筒. 2 可以自动聚焦 解释说明: 功能1 加上了手电筒的效果 说明 在项目中 CaptureActiv ...
- Android二维码多码识别,相册选择二维码,自定义扫码界面
现在很多App都有扫码识别二维码的场景,最新的扫码已经支持全屏扫码.从相册选取二维码识别,以下使用基于Zxing封装的一个库:https://github.com/maning0303/MNZXing ...
- 发票扫一扫,OCR识别功能
现如今硬件发展突飞猛进,移动端OCR识别的功能借助强大的摄像头的像素做的非常成熟,而且都不是人工手动拍照来完成的,都是通过Android.iOS平台扫一扫自动ocr识别完成的,比如说,移动端扫一扫发票 ...
- 名片识别扫一扫,如此实现的
名片识别"扫一扫"是如何实现的,优点主要表现为: 名片扫一扫识别SDK通过调用识别功能Activity,实现APP应用程序接口调用,支持JAVA.Object-C等多种语言开发调用 ...
- 名片扫一扫识别OCR技术
出去见客户,交朋友,我们都会交换名片,一般情况下送出去多少名片,就会收到多少名片.我们都会拿一个整理名片的盒子,甚至专门用一个抽屉来整理我们收集起来的名片,有时候突然想起一位朋友,但想从名片堆里查找出 ...
- Android 集成华为HMS Scankit实现扫一扫二维码
华为统一扫码服务(Scan Kit)提供便捷的条形码和二维码扫描.解析.生成能力,帮助您快速构建应用内的扫码功能. Scan Kit可以实现远距离码或小型码的检测和自动放大,同时针对常见复杂扫码场景( ...
最新文章
- css3-1 css3游戏介绍、css3样式和优先级
- 4.3---建立高度最小二叉树
- hive 导出json格式 文件_hive存储json格式文件
- python3爬取数据存入mysql_pyspider 数据存入Mysql--Python3
- leetcode算法题第二题(c++)
- mybatis中的#{}与${}在原理上的区别
- 计算机专业专业课代号408,计算机408有多难
- Ubuntu安装dos2unix命令
- 启用计算机并口,电脑并口被禁用怎么办
- 如何在面试中介绍自己的项目经验
- 直播源php代理用什么主机,流媒体直播系统_流媒体直播php源码_流媒体直播源码...
- linux系统安装MySQL数据库安装保姆级教程及1045错误和2058问题解决
- Julia文件和文件夹相关基础函数01
- iOS 地图导航路线规划详解
- win10删除历史壁纸记录
- java找不到的模板_java – 在当前主题中找不到样式’coordinat...
- 智能视频分析监控技术
- 什么是IOC容器——简单明了
- CGAL-由多面体Polyhedron_3输出obj文件
- GeekPwn 2021上演极客之夜攻防秀,腾讯安全携手推动网络安全人才培养