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