铅华洗尽,粉黛不施,人工智能AI基于ProPainter技术去除图片以及视频水印(Python3.10)

视频以及图片修复技术是一项具有挑战性的AI视觉任务,它涉及在视频或者图片序列中填补缺失或损坏的区域,同时保持空间和时间的连贯性。该技术在视频补全、对象移除、视频恢复等领域有广泛应用。近年来,两种突出的方案在视频修复中崭露头角:flow-based propagation和spatiotemporal Transformers。尽管两套方案都还不错,但它们也存在一些局限性,如空间错位、时间范围有限和过高的成本。

说白了,你通过AI技术移除水印或者修复一段不清晰的视频,但结果却没法保证连贯性,让人一眼能看出来这个视频或者图片还是缺失状态,与此同时,过高的算力成本也是普通人难以承受的。

本次,我们通过ProPainter框架来解决视频去水印任务,该框架引入了一种称为双域传播的新方法和一种高效的遮罩引导视频Transformers。这些组件共同增强了视频修复的性能,同时保持了计算效率,成本更低,让普通人也能完成复杂的水印去除任务,正所谓:清水出芙蓉,天然去雕饰。

安装配置ProPainter

老规矩,首先克隆项目:

git clone https://github.com/sczhou/ProPainter.git

该项目基于CUDA框架,请确保本地环境的CUDA版本大于9.2。

执行命令查看本地的CUDA版本:

nvcc --version

输出:

PS C:\Users\zcxey> nvcc --version  
nvcc: NVIDIA (R) Cuda compiler driver  
Copyright (c) 2005-2022 NVIDIA Corporation  
Built on Tue_Mar__8_18:36:24_Pacific_Standard_Time_2022  
Cuda compilation tools, release 11.6, V11.6.124  
Build cuda_11.6.r11.6/compiler.31057947_0

截至本文发布,笔者的版本是11.6,关于本机配置CUDA和cudnn,请移玉步至:声音好听,颜值能打,基于PaddleGAN给人工智能AI语音模型配上动态画面(Python3.10),囿于篇幅,这里不再赘述。

随后进入项目:

cd ProPainter

安装依赖:

pip3 install -r requirements.txt

接着下载ProPainter的预训练模型:https://github.com/sczhou/ProPainter/releases/tag/v0.1.0

将其放入项目的weights目录中,模型放入之后的目录结构如下:

weights  |- ProPainter.pth  |- recurrent_flow_completion.pth  |- raft-things.pth  |- i3d_rgb_imagenet.pt (for evaluating VFID metric)  |- README.md

至此,ProPainter就配置好了。

对象移除

ProPainter很贴心地在项目中放入了一些示例,我们直接在项目的根目录运行命令:

python3 inference_propainter.py

程序输出:

E:\work\ProPainter>python inference_propainter.py  
Pretrained flow completion model has loaded...  
Pretrained ProPainter has loaded...  
Network [InpaintGenerator] was created. Total number of parameters: 39.4 million. To see the architecture, do print(network).  Processing: bmx-trees [80 frames]...  
100%|██████████████████████████████████████████████████████████████████████████████████| 16/16 [00:10<00:00,  1.52it/s]  All results are saved in results\bmx-trees

ProPainter就会自动演示一段80帧的视频对象移除功能,输出在项目的results文件夹中:

可以看到,脚本将画面里骑自行车的小孩以及自行车给移除了。

具体操作就是将要移除的物体遮罩以及原画面放入到项目的inputs文件夹中,随后预训练模型会根据遮罩完成移除和补全动作。

生成遮罩(mask)

为了防止不法者的滥用,项目作者移除了水印的示例,现在我们来进行演示如何移除水印,首先我有一张带水印的视频或者图片:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到该水印十分巨大,将原始画面的沙发,桌子以及床都遮住了一部分,那么第一步我们需要生成水印的遮罩,让程序可以容易的识别水印轮廓。

首先安装Open-cv库:

pip3 install opencv-python

随后编写代码,将logo提取并产生遮罩:

