51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2666|回复: 3
打印 上一主题 下一主题

[转贴] 人工智能在自动化测试中的一点小实践

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2017-6-1 15:48:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小皮球的故事 于 2017-6-1 15:49 编辑

楼主在自学完人工智(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了,所以这是一种有监督学习。
首先我们要确定的是用什么算法来训练数据,这里楼主主要试验了两种算法:
  • KNN
    使用KNN的时候,因为数据样本不够多,正确率大概在60%左右,不是太可观的结果。
  • SVM
    对于,支持向量机,也使用了两种算法
    • SVC:"one-against-one"策略
    • LinearSVC:"one-vs-the-rest"策略
代码如下:
  1. import Image
  2. import numpy as np
  3. import os
  4. from sklearn import svm

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

  11. def getImageData(path,classes):
  12.     ImageList = []
  13.     LabelList = []
  14.     for name in classes:
  15.         class_path = cwd + path + "/" + str(name) + "/"
  16.         for image_name in os.listdir(class_path):
  17.             image_path = class_path + image_name
  18.             if 'JPG' in image_path:
  19.                 img = Image.open(image_path)
  20.                 ImageList.append(np.asarray(img).flatten())
  21.                 LabelList.append(name)
  22.     return ImageList, LabelList

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

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

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

  30. Z = svcClf.predict(tst_img)

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


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


剩下要做的是就是固化了,然后就可以直接调用了。
写在最后的话这是时下很火热的人工智(RUO)能(ZHI)在测试中的一种应用,相信在测试工作中,还有很多地方可以使用人工智(RUO)能(ZHI)来提高咱们的工作效率。
那就自己多发现吧。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2017-6-1 15:56:12 | 只看该作者
回复 支持 反对

使用道具 举报

  • TA的每日心情
    擦汗
    前天 08:59
  • 签到天数: 1021 天

    连续签到: 2 天

    [LV.10]测试总司令

    4#
    发表于 2017-6-1 15:59:28 | 只看该作者
    支持下 不错!
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-21 08:42 , Processed in 0.081586 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表