前端测试 采用 Opencv 结合手机摄像头进行性能测试

flyfire · 2018年07月09日 · 最后由 Jackey 回复于 2018年10月09日 · 1043 次阅读

在论坛大部分时间都是请教别人问题,所以也分享下自己解决一些问题的思路,希望对某些人有帮助。
背景分析:
在进行手机性能测试时候因为没有机械臂和高速摄像机,所以只能利用现有条件自己发挥了,好在测试的手机普遍不错,所以选择了华为的mate10来当作高速摄像机,采用mate10的慢速拍照模式,设置为240FPS来进行拍照。然后采用uiautomator2进行滑动或者点击操作。待录制完成后使用Opencv对视频进行检测,取出第一次界面变化的帧作为事件的起始帧,然后采用界面连续不变的第一帧作为视频的结束帧,然后计算帧间隔数,再算出性能值。

主要代码:

import cv2

capture = cv2.VideoCapture()
capture.open("SVID_20180702_114121.mp4")
fps = capture.get(cv2.CAP_PROP_FPS)
size = ( int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)) , int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT) ) )
cv2.namedWindow('test')
print(fps,size)
index = 0
success,frame = capture.read()
print(frame.shape)
while success and cv2.waitKey(1) == -1:
cv2.imwrite("./data/%s.png"%index, frame)
cv2.imshow('test',frame)
success,frame = capture.read()
index = index + 1

其中对比的函数如下:

#采用opencv的模板匹配进行图像的对比
def find_template( img_file , template_file , threshold=0.9 ):
img = cv2.imread(img_file,0)
template = cv2.imread(template_file,0)
w,h = template.shape[::-1]
res = cv2.matchTemplate(img,template,cv2.TM_CCOEFF_NORMED)
if cv2.minMaxLoc(res)[1] > threshold:
pass
else:
return False
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
top_left = max_loc
return (top_left[0] , top_left[1] , w, h )


其余的细节,各位虫师可以自由发挥

共收到 5 条回复 时间 点赞

是要测什么性能点啊?都没说

watchdog 回复

这个看自己的测试场景吧

UDLD 回复

是的,C语言大神呀!哈哈哈

图片对比这个怎么区分相邻2张图片到底是一帧还是两帧呢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册