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

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 视频以及图片修复技术是一项具有挑战性的AI视觉任务,它涉及在视频或者图片序列中填补缺失或损坏的区域,同时保持空间和时间的连贯性。该技术在视频补全、对象移除、视频恢复等领域有广泛应用。近年来,两种突出的方案在视频修复中崭露头角:flow-based propagation和spatiotemporal Transformers。尽管两套方案都还不错,但它们也存在一些局限性,如空间错位、时间范围有限和过高的成本。说白了,你通过AI技术移除水印或者修复一段不清晰的视频,但结果却没法保证连贯性,让人一眼能看出来这个视频或者图片还是缺失状态,与此同时,过高的算力成本也是普通人难以承受的。

视频以及图片修复技术是一项具有挑战性的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毫无疑问是伟大的项目,但需要注意的是,移除水印可能涉及侵犯版权或违反合同条款,具体是否违法取决于您所在的国家或地区的法律法规以及相关合同的规定。

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

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

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

相关文章
|
1月前
|
人工智能 API 数据安全/隐私保护
近期非常风靡非常逼真的AI视频内容由sora生成的视频是怎么回事?-优雅草卓伊凡
近期非常风靡非常逼真的AI视频内容由sora生成的视频是怎么回事?-优雅草卓伊凡
412 12
近期非常风靡非常逼真的AI视频内容由sora生成的视频是怎么回事?-优雅草卓伊凡
|
3月前
|
人工智能 自然语言处理 数据可视化
AI视频培训|格律诗AI 视频创作与自媒体传播——某诗词学会
近日,TsingtaoAI派驻专家团队为某诗词学会学员交付《格律诗AI 视频创作与自媒体传播》培训。本课程精准切中行业痛点——传统诗词创作与现代传播方式的断层。课程摒弃泛泛而谈,直击实操:首日聚焦"工具认知+创作逻辑",系统梳理即梦、可灵等国产AI工具在格律诗意象可视化中的差异化应用,如将"月光在指尖碎裂"转化为动态场景;次日深入"语音表达+自媒体运营",传授用魔音工坊生成情感化配音、坤行数字人打造诗人形象的秘技,更结合抖音、小红书平台特性,解析"前5秒高光片段设计"等流量密码。
194 3
|
2月前
|
存储 监控 API
Python实战:跨平台电商数据聚合系统的技术实现
本文介绍如何通过标准化API调用协议,实现淘宝、京东、拼多多等电商平台的商品数据自动化采集、清洗与存储。内容涵盖技术架构设计、Python代码示例及高阶应用(如价格监控系统),提供可直接落地的技术方案,帮助开发者解决多平台数据同步难题。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
480 13
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
|
23天前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
2月前
|
数据采集 存储 XML
Python爬虫技术:从基础到实战的完整教程
最后强调: 父母法律法规限制下进行网络抓取活动; 不得侵犯他人版权隐私利益; 同时也要注意个人安全防止泄露敏感信息.
648 19
|
2月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
389 7
|
2月前
|
人工智能 编解码 自然语言处理
重磅更新!ModelScope FlowBench 支持视频生成 + 图像编辑,AI创作全面升级!
很高兴地向大家宣布,ModelScope FlowBench 客户端迎来重大功能升级! 本次更新不仅正式支持了视频节点功能,还新增了图像编辑与IC-Light智能打光等实用功能,同时对多个图像处理节点进行了深度优化和扩展。现在,您只需在 FlowBench 中轻松串联节点,即可使用 Wan2.1/Wan2.2、Qwen-Image-Edit、FLUX Kontext、IC-Light等强大模型,轻松实现创意内容的生成与编辑。 无论你是内容创作者、视觉设计师,还是AI技术爱好者,这次更新都将为你打开全新的创作边界。
496 14
|
3月前
|
人工智能 自然语言处理 机器人
AI Compass前沿速览:Jetson Thor英伟达AI计算、Gemini 2.5 Flash Image、Youtu腾讯智能体框架、Wan2.2-S2V多模态视频生成、SpatialGen 3D场景生成模型
AI Compass前沿速览:Jetson Thor英伟达AI计算、Gemini 2.5 Flash Image、Youtu腾讯智能体框架、Wan2.2-S2V多模态视频生成、SpatialGen 3D场景生成模型
AI Compass前沿速览:Jetson Thor英伟达AI计算、Gemini 2.5 Flash Image、Youtu腾讯智能体框架、Wan2.2-S2V多模态视频生成、SpatialGen 3D场景生成模型
|
2月前
|
机器学习/深度学习 人工智能 编解码
AI Compass前沿速览:PixVerse V5、gpt-realtime、Grok Code Fast、HunyuanVideo、OmniHuman-1.5、字节WaverAI视频、MiniCPM 4.5等
AI Compass前沿速览:PixVerse V5、gpt-realtime、Grok Code Fast、HunyuanVideo、OmniHuman-1.5、字节WaverAI视频、MiniCPM 4.5等
AI Compass前沿速览:PixVerse V5、gpt-realtime、Grok Code Fast、HunyuanVideo、OmniHuman-1.5、字节WaverAI视频、MiniCPM 4.5等

热门文章

最新文章

推荐镜像

更多