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.生成聚字符特征文件

要生成 inttemppffmtableshapetablenum.unicharset文件
打开cmd输入如下:

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

会在目录下生成这四个文件:

9.生成字符正常化特征文件

生成 normproto 文件,打开cmd输入如下:

cntraining num.normal.exp0.tr

如下图:

10. 文件重命名特征文件

修改inttemppffmtableshapetablenum.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训练)(上)相关推荐

  1. Android实现扫一扫识别图像数字(使用训练的库拍照查看扫描结果)(下)

    Android实现扫一扫识别图像数字(使用训练的库拍照查看扫描结果)(下) 关于 效果图 第一步,添加我们的训练库 编写扫描框控件 新建扫码界面ScannerActivity.java 关于二维码拍照 ...

  2. 安卓实现扫一扫识别数字

    本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. 公司业务需求,需要做手机号码的识别.所以有了此篇文章,现在就将实现过程分享给大家. 1.准备工作 首先实现识别数字等字符,我们要 ...

  3. Android扫车牌号识别技术SDK

    Android扫车牌号识别技术SDK Android扫车牌号识别技术SDK描述 Android扫车牌号识别技术SDK是我公司开发的基于移动平台的车牌识别软件开发包,支持android.iOS等多种主流 ...

  4. android 带手电筒的扫一扫(1 可以自动打开手电筒,2 可以自动对焦,增加识别率)

    android 扫一扫 功能: 1 可以类似于摩拜单车的扫一扫,自动打开手电筒图标让我们打开手电筒. 2 可以自动聚焦 解释说明: 功能1 加上了手电筒的效果 说明 在项目中 CaptureActiv ...

  5. Android二维码多码识别,相册选择二维码,自定义扫码界面

    现在很多App都有扫码识别二维码的场景,最新的扫码已经支持全屏扫码.从相册选取二维码识别,以下使用基于Zxing封装的一个库:https://github.com/maning0303/MNZXing ...

  6. 发票扫一扫,OCR识别功能

    现如今硬件发展突飞猛进,移动端OCR识别的功能借助强大的摄像头的像素做的非常成熟,而且都不是人工手动拍照来完成的,都是通过Android.iOS平台扫一扫自动ocr识别完成的,比如说,移动端扫一扫发票 ...

  7. 名片识别扫一扫,如此实现的

    名片识别"扫一扫"是如何实现的,优点主要表现为: 名片扫一扫识别SDK通过调用识别功能Activity,实现APP应用程序接口调用,支持JAVA.Object-C等多种语言开发调用 ...

  8. 名片扫一扫识别OCR技术

    出去见客户,交朋友,我们都会交换名片,一般情况下送出去多少名片,就会收到多少名片.我们都会拿一个整理名片的盒子,甚至专门用一个抽屉来整理我们收集起来的名片,有时候突然想起一位朋友,但想从名片堆里查找出 ...

  9. Android 集成华为HMS Scankit实现扫一扫二维码

    华为统一扫码服务(Scan Kit)提供便捷的条形码和二维码扫描.解析.生成能力,帮助您快速构建应用内的扫码功能. Scan Kit可以实现远距离码或小型码的检测和自动放大,同时针对常见复杂扫码场景( ...

最新文章

  1. css3-1 css3游戏介绍、css3样式和优先级
  2. 4.3---建立高度最小二叉树
  3. hive 导出json格式 文件_hive存储json格式文件
  4. python3爬取数据存入mysql_pyspider 数据存入Mysql--Python3
  5. leetcode算法题第二题(c++)
  6. mybatis中的#{}与${}在原理上的区别
  7. 计算机专业专业课代号408,计算机408有多难
  8. Ubuntu安装dos2unix命令
  9. 启用计算机并口,电脑并口被禁用怎么办
  10. 如何在面试中介绍自己的项目经验
  11. 直播源php代理用什么主机,流媒体直播系统_流媒体直播php源码_流媒体直播源码...
  12. linux系统安装MySQL数据库安装保姆级教程及1045错误和2058问题解决
  13. Julia文件和文件夹相关基础函数01
  14. iOS 地图导航路线规划详解
  15. win10删除历史壁纸记录
  16. java找不到的模板_java – 在当前主题中找不到样式’coordinat...
  17. 智能视频分析监控技术
  18. 什么是IOC容器——简单明了
  19. CGAL-由多面体Polyhedron_3输出obj文件
  20. GeekPwn 2021上演极客之夜攻防秀,腾讯安全携手推动网络安全人才培养

热门文章

  1. 预装WIN8改装WIN7之BIOS设置
  2. 基于深度学习的烟草工业人员行为分析管控研究(二)
  3. 小聊聊NGUI中Panel的Clip功能(之一)
  4. 06-图1 列出连通集(25 分)
  5. SWUST OJ#971 #972 返回二叉树宽度和深度
  6. javascript字符串匹配正则表达式方法
  7. QGIS二次开发 数据编辑功能等
  8. 108页6万字某小区施工组织设计方案
  9. Git是什么?有什么用?
  10. 51单片机硬件设计-最小系统(一)