乐趣区

关于人工智能:图像分类AI-与全自动性能测试

原文由 williamfzc 发表于 TesterHome 社区,点击 [原文链接] 中转原帖与作者在线交换。

我的项目地址:https://github.com/williamfzc…
官网文档:https://williamfzc.github.io/…
应用指引:https://github.com/williamfzc…

前言

之前我陆陆续续分享了一些图像识别在测试畛域内的利用实际,功能测试与性能测试都有波及。前段时间写了 让所有人都能用图像识别做 UI 自动化 与 基于图像识别的 UI 自动化解决方案 之后,随着他逐步稳定下来,在功能测试的这一块的集体指标终于根本算是实现了。

在性能测试方向,近期也有不少同学始终很关注这项技术在性能测试上的利用。这是之前陆陆续续做的两个版本:

  • 利用图像识别与 OCR 进行速度类测试
  • 再次利用图像识别与 OCR 进行性能测试

只管起初的版本曾经根本可用(起初随着迭代,效率变得太低了,又变得不太可用了),但总感觉,这不是一个最现实的版本。

通过这段时间,我终于做好了一个更加合乎我预期的计划:stagesep-x。

为什么又开新坑

与之前的版本相比,它原理齐全不同,应用场景也不完全一致。所以我抉择另外开一个我的项目而不是持续迭代。

stagesepx 能做什么

在软件工程畛域,视频是一种较为通用的 UI(景象)形容办法。它可能记录下用户到底做了哪些操作,以及界面产生了什么事件。例如,上面的例子形容了从桌面关上 chrome 进入 amazon 主页的过程:

stagesepx 可能 主动侦测 并提取视频中的稳固或不稳固的阶段(例子中,stagesepx 认为视频中蕴含三个稳固的阶段,别离是点击前、点击时与页面加载实现后):

而后,主动失去每个阶段对应的工夫区间:

例如,从图中能够看出:

  • 视频开始直到 0.76s 时维持在阶段 0
  • 在 0.76s 时从阶段 0 切换到阶段 1
  • 在 0.92s 时从阶段 1 切换到阶段 0,随后进入变动状态(当 stagesepx 无奈将帧分为某特定类别、或帧不在待剖析范畴内时,会被标记为 -1,个别会在页面发生变化的过程中呈现)
  • 在 1.16s 时达到阶段 2

以此类推,咱们可能对视频的每个阶段进行十分粗疏的评估。通过观察视频也能够发现,辨认成果与理论完全一致。

在运行过程中,stagesepx 弱小的快照性能可能让你很轻松地晓得每个阶段到底产生了什么:

而所有的所有只须要一个视频,无需前置模板、无需提前学习。

利用举例

所有 stagesepx 须要的只是一个视频,而且它实质上只跟视频有关联,并没有任何特定的应用场景!所以,你能够纵情施展你的想象力,用它帮忙你实现更多的性能。

APP

  • 后面提到的利用启动速度计算
  • 那么同理,页面切换速度等方面都能够利用
  • 除了性能,你能够应用切割器对视频切割后,用诸如 findit 等图像识别计划对功能性进行校验
  • 除了利用,游戏这种无奈用传统测试方法的场景更是它的主场

除了 APP?

  • 除了挪动端,当然 PC、网页也能够同理计算出后果
  • 甚至任何视频?

Do whatever you want:)

应用

装置

Python >= 3.6

pip install stagesepx 

例子

  • 疾速开始
  • 残缺教程

还想要更多功能?

当然,stagesepx 不仅如此。但在开始上面的浏览之前,你须要理解 切割器(cutter)与 分类器(classifier)。stagesepx 次要由这两个概念组成。

切割器

顾名思义,切割器的性能是将一个视频依照肯定的法则切割成多个局部。他负责视频阶段划分与采样,作为数据采集者为其余工具(例如 AI 模型)提供自动化的数据反对。它应该提供敌对的接口或其余模式为内部(包含分类器)提供反对。例如,pick_and_save办法齐全是为了可能使数据间接被 keras 利用而设计的。

