OCR软件测试自学,利用图像识别与 OCR 进行速度类测试

利用图像识别与 OCR 进行速度类测试

2018-11-20

2018-9-10

将 OCR 修改为非必要,只需要具备 python3 环境就可以进行分析了

关于速度类性能测试的一些想法

速度类测试包括了启动速度、页面切换速度等不同类型,其核心思想是根据关键时间点对应用运行状态进行划分,以得到应用在不同状态间消耗的时间以判定运行效率。

其核心技术点是,关键点判定。个人认为可以分为依赖系统与不依赖系统两个方向:

依赖系统:倾向于与应用有更强的耦合,分析的主体通常是应用本身

深入应用,在应用中通过各种方式(通常是 log)打点,最后通过分析日志得到点位

优点是由于深入到源码中,数据采集相对容易一些

缺点是需要修改到源码,并不是很方便。对于一些无法接触源码的项目行不通

不依赖系统:倾向于完全脱离应用进行分析,分析的主体可能是视频、图片等等

通过外置摄像机录制应用的响应过程,对视频进行采样、分帧,利用图像识别的手段得到点位

优点是对于应用本身几乎没有影响,也不需要接触源码,非常干净;且分析对象就是用户实际的体验效果,比起在源码中加 log 更加直观

缺点是技术难度相对比较大,对设备要求也比较高,需要有一套优秀的策略

比较好的策略是两条线都要做,在相辅相成的同时能够互相保证彼此的可靠性达到完全的覆盖。

日志采集是纯系统层面的行为,可能会有系统日志正常但表现异常的情况

图像识别是纯用户层面的行为,对于状态的控制很难达到如日志般精确细致

本文面向图像识别方案展开,力图覆盖更多的实际场景。

主要方案

一般来说,通过图像识别来进行测试分为三个步骤:

图像/视频 采集

这个部分通常由高速摄像机或稳定帧率的外置相机进行拍摄,得到固定帧率的视频

软件录制是不靠谱的,很容易出现帧率不稳定。而如果时间与帧数不能精确对应的话数据会失真

视频处理

提取视频中的信息,输出成为我们需要的形式

也是整个流程最关键的部分

数据分析

将视频处理的结果进行分析,得到结论或生成报告

其中,第一点如果能够将设备固化好是比较好解决的,而数据分析取决于视频处理的结果。

所以针对这种情况,我利用了图像识别与 OCR,编写了一套性能测试工具,用于提取视频中有用的信息。

使用

通过使用stagesep,你可以将一段视频中每一帧的特征提取出来,生成数据供后续分析。

你只需要:

# 导入视频ssv = stagesep.load_video('res/demo_video.mp4')

# 分析视频result = stagesep.analyse_video(ssv)

就能够将视频中的特征提取出来!以|,,|为分隔符,分别为:

帧编号

帧对应的视频时间

当前帧包含的文字

如结果为["微信"],代表当前帧中出现了微信字样

可以借此得到视频的不同阶段

与首帧的图像相似度

可以得到开始出现变化的时刻

与末帧的图像相似度

可以得到进入稳态的时刻

当前帧是否存在特征图片

例如,传入一张特征图片,是一个表情包

如果结果为[[0, 0.27060889074688604]],两个参数分别代表:

当前帧没有出现该表情包

match_template的结果为 0.27

适合在没有文字的场景下进行阶段界定

1|,,|0.03333333333333333|,,|["Component\u79d2\u5f00"]|,,|1.0|,,|0.8744666747566574|,,|[[0, 0.27060889074688604]]

2|,,|0.06666666666666667|,,|["\u6ef4\u6ef4\u51fa\u884c\u79d2\u5f00", "Component\u79d2\u5f00"]|,,|0.9945336759012924|,,|0.8732500535811166|,,|[[0, 0.2702154980448374]]

3|,,|0.1|,,|["\u6ef4\u6ef4\u51fa\u884c\u79d2\u5f00", "Component\u79d2\u5f00"]|,,|0.9906519049687903|,,|0.8724468661392125|,,|[[0, 0.27054042596336]]

4|,,|0.13333333333333333|,,|["Component\u79d2\u5f00"]|,,|0.988436570914413|,,|0.8721808443349266|,,|[[0, 0.2707208582528737]]

5|,,|0.16666666666666666|,,|["Component\u79d2\u5f00"]|,,|0.9871368443037327|,,|0.8719868653399506|,,|[[0, 0.27088961169977555]]

6|,,|0.2|,,|["Component\u79d2\u5f00"]|,,|0.9859772325311379|,,|0.8717396593736755|,,|[[0, 0.271510313888945]]

7|,,|0.23333333333333334|,,|["\u6ef4\u6ef4\u51fa\u884c\u79d2\u5f00", "Component\u79d2\u5f00"]|,,|0.9853347906343617|,,|0.8714577411208654|,,|[[0, 0.272172863024542]]

8|,,|0.26666666666666666|,,|["\u6ef4\u6ef4\u51fa\u884c\u79d2\u5f00", "Component\u79d2\u5f00"]|,,|0.9851302157674813|,,|0.8715705722879807|,,|[[0, 0.27234378435162576]]

9|,,|0.3|,,|["Component\u79d2\u5f00"]|,,|0.9837414105243203|,,|0.8715590796786445|,,|[[0, 0.273214648246217]]

10|,,|0.3333333333333333|,,|["Component\u79d2\u5f00"]|,,|0.9838234965397075|,,|0.8716437205735402|,,|[[0, 0.27276039086080933]]

每一帧会对应一行数据。

更加具体的使用参考github 主页。

相关原理

图像相似度

统一使用 SSIM 进行图像相似度匹配

直接使用skimage提供的方法compare_ssim

相似度变化趋势是规律的,基本符合应用加载流程。

8f48c40b099434eaacd97ab0f85e79f1.png

OCR

就目前来看,词数趋势难以自动化地反映问题。

907c47929b95ec497b2d89157631be46.png

但可以作为后续分析的重要依据。

特征匹配

opencv 与 skimage 均提供了match_template方法供使用。目前直接使用 skimage 提供的方法。

算法:Fast Normalized Cross-Correlation,详见这里

b76193334a5096b66a82114359c34b55.png

可以看到,对于特征的识别效果显著:

8bbde80db4b3cce11698c541792ed420.png

关联与依赖

最后

欢迎各种形式的讨论与 PR

欢迎star & fork

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值