自适应注意力关键帧提取,python实现视频关键帧提取(基于帧间差分)

2021/05/19 18:34 · 提高注意力训练 ·  · 自适应注意力关键帧提取,python实现视频关键帧提取(基于帧间差分)已关闭评论
专注力注意力训练提升
摘要:

自适应注意力关键帧提取,python实现视频关键帧提取(基于帧间差分)来自:有三个参数:videopath:视频路径??dir:生成的图片保存路径??len_window:帧数#-*-coding:utf-8-*-importcv2importoperatorimportnumpyasnpimportmatp

自适应注意力关键帧提取,python实现视频关键帧提取(基于帧间差分)

来自:https://github.com/amanwalia92/KeyFramesExtraction
有三个参数:videopath:视频路径? ? dir:生成的图片保存路径? ? len_window:帧数
# -*- coding: utf-8 -*-
import cv2
import operator
import numpy as np
import matplotlib.pyplot as plt
import sys
from scipy.signal import argrelextrema
print(sys.executable)
#Setting fixed threshold criteria
USE_THRESH=False
#fixed threshold value
THRESH=0.6
#Setting fixed threshold criteria
USE_TOP_ORDER=False
#Setting local maxima criteria
USE_LOCAL_MAXIMA=True
#Number of top sorted frames
NUM_TOP_FRAMES=20
#Video path of the source file
videopath='video.mp4'
#Directory to store the processed frames
dir='https://www.csdn.net/tags/'
#smoothing window size
len_window=int(10)
def smooth(x, window_len=13, window='hanning'):
"""smooth the data using a window with requested size.
This method is based on the convolution of a scaled window with the signal.
The signal is prepared by introducing reflected copies of the signal
(with the window size) in both ends so that transient parts are minimized
in the begining and end part of the output signal.
input:
x: the input signal
window_len: the dimension of the smoothing window
window: the type of window from 'flat', 'hanning', 'hamming', 'bartlett', 'blackman'
flat window will produce a moving average smoothing.
output:
the smoothed signal
example:
import numpy as np
t=np.linspace(-2,2,0.1)
x=np.sin(t)+np.random.randn(len(t))*0.1
y=smooth(x)
see also:
numpy.hanning, numpy.hamming, numpy.bartlett, numpy.blackman, numpy.convolve
scipy.signal.lfilter
TODO: the window parameter could be the window itself if an array instead of a string
"""
print(len(x), window_len)
# if x.ndim !=1:
# raise ValueError, "smooth only accepts 1 dimension arrays."
#
# if x.size < window_len: # raise ValueError, "Input vector needs to be bigger than window size." # # if window_len < 3: # return x # # if not window in ['flat', 'hanning', 'hamming', 'bartlett', 'blackman']: # raise ValueError, "Window is on of 'flat', 'hanning', 'hamming', 'bartlett', 'blackman'" s=np.r_[2 * x[0] - x[window_len:1:-1], x, 2 * x[-1] - x[-1:-window_len:-1]] #print(len(s)) if window=='flat': # moving average w=np.ones(window_len, 'd') else: w=getattr(np, window)(window_len) y=np.convolve(w / w.sum(), s, mode='same') return y[window_len - 1:-window_len + 1] #Class to hold information about each frame class Frame: def __init__(self, id, frame, value): self.id=id self.frame=frame self.value=value def __lt__(self, other): if self.id==other.id: return self.id < other.id return self.id < other.id def __gt__(self, other): return other.__lt__(self) def __eq__(self, other): return self.id==other.id and self.id==other.id def __ne__(self, other): return not self.__eq__(other) def rel_change(a, b): x=(b - a) / max(a, b) print(x) return x print("Video :" + videopath) print("Frame Directory: " + dir) cap=cv2.VideoCapture(str(videopath)) curr_frame=None prev_frame=None frame_diffs=[] frames=[] ret, frame=cap.read() i=1 while(ret): luv=cv2.cvtColor(frame, cv2.COLOR_BGR2LUV) curr_frame=luv if curr_frame is not None and prev_frame is not None: #logic here diff=cv2.absdiff(curr_frame, prev_frame) count=np.sum(diff) frame_diffs.append(count) frame=Frame(i, frame, count) frames.append(frame) prev_frame=curr_frame i=i + 1 ret, frame=cap.read() """ cv2.imshow('frame',luv) if cv2.waitKey(1) & 0xFF==ord('q'): break """ cap.release() #cv2.destroyAllWindows() if USE_TOP_ORDER: # sort the list in descending order frames.sort(key=operator.attrgetter("value"), reverse=True) for keyframe in frames[:NUM_TOP_FRAMES]: name="frame_" + str(keyframe.id) + ".jpg" cv2.imwrite(dir + "/" + name, keyframe.frame) if USE_THRESH: print("Using Threshold") for i in range(1, len(frames)): if (rel_change(np.float(frames[i - 1].value), np.float(frames[i].value)) >=THRESH):
#print("prev_frame:"+str(frames[i-1].value)+" curr_frame:"+str(frames[i].value))
name="frame_" + str(frames[i].id) + ".jpg"
cv2.imwrite(dir + "/" + name, frames[i].frame)
if USE_LOCAL_MAXIMA:
print("Using Local Maxima")
diff_array=np.array(frame_diffs)
sm_diff_array=smooth(diff_array, len_window)
frame_indexes=np.asarray(argrelextrema(sm_diff_array, np.greater))[0]
for i in frame_indexes:
name="frame_" + str(frames[i - 1].id) + ".jpg"
#print(dir+name)
cv2.imwrite(dir + name, frames[i - 1].frame)
plt.figure(figsize=(40, 20))
plt.locator_params(numticks=100)
plt.stem(sm_diff_array)
plt.savefig(dir + 'plot.png')
自适应注意力关键帧提取,python实现视频关键帧提取(基于帧间差分)  第1张

