17

让你眼里的人,只有心中的那一个——用人工智能做单人CUT

 3 years ago
source link: https://zhuanlan.zhihu.com/p/66248591
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

让你眼里的人,只有心中的那一个——用人工智能做单人CUT

同济大学 计算机科学与技术硕士在读

无聊是第一生产力,尤其是在吃饱了撑的的情况下;而又是另一个促进科技发展的重要因素。众所周知,追星会使人勤奋,尤其体现在做单人剪辑视频这一点上:

v2-1ce6d6bdad751045512a0f7bf7347393_720w.jpg

单人CUT视频有两大用处:提供给二次创作党做素材,以及供某些只想看一个人的观众观看,当红明星的“求CUT”是一个很高的需求。

为什么不想想怎么把这件事用机器自动实现呢?先告诉你们结论——如果把这个任务交给一个学人工智能的大学生,完成起来并不会很难。

主要是因为制作单人CUT的门槛很简单:

  • 纵观全视频
  • 找到每一个目标艺人的出场镜头
  • 使用剪辑软件剔除多余的内容

而单人CUT又有很多细节视情况而定,比如说是否保留完整的对话上下文,不“断章取义”;是否只剪脸不剪只有声音的部分……这个工作的主要时间都花在看视频跟找子片段的起始点上,可以说技术含量并不高,只是一个搬砖的苦差事。

用一种简单粗暴的思路就行了:通过人脸识别的方法学习艺人的外貌(为了简单起见,只看脸),针对目标视频的进行识别,然后根据一定的规则确定剪辑的子片段,最后使用视频处理工具(如ffmpeg)生成成品单人CUT视频。

下面是具体的尝试过程:

一、适用于菜鸟的人脸识别方法

人工智能+人脸识别=一大批赫赫有名的技术、公司、专家、论文,堪称炙手可热的C位,这里我就不多说了。

一个人应当尽量避免班门弄斧,比如随便抄一个CNN/KNN/GAN的模型,用爬虫爬来的数据集跑半天,最后不管效果如何总归水了篇博客。事实上我用的是这个东西:

它有两个用处:

  • 找到图片中的人脸,用一个小矩形圈出来(只是识别是不是人脸,是谁的不做判断)。速度很快,精准度比OpenCV强不少,不会把某些奇奇怪怪的树杈、广告牌什么的识别为人脸(我是怎么知道的?无聊的时候试出来的)
  • 判断人脸的相似性,它的判断是基于阈值的,就是说严格要求只能有百分之多少的数据不同,才认为是同一张脸。这种方法虽然太了,但是速度非常之快。也就是说,我可以用几千个同一人的脸跟样本对比,然后设一个很低的阈值,只要有几个通过,就认为是同一张脸

它依赖于一个库叫dlib,看了一下,貌似很牛逼:

然而,装这个库是非常麻烦的,识别人脸可以显卡加速,但是必须自己编译:

首先要装cmake:

然后装cuda:

下面开始编译:





搞完之后,我们就可以开始,首先截了几千个超超越越的大头贴:

这1700个图的面部信息都会保存到一个表里,留着供比对使用。先来一个测试:

二、对视频进行正确处理的姿势

  1. 每隔25帧取一帧,每取14张720P(单张图片的识别速度跟分辨率有关,每次可以一块识别的图片数量跟显存有关,这个数值是供6G显存用的)的截图,就进行一次批量识别。
  2. 每一次识别是将此帧中的每一个面孔都与样本集中1700组数据进行比对,设置识别阈值为0.4(严格程度堪称六亲不认),如果通过的数量超过5个(0,10,1这些我也都试过,这个值越小,CUT得到的子视频越多),就标记这一帧有用,并截一张图保存下来。
  3. 如果两帧间隔超过10秒(我随便定的,越小则CUT的次数越多),就记录一次子CUT,确定开始时间和截止时间。
  4. 用ffmpeg把子CUT导出,截图也放到同一个文件夹里

无聊之时,还可以加一个进度条:

这种方式是很落后的:

ffmpeg截取视频应当使用这条命令:

ffmpeg -ss {} -to {} -i {} -codec copy -avoid_negative_ts 1 {}
#参数依次为:开始时间、持续时间、输入视频文件名、输出视频文件名

不需要重新编码,CPU再也不会满载了:

尤其是avoid_negative_ts,否则截出来的视频会出现奇怪的表现

三、论如何使用人工弥补人工智能的愚蠢

如果降低了识别阈值,那么就会出现认错人的情况,但是认错也比漏认强,前者是可以通过人工来弥补的:

比如说这个视频中好几个别的火箭少女都被认成了超越,但是多余的可以ctrl+d直接删掉

这样就OK了。怎么样,学会了吗?这是某个成品链接

附上github链接;


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK