自动化工具 人工智能在自动化测试中的一点小实践

codyL · March 31, 2017 · Last by zhang replied at July 13, 2017 · 10363 hits
本帖已被设为精华帖!

楼主在自学完人工智(ruo)能(zhi)后,一直都没有在测试工作中找到可施展的地方。碰巧最近再和360的同行交流后,灵光一闪,有了今天的文章。

背景

花椒相机是360发布的一款拍照APP,可以在照片中加入各种小插件来美化照片。尽管自动化可以搞定该APP拍照的大部分功能,但是对于加入插件后的照片是否正确却无法验证,只能通过保存到本地,进行人工检查。无法使自动化形成一个闭环,未能使自动化的价值最大化。

可行性分析

既然可以拍照把照片保存到本地,当照片变多后,就形成了大量的照片数据,这些照片完全就可以再利用起来,用人工智能来玩。

工具选择

  • Google出品的TensorFlow,说真的,楼主倒腾了两天TensorFlow,硬是没搞出个结果来,所以放弃了。
  • Python机器学习包,Scikit-learn,超好用的机器学习包,一直都在用这个机器学习包。

工欲善其事必先利其器

这里简单的写下所需要的工具包的安装,如果安装的时候遇到了各种莫名其妙的报错问题,那么Google一下

  • 楼主的Python版本是2.7,已经安装好pip,所以只要简单几步就可以安装好运行Scikit-learn所需要的环境

    • 安装Numpy
    $ sudo pip install numpy
    • 安装Scipy
    $ sudo pip install scipy
    • 安装Scikit-learn
    $ sudo pip install scikit-learn
    • 安装PIL, 这个用来读取图片,到官网下载安装包到本地,切换到解压路径
    $ sudo python setup.py install

    注意: 有可能还要安装JPEG的包,这个取决于本机是否已经安装,未安装的可以参考网上教程

其他

  • 训练数据以及测试数据,这里楼主自拍了7种不同插件的照片共计136张,测试数据5种共计5张

    对于机器学习来说,数据是越多越好越多越好,更多的数据会让你的模型效果更佳 :)

  • 你仅仅需要一点点机器学习的基础知识,以及Python基础知识。

那我们就从这里开始进入正文

因为楼主的目的是要对图片进行多分类,因为楼主的数据里面已经有X -> Y了,所以这是一种有监督学习。
首先我们要确定的是用什么算法来训练数据,这里楼主主要试验了两种算法:

  1. KNN

    使用KNN的时候,因为数据样本不够多,正确率大概在60%左右,不是太可观的结果。

  2. SVM
    对于,支持向量机,也使用了两种算法

    1. SVC:"one-against-one"策略
    2. LinearSVC:"one-vs-the-rest"策略

代码如下:

import Image
import numpy as np
import os
from sklearn import svm

def getTrainClass(category):
if category == 'Train':
classes = {0, 1, 2, 3, 4, 5, 6, 7}
else:
classes = {0, 1, 2, 5, 7}
return classes

def getImageData(path,classes):
ImageList = []
LabelList = []
for name in classes:
class_path = cwd + path + "/" + str(name) + "/"
for image_name in os.listdir(class_path):
image_path = class_path + image_name
if 'JPG' in image_path:
img = Image.open(image_path)
ImageList.append(np.asarray(img).flatten())
LabelList.append(name)
return ImageList, LabelList

cwd = '/home/hadoop/Pictures/pic1/'

TrClasses = getTrainClass('Train')
tr_img, tr_label = getImageData('Train',TrClasses) #加载训练数据
tstClass = getTrainClass('Validation')
tst_img, tst_label = getImageData('Validation',tstClass) #加载测试数据

svcClf = svm.LinearSVC() #直接使用默认参数就好了
svcClf.fit(tr_img,tr_label)

Z = svcClf.predict(tst_img)

