Android实现扫一扫识别图像数字(镂空图像数字Tesseract训练)(上)

关于

应项目需求,要开发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实现扫一扫识别图像数字(使用训练的库拍照查看扫描结果)(下)

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪の星空朝酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值