背景
在之前学习爬⾍项⽬中,得到的部分视频是有⽔印的,因此有能通过⽐较好的技术⼿段实现⽔印去除的需求。⼀般情况下,如果能获取到⽆⽔印的原始素材是最好,但某些⽹站本⾝的原始素材就是加了⽔印。对于这种情况,少量可以通过某些视频剪辑软件完成⽔印去除,但对于⼤量素材,依赖⼈⼯完成是不现实的。two steps from hell
描述
这篇⽂章将提供⼀种⽅法,描述在特定类型视频中,使⽤技术⼿段完成⽔印去除的实现,仅供参考学习,请合理使⽤,避免法律风险。
主要的实现⽅式其实⾮常简单,主要是各种现有⼯具的整合,最终也达到了⽐较好的效果。在限定品类之后,去除效果评估合格率达到了97%。
调研
在⽹上调研之后,主要有以下可参考的实现,可以看到,他们各⾃有不同的优势和缺点。
1. ⾼端⼤⽓上AI
车损险⾸先AI有⽐较⾼的接⼊成本和学习门槛,⽽且本⾝有些⽞学。抛开算法,最终的效果还是依赖输⼊样本的训练。再回到我们素材⾃⾝,不同作者其⽔印会是变化的(id为⽔印)。算法训练,其实获得准确位置的能⼒有待确定。鳕熊
总结缺点: 依赖众多,需要训练,Id+logo变化的情况预计训练模型不会容易适配,效果也不理想。
2. ffmpeg delogo
实际是在⽔印位置添加滤镜,类似⽑玻璃效果。这种是⽐较直接的⽅式,但问题的核⼼变成了如何获取⽔印的位置。还有个问题就
是,ffmpeg delogo 的效果在不同视频素材不稳定。例如,如果⼀个视频帧⽔印位置画⾯内容⽐较多,去除⽔印后会⽐较明显。不过⼀般情况下,⽔印在右上或者左上,画⾯内容相对较少。
山海经故事总结缺点:产⽣模糊区域,需要确定位置和⼤⼩。
3. 蒙版+opencv + python 逐帧处理
可否将视频处理成图⽚,然后再按每张图⽚来处理?当然理论是可⾏的,这就将问题变成了图⽚去⽔印,⽽且像openCV有⽐较成熟的去⽔印算法。但是⼏个问题。
⾸先是openCV的图⽚去⽔印需要⼀个蒙版,即有个纯⾊+⽔印的图⽚,当然也不太适合不同视频⽔印logo变化的情况。按每个视频创建蒙版也是没法做成⾃动化的。
另⼀个是视频处理成图⽚后,内容过⼤。测试中,⼀个19MB的1080P60hz视频,处理成图⽚变成了3GB⼤⼩,⽽且每帧处理也⽐较耗时,更不说合并成视频的耗时。
缺点明确: ⽣成蒙版+逐帧处理+耗时较⼤
4. cv 获取固定图标+ id⽣成位置坐标
电脑不断重启最后⼀种⽅案是折衷的⽅式,也是最终采⽤的。⾸先,⽔印的获取仍然使⽤openCV,不过是采⽤CV的图像识别。对于视频,也不是按照所有帧的⽅式,⽽是随机得选取某些帧获取截图,然后⽤cv去拿到⽔印坐标。这⾥有个前提,是⽔印中有部分是不变的,⽐如logo。先⼈⼯将这部分抠图下来,然后代⼊CV做识别,拿到了logo的坐标。因为不同帧会有变化,造成CV失败的误差,需要在失败的坐标中筛选成功率⾼的。
然后由于⽔印是 logo+id的形式,再根据id的字数和字体字号占的像素数,通过之前获取的坐标算出⽔
印的⼤⼩。如此我们就知道了⽔印的位置和⼤⼩,就可以使⽤ffmpeg delogo做去除了。
总结,最后实际是采⽤了第四种⽅案和第⼆种的结合,当然这也是根据具体场景综合考虑的,未必就是通⽤和最优的实现。
不同算法的⽐较最终去除效果对⽐
去除后
去除前雪地轮胎
发布评论