Imatest结果自动读取生成excel文档的实现

对于imatest软件分析出来的结果,有价值的数据的位置大体上是固定的(左右上有些区别),而且字体都很一致(同一个数字而言),这就很适合用机器学习的方法将数字给读出来,并且生成excel文档。最开始我准备用tensorflow + lenet5网络来实现的,但是准确率不高,可能是数据量不够多,第二个可能是处理方法有问题。后来我发现了一个很简单的方法来实现,那就是

K-means聚类方法,准确率很高(100%,有点不可相信,但试了多次都是100%),速度快(分析一份数据形成结果只要5s不到),具体操作如下

1 首先是定位(大体定位就好),然后用图像分割的一些方法将每个数字都分割出来

这里我用的分割方法是扫描法(我是这么叫的,不知道学术上怎么叫)

大致分割后的结果(当然还有一些处理,使数字从背景中突出来,就不说了)

扫描后的结果,用matplotlib显示出来

为了后面K-means的计算,从上面看这些图片胖瘦都不一样,所以要将图片统一成一样大小

之前中了lenet-5的毒,都把图片统一成28*28大小,但是后面发现没有必要,而且图片小点计算理论上会更快(但是实际用时没有区别,囧),就统一成20*20大小

数据处理的思路就完成了

 

2第二步,K-means聚类计算数据的准备

K-means聚类计算需要准备标好label的数据,在这里,我们需要数字0-9,还需要小数点,负号,以及为了卡位排除干扰需要的等号,分号,中括号。这些数字怎么准备呢,没有素材,只能通过上面的方法一张张割,然后人眼分类。后来分好类之后,我用一个简单的图片相减,我竟然发现得到的数据大部分(比如数字,小数点,分号)实际上完全一样(等号和中括号由于卡位的原因,导致卡的位置不太一样,所以这些数据不一样),所以实际上我只要分好一个,然后复制就好了,囧。下图中10-15表示得是其他一些符号,用数字表示

 

3数据准备好了,然后就是K-means聚类算法的那一套了

首先把所有图片变成矩阵,加上label放在矩阵的最后一列

然后新的图片分割成一个个数字,每个数字的图片也变成一个一维矩阵,简单粗暴的和上面的矩阵每一行的前400个数值做减法+取绝对值,再求和当作他们的距离

然后把这些距离排序,取前K个值得label,看K个值中哪个label最多,则就是哪个数。

通过实践发现K取3,5,7,甚至11,15差别不大,那就随便选

很简单得方法,效果却很好,识别率100%,这么高我觉得是数据太好得原因,因为是印刷体,每个数字都一样,不像手写有变化

 

4边角料工作

1)根据上面得到得数字,加一些判定,将每个数字组合成最后得结果,比如上面分割=8.73 ,得到得结果要是8.73才对

2)写一个GUI来进行操作

3)生成excel文档

4)打包成可执行文件

 

目前存在得问题是打包可执行文件得时候,发现没有把第二步图片打包进去,不能很潇洒得单独一个exe文件能执行,还要依靠那个文件夹,囧

 

最终生成得结果excel文档,完全正确,哈哈

 

用软件统一了一下时间,从按生成结果,到结果生成,只要4.3s-4.8s

奇怪得是计算一张图片要3.4s,计算十几张图片要4.3s

时间我估计都花在将图片转化成矩阵那里去了,本来想直接打印矩阵,不用转化,可能时间只需要2s

但是数据太大了,要打印复制出来占的空间太多,算了算了,不到5s也够用了

 

 

2020/9/3补充,今天发现并不是100%正确,原因是定位的时候图片位置没定准,导致部分截取的数字不完整,这些不完整的数字再去用来识别识别到的数字就不准确了

应对的办法,最容易想到的是加大数字库的数据,每个数字的截图截一部分的图片都加在数据库里面去,这样会提高准确率

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值