原标题:深度学习:计算视频中人物出镜时长 (Python)
当开始学习深度学习时,我们学到的第一件事就是图像分类。这是计算机视觉的一部分,而一旦掌握了图像分类,将深度学习运用到视频便成为下一步的目标。知道出镜时间对于一个演员来说非常重要,它直接关系到他 / 她得到的片酬。比如,唐尼在《蜘蛛侠》中只出镜了15分钟,便获得了1000万美元。如果我们可以计算任何视频中,任意一个演员的出镜时间,我们将会得到很多有用的信息。
注意: 本文假设读者已经有使用深度学习进行图像分类的知识。
一、 读取视频并提取帧
视频可以看成一组图片的集合。这些图片被称为帧,将这些帧结合起来,就可以得到原始视频。因此,视频数据相关的问题与图像分类或目标检测问题没有太大的不同。从视频中提取帧只是一个额外步骤。
我们的目标是从一个给定的视频中计算出汤姆和杰瑞的出镜时间。我们将在本文中遵循以下步骤:
1.导入并读取视频,从中提取帧,并将它们保存为图像
2.给一些图片(帧)贴上标签,作为训练模型
3.用学联数据训练模型
4.对剩余的图像作出预测
5.计算汤姆和杰瑞的出镜时间
二、如何使用python处理视频文件
让我们从导入所有必要的库开始。如果还没有安装下面的库,请安装:
Numpy Pandas Matplotlib Keras Skimage OpenCV
%matplotlib inline
importcv2 # 获取视频
importmath # 数学计算
importmatplotlib.pyplot asplt # 画图
importpandas aspd
fromkeras.preprocessing importimage # 对图像的预处理
importnumpy asnp
fromkeras.utils importnp_utils
fromskimage.transform importresize # 调整图像大小
步骤1: 读取视频,从中提取帧并将其保存为图像
现在我们将加载的视频转换为帧。您可以从这个链接 (https://drive.google.com/file/d/1_DcwBhYo15j7AU-v2gN61qGGd1ZablGK/view) 下载用于此示例的视频。
我们将首先使用 VideoCapture 函数从给定的目录中捕捉视频,然后我们将从视频中提取帧,最后使用 imwrite 函数将它们保存为图像。
让我们把它编码:
count = 0
videoFile = "./Tom and jerry.mp4"
cap = cv2.VideoCapture(videoFile) # 从给定的路径中抓取视频
frameRate = cap.get( 5) #帧率 (https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_video_display/py_video_display.html)
x= 1
while(cap.isOpened):
frameId = cap.get( 1) #正将被处理的帧的序号(0-based)
ret, frame = cap.read
if(ret != True):
break
if(frameId % math.floor(frameRate) == 0): #当序号为帧率的倍数时;意味着提取的画面为整数秒时的画面
filename = "./image/frame%d.jpg"% count;count+= 1
cv2.imwrite(filename, frame)
cap.release
print( "Done!")
一旦这个过程完成, 'Done!' 将会打印在屏幕上,以确认图片已经被提取。
对于一个图像(帧),我们将首先使用 matplotlib 的 imread 函数读取图像,然后使用 imshow 函数绘制图像。
img = plt.imread('./image/frame0.jpg') # 读取名为 frame0.jpg 的图片
plt.imshow(i