import cv2  
import numpy as np  room = cv2.imread('D:/Downloads/room.png' )  
logo = cv2.imread('D:/Downloads/logo.png' )  #--- Resizing the logo to the shape of room image ---  
logo = cv2.resize(logo, (room.shape[1], room.shape[0]))  #--- Apply Otsu threshold to blue channel of the logo image ---  
ret, logo_mask = cv2.threshold(logo[:,:,0], 0, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU)  
cv2.imshow('logo_mask', logo_mask)  
cv2.waitKey()  
cv2.imwrite('D:/Downloads/logo_mask.png', logo_mask)

运行效果:

当然,如果不想通过代码来完成,也可以通过Photoshop来做,直接通过Photoshop的的内容选取-》反向选择-》填充黑色-》随后再次反向选择-》填充白色,来完成:

最后效果和Open-cv的处理结果是一样的。

去除水印

如此,我们得到了原画面以及水印的遮罩,在项目的inputs目录创建test目录,随后创建img和mask目录,分别将原画和水印遮罩放入目录:

├─inputs  
│  ├─test  
│  │  ├─img  
│  │  └─mask

注意,由于该项目是基于视频的,所以最少也得有两帧的画面,如果只有1帧的画面,会报错。

运行命令:

python3 inference_propainter.py --video inputs/test/img --mask inputs/test/mask

程序返回:

E:\work\ProPainter>python inference_propainter.py --video inputs/test/img --mask inputs/test/mask  
Pretrained flow completion model has loaded...  
Pretrained ProPainter has loaded...  
Network [InpaintGenerator] was created. Total number of parameters: 39.4 million. To see the architecture, do print(network).  Processing: img [2 frames]...  
100%|████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:54<00:00, 54.30s/it]  
IMAGEIO FFMPEG_WRITER WARNING: input image is not divisible by macro_block_size=16, resizing from (1227, 697) to (1232, 704) to ensure video compatibility with most codecs and players. To prevent resizing, make your input image divisible by the macro_block_size or set the macro_block_size to 1 (risking incompatibility).  
[swscaler @ 0000025d0a1b5900] Warning: data is not aligned! This can lead to a speed loss  
IMAGEIO FFMPEG_WRITER WARNING: input image is not divisible by macro_block_size=16, resizing from (1227, 697) to (1232, 704) to ensure video compatibility with most codecs and players. To prevent resizing, make your input image divisible by the macro_block_size or set the macro_block_size to 1 (risking incompatibility).  
[swscaler @ 000001b30eb858c0] Warning: data is not aligned! This can lead to a speed loss  All results are saved in results\img

可以看到,程序将处理后的两帧视频结果输出到了项目的results/img目录中,去除水印后的结果:

移除效果可谓是非常惊艳了。

当然,我们只处理了视频的其中两帧画面,如果是10分钟左右的视频通常需要大量的GPU内存。通过下面的参数输入,可以有效解决本地的“爆显存”错误:

通过减少--neighbor_length(默认为10)来减少局部长度的数量。  
通过增加--ref_stride(默认为10)来减少全局参考帧的数量。  
通过设置--resize_ratio(默认为1.0)来调整处理视频的大小。  
通过指定--width和--height来设置较小的视频尺寸。  
设置--fp16,在推理过程中使用fp16(半精度)。  
通过减少子视频的帧数--subvideo_length(默认为80),有效地分离了GPU内存成本和视频长度。

结语

ProPainter毫无疑问是伟大的项目,但需要注意的是,移除水印可能涉及侵犯版权或违反合同条款,具体是否违法取决于您所在的国家或地区的法律法规以及相关合同的规定。

在许多情况下,水印是版权保护的一种方式,用于标识作品的所有权归属或授权情况。如果您未经授权移除水印,可能会侵犯原创作者的版权权益,这可能违反了版权法。

此外,如果您在使用某个服务或软件时同意了相关的使用条款和隐私政策,这些条款和政策通常会规定您不得移除或修改任何水印或版权信息。违反这些合同条款可能导致法律责任。

因此,建议在涉及水印的情况下,您应该遵守适用的法律法规和合同条款,并尊重原始作品的版权和知识产权。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/138466.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nginx的安装——Linux环境