自适应注意力关键帧提取,基于双向GRU和注意力机制的船舶监控视频关键帧提取方法与流程

导航: X技术> 最新专利>计算;推算;计数设备的制造及其应用技术>基于双向GRU和注意力机制的船舶监控视频关键帧提取方法与流程

技术编号:

提示:您尚未登录,请点 登 陆 后下载,如果您还没有账户请点 注 册 ,登陆完成后,请刷新本页查看技术详细信息。

本发明涉及基于船舶视频内容的快速检索和船舶数据的轻量存储,尤其涉及基于双向GRU和注意力机制的船舶监控视频关键帧提取方法。背景技术视频已经成为视觉信息最常见的来源之一。视频数据的规模正在急速扩大,对于每天上传到Youtube的视频,个人用户需要超过100年的时间才能全部看完。那么自动的分析和理解视频内容的工具就显得非常重要。特别地说,自动视频关键帧提取技术能够帮助用户浏览视频数据。效果好的视频关键帧集合能够简洁的表示原来的视频,提取出重要的事件,用简短可看的关键帧摘要表示原有视频的内容。随着海边...
该技术已申请专利,请尊重研发人员的辛勤研发付出,在未取得专利权人授权前,仅供技术研究参考不得用于商业用途。

提示:您尚未登录,请点 登 陆 后下载,如果您还没有账户请点 注 册 ,登陆完成后,请刷新本页查看技术详细信息。

自适应注意力关键帧提取,基于多特征自适应阈值检测的关键帧提取

第 24卷  第 6期 2009年 12月 郑 州 轻 工 业 学 院 学 报 ( 自 然 科 学 版 ) JOURNAL OF ZHENGZHOU UN IVERSITYOFLIGHT INDUSTRY(Natural Science) Vol. 24 No. 6 Dec. 2009 收稿日期 : 2009 - 10 - 14 基金项目 :河南省科技厅科技攻关项目 () ;河南省教育厅科技攻关项目 () 作者简介 :黄敏 (1972—) ,男 ,江苏省海门市人 ,郑州轻工业学院副教授 ,主要研究方向为信息处理及图像处理. 文章编号 : 1004 - 1478 (2009) 06 - 0082 - 04 基于多特征自适应阈值检测的关键帧提取 黄  敏 ,  姜  静 (郑州轻工业学院 计算机与通信工程学院 , 河南 郑州 ) 摘要 :针对现有关键帧提取算法存在的特征选取单一、阈值选择困难的问题 ,提出了一种新的基于多特征自适应阈值检测的关键帧提取方法. 该法首先提取颜色特征、边缘轮廓特征 ,然后利用多特征融合的帧间差值来捕获视频内容的显著变化 ,用自适应阈值进行检测 ,实现关键帧提取. 关键词 :关键帧提取 ;多特征融合 ;帧间差 ;自适应阈值中图分类号 : TP391. 4    文献标志码 : A The research of key2frame extraction based on adaptive threshold detection of multi2features HUANGMin,  J IANG Jing (College of Com p. and Com. Eng. , Zhengzhou Univ. of L ight Ind. , Zhengzhou , China) Abstract: Nowadays the algorithm of key2frame extraction has some problems, such as singularity of features selection, diffiauty in choosing threshold value and so on. A new keyframe extraction method was proposed which is based on adaptive threshold detection ofmulti2features. First, two descriptors of color histogram, edge histogram of the adjacent scale wavelet transform are used to describe visual content, and com2bine to form a frame difference measure of multifeature integration. Then key2frames are extracted by the adaptive threshold detection. Key words: key2frame extraction;multi2feature integration; frame difference; adaptive threshold0  引言 在基于内容的视频检索系统中 ,关键帧用于描述一个镜头的关键图像帧 ,它通常会反映一个镜头的
自适应注意力关键帧提取,python实现视频关键帧提取(基于帧间差分)  第2张

