代码的优化部分走了不少弯路,这里只写出最后的优化结果。
主要是时间的优化,这个算法整体大致为三个步骤,一个是提取视频特征,一个是根据视频特征计算帧关键程度,一个是找到关键帧和片段。而提取特征和关键帧片段储存等的耗时则明显过长。
tqdm介绍:函数进度条库,可以给循环的for函数添加一个进度条查看实时进度
np.vstack方法优化
np.vstack介绍
这个方法的作用是把参数里的数组竖直方向的矩阵连接起来
代码中在
这里用该方法的参数里frame_feat就是循环处理视频每一帧图像的结果,帧的特征表示数组。video_feat_for_train则是循环累加的数组结果集。
np.vstack实现的方法:
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
res = np.vstack((arr1, arr2))
# res结果
#[[1, 2, 3],
# [4, 5, 6]]
可以看到np.vstack确实可以很方便实现我们想要的结果,但是这个方法在服务器算力有限的项目中循环处理上万帧视频的时候,就会显得有些不够看了,此次项目中的服务器在处理这个循环的过程中内存会被逐渐占用,运行速度也是越来越慢。
这里最后实现改