1、安装gcc nginx源码的编译依赖于gcc 环境&#xff0c;如果没有 gcc 环境&#xff0c;则需要安装&#xff1a; yum install gcc-c 2、PCRE pcre-devel 安装 PCRE(Perl Compatible Regular Expressions) 是一个Perl库&#xff0c;包括 perl 兼容的正则表达式库。nginx 的 htt…

Vue检测数据的原理

Vue能够对用户的数据进行响应式&#xff0c;也就是你在data中写了什么&#xff0c;你在模板中用到data的部分就会渲染成什么&#xff0c;那么Vue是怎么知道用户修改了data中的数据变化并对模板重新进行解析的呢&#xff1f; 在Vue将数据存储为自身的_data之前&#xff0c;Vue会…

ubuntu20.04下Kafka安装部署及基础使用

Ubuntu安装kafka基础使用 kafka 安装环境基础安装下载kafka解压文件修改配置文件启动kafka创建主题查看主题发送消息接收消息 工具测试kafka Assistant 工具连接测试基础连接连接成功查看topic查看消息查看分区查看消费组 Idea 工具测试基础信息配置信息当前消费组发送消息消费…

数据挖掘十大算法--Apriori算法

一、Apriori 算法概述 Apriori 算法是一种用于关联规则挖掘的经典算法。它用于在大规模数据集中发现频繁项集&#xff0c;进而生成关联规则。关联规则揭示了数据集中项之间的关联关系&#xff0c;常被用于市场篮分析、推荐系统等应用。 以下是 Apriori 算法的基本概述&#x…

SpringMVC之国际化上传下载

spring项目中的国际化 1&#xff09;提供中英两种资源文件 i18n_en_US.properties i18n_zh_CN.properties 2&#xff09;配置国际化资源文件&#xff08;在spring配置文件中添加&#xff0c;例如spring-mvc.xml&#xff09; <bean id"messageSource" class&quo…

【API篇】三、转换算子API(上)

文章目录 0、demo数据1、基本转换算子&#xff1a;映射map2、基本转换算子&#xff1a;过滤filter3、基本转换算子&#xff1a;扁平映射flatMap4、聚合算子&#xff1a;按键分区keyBy5、聚合算子&#xff1a;简单聚合sum/min/max/minBy/maxBy6、聚合算子&#xff1a;归约聚合re…

EmoTalk: Speech-Driven Emotional Disentanglement for 3D Face Animation

问题:现存的方法经常忽略面部的情感或者不能将它们从语音内容中分离出来。 方法:本文提出了一种端到端神经网络来分解语音中的不同情绪,从而生成丰富的 3D 面部表情。 1.我们引入了情感分离编码器(EDE),通过交叉重构具有不同情感标签的语音信号来分离语音中的情感和内容。…

只要封装相同,电容体本身大小就一样吗?

高速先生成员--黄刚 当然这篇文章也还是针对高速信号的交流耦合电容&#xff0c;并不是用于电源的去耦电容&#xff0c;同时文章的灵感也来源于上一篇文章讲不同容值电容对高速信号原理上的效果差异。为什么我们在做高速设计的时候&#xff0c;速率越高&#xff0c;希望电容封装…

数字孪生技术如何提高仓储效率?

随着科技的不断演进&#xff0c;数字孪生技术已然成为仓储管理领域的一股强大力量&#xff0c;带来了前所未有的变化和机遇。数字孪生技术的出现&#xff0c;为仓储行业带来了前所未有的智能化和高效化&#xff0c;从仓库布局到库存管理&#xff0c;从人员配备到安全控制&#…

基于springboot实现汉服文化分享平台项目【项目源码+论文说明】

摘要 本论文主要论述了如何使用JAVA语言开发一个汉服文化平台网站 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述汉服文化平台网站的当前背景以及系统开发的…

收集灵感都有哪些网站推荐?

设计是一件非常令人兴奋的事情。特别是最常见的平面设计&#xff0c;作为一种传达想法或信息的视觉表达形式&#xff0c;被要求不仅突出个性和主题&#xff0c;而且具有创造力和美感&#xff0c;使许多设计师在灵感枯竭时疯狂。此时&#xff0c;浏览一些平面设计网站&#xff0…