【视频中的关键帧提取】Deep Keyframe Detection in Human Action Videos

Deep Keyframe Detection in Human Action Videos

2018年发表,conclusion说是第一篇行为识别中用深度学校方法提取关键帧的文章。

这篇的做法使用UCF101数据集在没有关键帧标注下完成,使用LDA做标注,再用双流卷积网络去拟合LDA。

用LDA生成标注:每一类视频双流VGG16提取特征拼接在一起,经过LDA,用1类对其他所有类的方式生成LDA矩阵,经过下面这个公式,得到帧级别的标注分数。

F i,m 表示第m个视频,i个帧的特征,W A表示A类的LDA矩阵,得到的f i,m表示这一帧的关键性分数。思想可以表达为,如果特征与属于同一类别的特征非常相似,并且与其他类别的特征不同,那么它们就属于动作的关键部分,LDA增加类间方差,减小类内方差,正好可以代表,和TF-IDF思想一致。

有了f i,m做label之后,用卷积网络拟合

VGG-16从fc7连在一起,经过fc8,由于最后是一个回归任务,所以加一个regression layer而不是softmax。

紫色点,局部极大值被标为key frame。

关于评价方法,文章中说还没有固定的评价方法和基线,所以设计了关键帧数和关键帧时间差两个指数来进行评价,没有验证用于行为识别是否有提高。

启发:这篇文章在只有类别标注的条件下用LDA区分关键帧,思路很有说服力,也可以辅助把行为二次划分为一些动作,例如跳高从关键帧可以分助跑、起跳、过杆等。

参考:https://zhuanlan.zhihu.com/p/38289781

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 想要使用Python提取视频关键帧,可以按照以下步骤进行: 1. 导入所需的Python库。需要使用OpenCV库来处理视频。 ```python import cv2 ``` 2. 加载视频文件。使用cv2.VideoCapture函数读取视频文件。 ```python cap = cv2.VideoCapture('video.mp4') ``` 3. 设置关键帧提取间隔。可以根据需求选择提取频率,例如每秒提取一次。 ```python frame_interval = cap.get(cv2.CAP_PROP_FPS) # 帧率 frame_count = 0 ``` 4. 提取关键帧。通过循环遍历视频的每一帧,使用cap.read()函数读取帧数据。通过跳过一定间隔的帧来实现关键帧提取。 ```python while cap.isOpened(): ret, frame = cap.read() if not ret: break # 每秒提取一次关键帧 if frame_count % frame_interval == 0: # 处理关键帧,例如保存为图片 cv2.imwrite(f'frame_{frame_count}.jpg', frame) frame_count += 1 ``` 5. 释放资源。在完成关键帧提取后,需要释放视频流。 ```python cap.release() ``` 通过以上步骤,就可以使用Python提取视频关键帧。根据需要进行适当的调整,例如关键帧提取间隔、处理方式等。 ### 回答2: 提取视频关键帧是通过分析视频内容和帧之间的差异来识别出最有代表性的帧。下面是一种使用Python来提取视频关键帧的方法: 1. 导入相关库: ```python import cv2 import numpy as np ``` 2. 加载视频: ```python video_path = "your_video_path.mp4" capture = cv2.VideoCapture(video_path) ``` 3. 定义一些参数: ```python keyframe_interval = 30 # 设置关键帧提取间隔(每隔30帧提取一个关键帧keyframes = [] # 存储关键帧 ``` 4. 循环读取视频帧并提取关键帧: ```python frame_count = 0 while True: success, frame = capture.read() if not success: break if frame_count % keyframe_interval == 0: keyframes.append(frame) frame_count += 1 ``` 5. 释放视频对象: ```python capture.release() ``` 6. 保存关键帧: ```python save_path = "your_save_directory/" for i, keyframe in enumerate(keyframes): cv2.imwrite(save_path + f"keyframe_{i}.png", keyframe) ``` 使用以上方法,我们可以提取视频关键帧关键帧选取的间隔可以根据需要进行调整,以便提取出最适合展示视频内容的关键帧。 ### 回答3: 在Python编程语言,可以使用OpenCV库来提取视频关键帧。下面是一个步骤的简要说明: 1. 导入所需的库: ```python import cv2 ``` 2. 使用OpenCV打开视频文件: ```python video = cv2.VideoCapture('video.mp4') ``` 3. 设置关键帧提取的间隔: ```python frame_interval = 10 # 每10帧提取一个关键帧 ``` 4. 初始化变量和计数器: ```python frames_extracted = 0 # 已提取关键帧数量 ``` 5. 迭代视频的每一帧: ```python while True: success, frame = video.read() # 如果成功读取到帧 if success: # 检查帧计数器是否满足提取间隔 if frames_extracted % frame_interval == 0: # 保存关键帧到磁盘 cv2.imwrite(f'keyframe{frames_extracted}.jpg', frame) # 增加已提取关键帧数量 frames_extracted += 1 else: # 当读取到视频末尾,跳出循环 break ``` 6. 释放视频资源: ```python video.release() ``` 以上代码关键帧提取的间隔可以根据具体需求进行调整。例如,设置为1表示提取每一帧作为关键帧。 请注意,上述代码只是提取关键帧的基本框架,你可以根据自己的需求来添加更多的逻辑,例如进行关键帧选择的算法,或者对关键帧进行处理和分析。同时,你还可以使用其他库和工具来加强关键帧提取的功能和效果,如FFmpeg等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值