自适应注意力关键帧提取,基于自适应聚类的视频关键帧的抽取

由于工作需要,要做海量视频检索。但是视频是一种复杂的文件形式,不能直接拿来做检索。所以,要先将视频解码成图像的形式,借用图像检索即以图搜图的思想来实现,所以如何把很长的视频文件解码并提取关键帧就显的尤为重要。

博主在查阅大量论文资料的基础上,总结出了一个切实可行的方案:即利用聚类的思想,把从视频中解码出的海量帧图像自适应的聚类,然后选取每个聚类中与聚类中心最为接近的图像最为该类的代表,从而实现从巨量的视频帧活得关键帧。

在这里要说明一下,博主的代码都是自己一行一行琢磨出来的,并且实际用到了工作中,所以本博主不会提供源代码,但是会详细记录下算法实现的过程,并且欢迎大家来讨论和交流。

一、简单的数据集的聚类大家都能做,这个网上有很多现成的代码。而图像的聚类要比数据集的聚类更为复杂,主要是图像数据都是高维的而且数据量较大,如果直接用图像数据间的欧式距离来作为聚类的标准,计算量过于庞大,而且会出现内存溢出的情况,因为所有的数据都要加载到内存中进行运算,这是非常不可取的也是效率极低的算法,虽然有实现的可能性。

二、所以对于图像数据的聚类,思想是降维,进一步说就是聚类的准则要进行改变。不能再以图像之间的直接欧式距离来做度量。论文中提到了一种很好的方法用来做聚类标准,即图像间的相似性度量。这种方法不用计算欧式距离,而是计算图像颜色直方图之间的最大相似性,然后根据这个数进行聚类。

算法过程如下:

(1)转换图像颜色空间:RGB2HSV

(2)计算图像在HSV颜色空间的颜色直方图,但是要做类似归一化的处理。即H颜色直方图分成12份,S、V分成5份,然后在分别计算他们的颜色直方图。这样做是为了简化后续的计算,当然你也可以有别的分法,只不过我建议还是直接用论文中的数据比较好,毕竟是经过大量的实验证明的。

(3)开始聚类:

? 这里要说一下,聚类是逐帧进行的,这样一是可以覆盖整个数据集使得聚类的结果真实可靠,而且不会漏帧,基本可以提取到数量足够而又准确的关键帧。

首先:图像数据集中的第一帧图像作为初始聚类中心,之后拿出一帧和当前所有的聚类中心进行相似性度量,如果其中最大的相似性值仍然小于你给定的一个阈值thrshold,则是表明该帧与所有聚类中心的距离都太远,所以要自成一类。然后重复此过程,直到取完所有的帧。

然后:聚类中心的计算。每一次当前类中加入一张新的图像时,就要重新计算聚类中心。即求一次平均值。

(4)聚类完成后,在每个聚类中心中计算与聚类中心最为接近的帧作为关键帧。

至此,整个关键帧的提取过程就完成了。

?

参考代码:

如果发现了bug或者别的问题,可以留言或私信。

自适应注意力关键帧提取,基于视觉注意模型的自适应视频关键帧提取

摘要:

关键帧提取是基于内容视频检索领域中一个重要的研究课题。提出了一种基于视觉注意模型的自适应视频关键帧提取方法。该方法分别提取视频中的运动和空间显著度,并用一种运动优先非线性混合模式将显著度合成为视觉注意度。在此基础上提出一种基于视觉注意度的局部和整体两级关键帧提取策略,先采用局部策略,选择镜头内注意度最大的帧作为关键帧候选;再根据视觉注意度的变化,为各个镜头自适应分配关键帧数目作为整体关键帧分配策略。实验证明,该方法提取的关键帧较为符合人类的视觉系统特性,而且该方法具有根据内容变化自适应提取关键帧等特点。

展开
自适应注意力关键帧提取,python实现视频关键帧提取(基于帧间差分)  第3张

自适应注意力关键帧提取,运动状态自适应关键帧提取方法

H04N5/14;

权利要求说明书

说明书

幅图


54
)发明名称

运动状态自适应关键帧提取方法


57
)摘要

本发明公开了一种运动状态自适应关键帧
提取方法,涉及图像处理方法技术领域。所述方
法包括如下步骤:视频序列的运动片段分割;在
分割后的视频运动片段中提取时空切片;使用时
空切片构建
STS
?
CS
模型来检测视频运动片段中的
目标运动状态;根据目标运动状态的改变绘制视
觉注意力曲线;根据视觉注意力曲线提取关键
帧。所述方法能够全面、高效的捕捉到目标运动

您可能感兴趣的文章

本文地址:https://www.wskee.cn/19414.html
文章标签:
版权声明:本文为原创文章,版权归 专注力训练与注意力训练网 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!