开发者学堂课程【高校精品课-华中科技大学 -智能媒体计算:关键帧提取】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/811/detail/15701
关键帧提取
内容介绍:
一、 关键帧的概念
二、 关键帧的用途
三、 关键帧的提取
一、关键帧的概念
关键帧就好比我们文章的关键词,我们一看一篇学术论文关键词的作用是什么?关键词的作用是,看了这几个词,不去看原文,知道这篇文章的主要内容是什么,再加上看一看摘要,基本上就知道这篇文章是干什么的,那么关键帧,英文叫 Keyframe,关键词叫什么叫 keywords,这俩是一个意思,关键帧 Keyframe 是用于描述一个镜头的关键的图像帧,通常会反映一个这个镜头的一个主要的内容,依据镜头内容的复杂程度,我们可以从一个镜头里面提取一个或者多个关键帧,如果说你的摄像机对着我们的上课的视频, PPT 也不变,人还是同一个人,这一张就够了,如果虽然人没变,但是 PPT 内容发生了变化,你就要提取多个关键帧,如果不听声音的话,就不知道讲的是什么。
那么因此我们的关键帧提取的依据是什么?就是要有代表性,也就是说要能够抓住我们这个视频里面的主要的内容,就像各种的视频网站,那么你在看某个视频的时候,它都有一个图像展示出来,其实挑的都应该是它的关键帧,无论是爱奇艺、优酷还是其他的。
二、关键帧的用途
第一个,我们可以大大的减少视频索引的数据量,一个镜头内部图像帧之间是有很相关的,因为一次动作拍摄的里边的内容很相关,我们在建索引的时候,并不是对每一帧图像都去做,如果每一帧都做的话,工作量太大了,如果我们只对关键帧提取特征,这个量就减小了,我们就从关键帧里面提取出颜色、纹理、形状的一些特征,作为我们视频索引的基础,不需要对每个画面都去提取;
第二个,它可以为查询和检索提供一个组织的框架,看视频的时候,给你若干关键帧,你先预览一下,或者你通过这个关键帧,可以跟相应的镜头内容连上,这样的话,就为层次化的组织这个视频结构提供了一种可能,关键帧提供一个镜头的全面的概要,那么可以静态的表示视频节目的主题和部分内容,而不是动态的一些细节,预览的时候用关键帧其实就足够了;
第三,可以通过关键帧,为一段视频建立一个视频摘要,比如说两个小时的电影宣传片,大家去看电影,尤其是新的片子出来,它都是有一个宣传片的,这个宣传片实际上就是个摘要,它也可以把那些精彩镜头,提取入关键帧,连续的播放出来,这就是视频摘要,当然,我们电影的宣传片跟一般的视频摘要不同的是,电影的宣传片一定没有把结局放进来,而有的宣传、视频摘要,一定要把最精彩的部分把放进去,这样的话这个摘要就可以允许用户观看几个有限的关键帧来快速浏览这个视频的内容,从而来决定你是否继续观看视频的内容。
三、关键帧的提取
提取的原则,一般采用的保守的原则来继续关键帧。就是宁愿错也不能少,就是我们提出来的关键帧可能不那么关键,但是不要把它的内容丢失掉,就是多提一点,在代表特征如果不明确的情况下,我们以去除重复的这种图像帧为依据,有的时候判断这个镜头里面到底哪一帧才是关键,什么样才是关键的。
如果你说不清楚,没有一个度量标准的话,那你就是去重,你选了一帧,其他与你选的那帧重复的,那就不去选了。
基于这样一个基本的原则,不同的提取算法,那么你可以选取自己规则来适合自身的这种判定标准,其实它也有它的理论基础的,我们按照信息论的观点,不同的信息或者相关性小的信息怎么样,它携带的这种信息量大,这是显而易见的,如果你看的都是多帧相同的和你看一帧都是差不多的。
1、 关键帧的提取方法
比如说我们可以基于镜头的边界来提取关键帧,可以基于图像的信息,里面的内容图像的变化来提取,还有可以通过运动分析,可以基于平像素的平均或者是直方图等等,还可以通过红框的互译,还有基于文本和图像信息相结合的方式。
(1)基于镜头边界来提取关键帧
现在简单介绍几种,第一个也是最简单的,就是基于镜头边界来提取关键帧,它的算法,很简单,就是一段视频有了以后,按照上次课讲的,先找到镜头边界,每个镜头里面选取第一帧或者最后一帧或者中间帧作为关键帧,你可以选一帧,你可以选两帧,你也可以选三帧。选一帧,你可以是首帧或末帧,或者是中间帧;要是选两帧,可以首帧,末帧;选三帧,三个都要,那么一旦规则定下来了,只要镜头边界检测完,那关键帧就提取出来了,甚至你把镜头边界找到之后,随机的中间选一针也是可以的,这种算法的好处就是快。无论镜头的内容如何,我们选取的关键针的数量都是一样的。
特点是它的效果其实不太稳定,就是每个镜头的首帧和尾帧不见得都是关键的,但是它好用的原因就是它简单,假定说,你的镜头里边,因为每个镜头内部是相关的,它的重复性很大,在没有明确的这种关键的度量标准的时候,选用这种方法是OK的,因此,现在各大视频网站用的关键帧的方法基本上都是这种,因为它效率高。
(2)基于图像信息提取关键帧
其实可以在基于镜头的关键帧的基础上加上,怎么做?基于每一帧的颜色、纹理等,也是可以其他的特征,这些视觉特征的改变来提取,先选择一个当前的信息,如果有变化的时候就当前选择这个帧可以跟后面的帧去做对比,当变化大于某一个阈值的时候,就把变化大的那个作为关键帧,若变化不大,一帧就够了,变化大,那就再选一帧,以此类推。
有的像镜头虽然是连续动作,它一直在动,它所拍摄的内容怎么样是变化的,就像我们的镜头,这种扫射扫射的,平移的这种,你站在一个高楼上,转一圈,虽然是摄像机的一次动作拍下来的,但它内容发生了很多变化,那么对于这种情况拍摄的视频,我们是基于图像信息的变化来提取的关键帧,它的代表性就强了,它已经把内容的变化体现出来。
提取的步骤,我们通常是把第一帧作为关键帧,并作为参考,然后计算当前的参考帧跟剩余帧之间的差,如果差值大于某一值,就再选择一帧,把刚选出来的再作为参考帧,以此循环往复,直到结束。
特点是可以根据镜头变化提取出特定数量的关键帧,缺点是代表性也不是特别突出,那不是变化了,就一定是很关键,尤其是那种运动引起的,那么可能它虽然变内容变化的很大,尤其是里面中间的一个镜头里面的人物的变化,在没有超过镜头画面的时候,那么其实你选多帧也是有一定的问题的,所以它的代表性不是特别突出。
(3)基于运动分析提取关键帧
那怎么来提高代表性?有人就提出来,我们的特征的类型里面能不能找一个代表性特别明确的,就是基于运动分析的,这个方法是什么?就是通过光流分析法来计算镜头内部帧和帧之间的运动量,这个运动量提取出来局部最小的运动,若局部最小的时候,觉得很重要,我们通常这个局部最小是指的摄像机的运动,在什么情况下这个方法很有效?在新闻联播里面,比如说在开很重要的会议,开两会,或者开党派会,说参加会议的有,比如说习近平总书记,还有国务院总理李克强等等,到哪一个重要人物的时候,其实摄像机就会对着这个人短暂的停留,这个人物越重要,通常停留的时间就会越长,几个重要人物一过之后,那么对于参加会议的其他人,镜头就不停了,直接扫过去,运动的局部最小,所以可以得出这个画面很重要,应该说这种方法它的代表性是很强的。而问题是运动课程的提取是非常费时的,也就是说它的效率不高,不适合于所有的适配类型。讲到这里,其实我们可以针对不同的领域的视频选择不同的方法。
(4)基于文字和图像信息的方法
比如一种方法,在新闻视频里发现有文字出现的时候很重要,有文字出现的帧往往是一条新闻或者一个新闻镜头的关键帧,它最大限度地反映了这个视频的主要内容,尤其是这段文字通常概括了这条新闻的主要内容,我们不仅可以把这个关键帧找到,还可以检测出这固定区域的文字出现的帧,然后把这个文字通过 OCR 识别出来,还可以把关键词都提取出来
比如这个,下面的文字是积极有为 推动财税政策改革落地见效
我们通过检测固定区域的文字,新闻联播出现的这个字幕,绝对不是在上面,通常都在下面的角这一块,就可以在固定区域检测文字出现,当它出现有文字区域的时候,我们就把这一帧作为关键帧,然后再通过 OCR 技术把文字识别出来,就可以关键帧找到了,那么这个时候就注意一个问题,这个文字区域通常是很好检测,但是不好检测的时候发生在哪?
恰好这个文字区域出现或者消失的时候发生了镜头的切变,那就容易混淆了,所以这个时候,我们就把全局整幅图像的变化和局部的区域的变化结合在一起,就可以去除那些错误。
不同的领域的视频有不同的关键帧的提取方法,比如说在足球视频里面进球,可以通过字幕就是上面的比分条,甚至还可以通过欢呼声找在那个镜头里面是不是还有球门等等,去找关键帧,这些都是为来度量代表性的特征提供的依据。
那么在设计相应的系统的时候,可以根据自己所研究的对象,提取出自己的想做的这种算法。