切割器的定位是预处理,升高其余模块的运作老本及反复度。失去稳固区间之后,咱们能够晓得视频中有几个稳固阶段、提取稳固阶段对应的帧等等。在此基础上,你能够很轻松地对阶段进行图片采样(例子中为每个阶段采集 3 张图片,一共有 3 个稳固阶段,别离名为 0、1、2)后保存起来,以备他用(例如 AI 训练、性能检测等等):

分类器

针对下面的例子,分类器应运而生。它次要是加载(在 AI 分类器上可能是学习)一些分类好的图片,并据此对帧(图片)进行分类。

例如,当加载上述例子中稳固阶段对应的帧后,分类器即可将视频进行帧级别的分类,失去每个阶段的精确耗时。

分类器的定位是对视频进行帧级别、高准确度的图片分类,并可能利用采样后果。它应该有不同的存在状态(例如机器学习模型)、以达到不同的分类成果。例如,你能够在前几次视频中用采样失去的数据训练你的 AI 模型,当它收敛之后在你将来的剖析中你就能够间接利用训练好的模型进行分类,而不须要前置的采样过程了。stagesep2 实质上是一个分类器。

不同状态的分类器

stagesepx 提供了两种不同类型的分类器,用于解决切割后的后果:

  • 传统的 SSIM 分类器无需训练且较为轻量化,多用于阶段较少、较为简单的视频;
  • SVM + HoG 分类器在阶段简单的视频上体现较好,你能够用不同的视频对它进行训练逐步提高它的辨认成果,使其足够被用于生产环境;

目前基于 CNN 的分类器曾经初步实现,在稳固后会退出:)但目前来看,前两个分类器在较短视频上的利用曾经足够了(可能须要调优,但原理上是够用的)。

事实上,stagesepx 在设计上更加激励开发者 依据本人的理论须要 设计并应用本人的分类器,以达到最好的成果。

丰盛的图表

想得到耗时?stagesepx 曾经帮你计算好了:

快照性能可能让你很直观地晓得每个阶段的状况:

优异的性能体现

在效率方面,汲取了 stagesep2 的教训(他真的很慢,而这一点让他很难被用于生产环境),在我的项目布局期咱们就将性能的优先级进步。对于该视频而言,能够从日志中看到,它的耗时在惊人的 300 毫秒左右(windows7 i7-6700 3.4GHz 16G):

2019-07-17 10:52:03.429 | INFO     | stagesepx.cutter:cut:200 - start cutting: test.mp4
...
2019-07-17 10:52:03.792 | INFO     | stagesepx.cutter:cut:203 - cut finished: test.mp4

除了惯例的基于图像自身的优化伎俩,stagesepx 次要利用采样机制进行性能优化,它指把工夫域或空间域的间断量转化成离散量的过程。因为分类器的精确度要求较高,该机制更多被用于切割器局部,用于减速切割过程。它在计算量方面优化幅度是十分可观的,以 5 帧的步长为例,它相比优化前节俭了 80% 的计算量。

当然,采样相比间断计算会存在肯定的误差,如果你的视频变动较为强烈或者你心愿有较高的准确度,你也能够敞开采样性能。

更强的稳定性

stagesep2 存在的另一个问题是,对视频自身的要求较高,抗干扰能力不强。这次要是它自身应用的模块(template matching、OCR 等)导致的,旋转、分辨率、光照都会对辨认成果造成影响;因为它强依赖事后筹备好的模板图片,如果模板图片的录制环境与视频有所差别,很容易导致误判的产生。

而 SSIM 自身的抗干扰能力绝对较强。如果应用默认的 SSIM 分类器,所有的数据(训练集与测试集)都来源于同一个视频,保障了环境的一致性,躲避了不同环境(例如旋转、光照、分辨率等)带来的影响,大幅度降低了误判的产生。

Bug Report

可想而知的,要思考到所有的场景是十分艰难的,在项目前期很难做到。

有什么倡议或者遇到问题能够通过 issue 反馈给我 :)

我的项目地址

https://github.com/williamfzc…

原文由 williamfzc 发表于 TesterHome 社区,点击 [原文链接] 中转原帖与作者在线交换。

今日份的常识已摄入!想要学习更多干货常识、结识品质行业大牛和业界精英?
第十届中国互联网测试开发大会·深圳,理解下 >>

退出移动版