项目实训(十二)—项目实训总结

1、项目目标及完成情况:

目标:

实现一个针对影视类型视频进行智能剪辑的APP,具有智能剪辑和智能预览两大主要功能:

1、智能剪辑的流程为用户自行上传本地视频、需要剪辑的目标人物图片以及场景约束图片,利用场景划分和视频摘要算法实现智能视频切分,并进行人脸识别和场景匹配,返回给用户有关该人物在多场景或约束场景下的关键视频片段。

2、智能预览的流程为用户自行上传本地视频,利用场景划分和视频摘要算法首先实现智能视频切分。而后对切分后的视频片段进行相似度计算,建立视频关系图。用户随意拖动视频进度条,系统就在视频下方展示与当前片段相关的其余关键视频片段,有助于用户更好地理解视频剧情主线,关注感兴趣的视频内容。

“易剪”app同时提供时长截取、配乐等基础视频剪辑功能,使用户可以对视频片段进行更为细化的剪辑操作,这对提高业余视频剪辑爱好者的工作效率有着非常好的实际意义。

完成情况:功能均已完成
项目实训(十二)—项目实训总结_第1张图片
项目实训(十二)—项目实训总结_第2张图片
项目实训(十二)—项目实训总结_第3张图片
项目实训(十二)—项目实训总结_第4张图片
项目实训(十二)—项目实训总结_第5张图片

2、个人工作总结:

负责部分:场景划分算法、相似场景视频聚类算法、本地与服务器的连接及交互接口

1、场景划分算法:

为什么要做场景划分?

电影或电视剧的时长较长,直接在上面进行素材的收集和查找,可能会得到很多不重要且冗余的片段。如果我们使用视频摘要算法,将长视频缩为短视频,在短视频上进行素材的收集和查找,应该可以避免上述的问题。但是,也有可能丢失掉一些片段,使最后得到的素材片段不能很好的代表整个视频。

由于电影或电视剧通常是由一个个场景组合起来的,如果我们按照场景对他们进行切分,然后提取每个场景中的重要片段,在这些片段上进行素材的收集和查找,就可以避免得到不重要且冗余的片段,同时得到素材片段能更完整地表达整个视频。

如何实现场景划分的?

(1)使用ResNet50进行特征提取

(2)镜头切割:通过设定阈值,计算图像hsv相似度得到

(3)场景边界预测:二分类问题,即对每个镜头进行是否为场景边界的分类预测。首先采用一个边界网络(BNet)对镜头的差异与关系进行提取,基于获得通过BNet得到的镜头代表,构建一个LSTM模型获得镜头构成场景边界的概率,通过设定场景个数阈值得到结果,在获得每个镜头边界bi的代表之后,问题变成根据表示序列[b1,···,bn-1]的序列来预测序列二进制labels [o1,o2,···,on-1],使用序列模型Bi-LSTM,步幅为wt / 2,预测一系列粗略得分[p1,…,pn-1],pi∈[0,1]是镜头边界成为场景边界的概率,然后得到一个粗略的预测oi∈{0,1},该预测表明第i个镜头边界是否为场景边界,通过将pi通过阈值τ进行二值化0/1

(4)场景视频切割:通过调用ffmpeg将原视频切割成多个场景视频并保存

2、相似场景视频聚类算法:

(1)使用googlenet 来提取视频特征,并将每个视频的特征值的保存在一个h5文件中,特征值为(视频帧数,1000)的张量

(2)相似场景视频聚类:使用cosine相似度(余弦相似度)方法,把图片表示成一个向量,通过计算向量之间的余弦距离来表征两张图片的相似度,设置相似度阈值为0.95

(3)返回给前端的结果是一个json文件,json文件里是一个字典结构,记录了对于每个场景视频(键:该视频在服务器中的路径)来说,与之场景相似的其他视频(值:列表形式,记录了视频在服务器中的路径)

3、本地与服务器的交互接口:

(1)本地与服务器的连接通过SSH2来实现

(2)将服务器的多个算法封装成两个接口(对应于智能剪辑和智能预览功能)、在服务器为每个用户(ID)创立自己的文件夹结构的接口

(3)本地使用Java实现以下几个接口:上传文件(视频、图片等)到服务器、从服务器下载文件、调用服务器的智能剪辑算法接口、调用服务器的智能预览算法接口

3、 团队工作:

在整个项目实训中,组长方新悦除了在初期扔了一个人脸识别的代码让我们自己改成项目要用的东西之外,并未参与整个学期后任何实质性的其他开发,但是组长坚持自己在学习背后的理论,虽然并没有给我们的项目带来任何的帮助。在整个项目中,孙一凡刘凯王月群李文文同学付出很多,相互协助,经常凌晨两三点钟还在联调,克服bug最后终于做出来一个比较不错的成品,让人很欣慰。

你可能感兴趣的:(项目实训,算法,机器学习)