文章目录
想做什么
有一天,开发人员说,我在X.X.X版本中,做了XXXXXXX改变,App的页面切换"应该"能更快一点、"应该"能更快流畅一点。测试人员,怎么验证?
怎么做
埋点&眼睛看
在App端,统计耗时的主要方法有:
-
埋点:开发人员喜欢使用的方法。对于开发人员而言,在某项操作的起点、终点各打一个点,做个差,拿到耗时数据。
-
眼睛看:测试人员更喜欢使用的方法。这种方法统计出来的数据,是用户感知的最真实数据。测试人员也弄不到能打印日志的Debug版本测试包,也不知道应该怎么埋点。所以测试人员更喜欢"眼睛看"。
怎么用眼睛"看"
应付工作的,直接看App界面,拿个秒表,某项操作的起点记个点,终点记个点。早上俩小时,就干这一件事。
认真工作的,用手机录个视频,拿个分帧软件,一帧一帧看。这种方法能保证数据准确,但是效率太低。还是早上俩小时,就干这一件事。
怎么提升统计分析的效率
关于stagesepx
这里给大家介绍一种基于图像处理与机器学习的自动化视频分析方案 —— stagesepx。
stagesepx能将视频拆分为帧,并将其划分为多个阶段。在此之后,你可以清晰地得知视频包含了几个阶段、以及每个阶段在干什么,且这一切都是自动完成的。
简单的例子
App启动页性能优化。这几乎是每个App开发团队绕不开的工作之一。下面将通过一个简单的例子给大家介绍如何使用stagesepx做App启动耗时统计。
我们用手机自带的录屏工具,录制了一段某App的启动视频。我们可以看到App启动可以分成以下几个阶段:
-
A.手机桌面
-
B.用户点击App图标
-
C.打开App,显示某App首屏
-
D.进入App首页
我们将App启动耗定义为:D - B。App启动的主要阶段如下:
怎么使用stagesepx进行性能统计
本文介绍的使用stagesepx方式统计分析某项操作的耗时,主要是基于Keras分析方法。至于SVM分析方法,由于准确度没有前者高,固不在此进行详细介绍。使用stagesepx方式进行耗时统计的整个过程可以被分为"切割视频"、“判断稳定区间”、"训练模型"和"预测分析"四个步骤。
视频切割和判定稳定区间
from stagesepx.cutter import VideoCutter
from stagesepx.video import VideoObject
# 将视频切分成帧
file_name = './new_Screenrecorder-2020-06-26-06-14-58-29.mp4'
video = VideoObject(file_name, pre_load=True)
# 新建帧,计算视频总共有多少帧,每帧多少ms
video.load_frames()
# 压缩视频
cutter = VideoCutter()
# 计算每一帧视频的每一个block的ssim和psnr。
res = cutter.cut(video, block=6)
# 计算出判断A帧到B帧之间是稳定还是不稳定
stable, unstable = res.get_range(threshold=0.96)
# 把分好类的稳定阶段的图片存本地
res.pick_and_save(stable, 20, to_dir='./picture/stable_frame', meaningful_name=True)
通过上述过程,stagesepx可以将一个视频文件切分成若干帧图像,并将其认定的处于稳定状态的图像保存到"stable_frame"文件夹内。
在"stable_frame"文件夹中,帧图像又被细分到了多个子文件夹中。stagesepx判定每个子文件夹中的帧图像为一个"稳定区间"。它认为"稳定区间"中的图像内容是处于"非变化状态"的。"stable_frame"文件夹中每个"稳定区间"内容如下:
这时候大家肯定有个疑惑,很多看起来稳定的区间,为什么会被拆分开。例如文件夹0、1和2,看起来都处于"手机桌面"阶段,看起来多帧图像间是没有变化的,但是却被切分成3个稳定区间。那是因为,在操作App过程中,很多细微的变化,是不容易察觉的。但是当我们将其切分成一帧帧的图像进行比对时,机器很容易就发现帧和帧图像之间的区别了。这里不用着急,具体稳定区间的个数,也就是说"stable_frame"中文件夹的数量、每个子文件夹中帧的数量,都可以通过参数控制。如何使用这些参数我们稍后介绍。
模型训练
现在我们要使用"stable_frame"中稳定区间内的帧图像,来训练一个模型文件,该模型文件将用于后续的预测工作。在我们调用"cutter.cut(video)“方法后,视频文件被切分到了上面的8个文件夹中。正如上面所说,这个切分结果并不是很让人满意,它将视频切得"太细"了。这时候我们可以对切分结果进行"人工调整”。如果某个本应该被划分在同一个稳定区间的帧图像被分在了多个文件夹,我们可以人工将其合并到一个文件夹下。人工调整过程如下:
随后对更新后"stable_frame"文件夹内的帧图像进行训练,得到模型文件。
from stagesepx.classifier.keras import KerasClassifier
# 训练模型文件
cl = KerasClassifier(
# 训练轮数
epochs=10
)
cl.train('./stable_frame')
cl.save_model('./model.h5', overwrite=True)
预测
得到模型文件后,我们将其存储到本地。后续我们将使用该模型,预测其他视频文件中,App的启动耗时。预测过程如下:
# 使用Keras方法进行预测
cl = KerasClassifier()
cl.load_model('./model.h5')
# 将视频切分成帧
file_name = './mp4_for_forecast.mp4'
video = VideoObject(file_name)
# 新建帧,计算视频总共有多少帧,每帧多少ms
vi