result = (1 - np.sum(Z==tst_label)/float(len(tst_img)))
print "\nthe total error rate is: %f" %result

使用LinearSVC训练数据的时候,效率稍微有点低,比直接使用SVC低,但是别人正确率高呀
结果如下:

剩下要做的是就是固化了,然后就可以直接调用了。

写在最后的话

这是时下很火热的人工智(RUO)能(ZHI)在测试中的一种应用,相信在测试工作中,还有很多地方可以使用人工智(RUO)能(ZHI)来提高咱们的工作效率。
那就自己多发现吧。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 38 条回复 时间 点赞

占个沙发。

恒温 将本帖设为了精华贴 31 Mar 16:00

人工智能必须加精啊,虽然我看不懂。。

人工智能+自动化测试,赞赞赞

好思路~👍
之前拿PIL做像素对比算百分比思路的算是有出路了😂
期待万张、十万张图训练后的准确度👍

codyL #6 · March 31, 2017 作者
天行 回复

如果只是为了做对比到没有必要上人工智能。
你都能拿到百分之的话,直接压缩成对应的图片去比较就可以了。
我这个场景是为了应对各种自拍的角度,以及杂乱背景环境下的图片验证。

codyL 回复

嗯,除了断言外,跑的步骤也截了一套图做基准来辅助,后期回归时出来的图跟基准那套做对比,当时隐约考虑过要不要走机器学习去提高对比的准确度,后来觉得截图对比这活儿本身的价值也不是很大然后犯懒用的PIL做来简单作个对比,误差大的偶尔翻翻看,再到后来对比完了也不看了[捂脸]。。。

前些天见了写搞直播流鉴黄和视频的,发现机器学习在这块还挺火的~

204几年 第三次世界大战
204几年 强人工智能出现

没看明白测试点呀。。。美颜、磨皮、瘦脸后验证还是不是刚刚那张照片里的人是吗?

天行 回复

想知道鉴黄的数据开源不😍 😍 😵

codeskyblue 回复

鉴黄的结果都是计算图片的涉黄概率,返回数据是些草草的涉黄程度(一般是正常、性感、违规三档)反馈给cdn和客户方,没啥特别的。
素材他们说是能找地方去买,好像是千张几毛到几块钱,你想问的是这个吧😂

我对人工智能很有兴趣,但是目前的认知还只是大学课本上的基础和几种算法,能请教一下,大神是怎么学习的么,或者是学习路线图

没怎么看懂

codyL #14 · April 01, 2017 作者
simple 回复

目前我想的测试点是,拍照后,选择插件拍照后,照片里面的插件是否正确。
再延伸,也可以判断美颜啊,这样那样的,取决于训练样本

15Floor has been deleted
codyL #16 · April 01, 2017 作者
子非鱼 回复

可以从网易公开课或者Coursera Andrew Ng的课开始
然后你还要学习线性代数,以及微积分

codyL #17 · April 01, 2017 作者
天行 回复

那个地方叫百度图片,是吗?

看了半天 也不知道怎么用起来

错误率是0 ?

把AI应用于测试,非常有趣的尝试,也期待楼主有更多深入的分享.
此外,搭车招募优秀的测试开发工程师参与到人工智能项目的测试开发工作, 有机会每天和优秀的AI Researcher一起探索人类未知的边界, 坐标上海

我觉得我们还是来讨论下人工智障的项目如何测试吧。。

codyL 回复

肯定不是x度~
有专门的卖图片素材的公司~
图片识别这块一般都爱用gpu算,部到阿里云上,感觉再写写也能搞搞简low版的鉴黄服务了~
对了,哥们儿,问个事儿,你在51testing上也发这个文了没?或是授权他们转载过没?

你好, 请问你的文章有没有投递到其他的渠道, 我们看看可否声明你的原创.

codyL #24 · April 01, 2017 作者
天行 回复

没有,就在这里发了,也没有授权转载过

codyL #25 · April 01, 2017 作者

