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

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

在论坛大部分时间都是请教别人问题,所以也分享下自己解决一些问题的思路,希望对某些人有帮助。
背景分析:
在进行手机性能测试时候因为没有机械臂和高速摄像机,所以只能利用现有条件自己发挥了,好在测试的手机普遍不错,所以选择了华为的 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 条回复 时间 点赞

https://www.cnblogs.com/udld/p/7134186.html 分享给你,也可以用 ffmpeg 库

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

群主是狗 回复

这个看自己的测试场景吧

UDLD 回复

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

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

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