没有

调用这个包,不需要自定义特征,就可以利用svm直接做分类吗?

codyL #27 · April 03, 2017 作者
willys 回复

图片的特征怎么做?

还是有个老问题,这个自动化测试程序本身出错的时候怎样发现?

先ai测完再人工检查一遍?或者是,直接认为这个程序不可能出错,而不需要再人工检查一遍?

挺不错的,个人觉得人工智能中的图像识别技术在UI层自动化测试上也可能会有很大的应用空间。

请问这个方法解决了什么问题呢?是不用人工校验了吗?还是仅仅是尝试?

codyL #31 · April 06, 2017 作者
ting 回复

这是两个不同的问题
我这个demo是用来检查一些自动化检查点检查不了的东西。
对于自动化程序本身出错,无法判断

codyL #32 · April 06, 2017 作者
Sutune 回复

对,有一定的应用空间,不过人工智能这个东西在门槛上有一定限制。
只能多尝试

codyL #33 · April 06, 2017 作者
sunny 回复

不用人工效验了呀。
e.g.
1.对于某些问题,自动化是无法判断到底是什么问题,只能截图第二天人工来检查判断,可以尝试这样解决。
2.对于某些即使自动化跑通过的场景也需要截图人工第二天核对的,也可以尝试通过这种思路来解决。

codyL 回复

不是说自动化程序出错,我是指你这个“判断自动化检查点检查不了的东西的程序”出错的时候,你怎么发现他出错了。

比如实际上这个点没pass,但是你这个程序给出的输出是pass,有没有可能出现这个情况,如果出现了,你怎样去发现?是通过对每次这个程序检查过的检查点做人工检查的方法来发现这种问题吗?

实际工作中我看到很多人实现了很神奇的自动化测试,却从来不会考虑这种测试本身有没有bug,也不考虑如果有bug能不能发现。我也从别人的自动化脚本里找出过一些非常隐蔽,但会导致整个测试白测的bug。绝没有给你挑刺的意思。

codyL #35 · April 09, 2017 作者
ting 回复

明白你的问题
其实我在做这个工具的时候,其实我是会在大量数据上做自测的,自测数据量占总样本的20%~30%
在这里我主要是要提一个思路以及实现,所以在文章里面跳过了cross validation这一步而已,直接训练完就去验证结果了,还有一个特殊点是,我这里的场景其实并不复杂,无非就是选择插件拍照保存输入,有很多细节或者特征是可以固定的,所以可以做到绝对100%全对

这个世界真的是欠了的债是就要还的, 最近一直在coursera上面看Andrew NG的课, 不过由于线性代数和微积分完全懵逼, 所以就去边补它们边看Andrew NG的课, 然而在学习微积分的路程上又遇到了三角函数(部分懵逼), 所以现在是在边看三角函数, 边看线性代数, 边看微积分, 边看Andrew NG的课....
我不管, 我会把机器学习坚持学下去的.

请问你的训练图片尺寸是多少?彩色还是灰度呢?训练一次需要多少时间呢?

codyL #38 · July 12, 2017 作者
xiaqing 回复

100*100,彩色RGB,所以feature有100*100*3
训练一次的话 ,因为我在虚拟机上跑的,可能时间不太准确,但是1一分钟之内是肯定可以搞定的

codyL #39 · July 12, 2017 作者
zhang 回复

加油,其实coursera上Andrew Ng的课是最简单的,看完还可以去网易公开课看看Andrew的公开课,属于进阶版
另外也不要想的那么复杂,机器学习在工程应用方面对数学的要求并没有那么高
难就难在调参,这是一门玄学

codyL 回复

嗯嗯, 我会加油的, 谢谢您的推荐啊。
可能是自己的相应基础技能还太不扎实, 所以看起来有点吃力, 不过绝对不会放弃的。😆

Seadragon [Topic was deleted] 中提及了此贴 15 Jun 16:06
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up