sweeta
去除 SORA 2 视频水印的 AI 工具,基于 Florence-2 检测 + LaMA 修复双模型协作
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
去除 SORA 2 视频水印的 AI 工具,基于 Florence-2 检测 + LaMA 修复双模型协作
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2025年初,OpenAI SORA 2 生成的大量视频涌上 Instagram 和 Twitter,无数普通用户看着那些带有"SORA"水印的视频,毫不犹豫地相信这就是真实世界的影像记录。作者 Kuberwastaken 在刷了两天社交媒体后,忍不住发了一条推:"大家看到水印都不带怀疑的吗?"这条推收获了大量共鸣——人们惊讶于 AI 生成内容的逼真程度已远超普通人的辨别能力。
正是这种观察催生了 Sweeta:一个专门去除 SORA 2 视频水印的 AI 工具。它的名字来源于《蝙蝠侠:黑暗骑士》里哈维·丹特的那句"你是谁?"——作者用诙谐的方式暗示:当水印被移除,内容的来源身份也随之消失。
不过,项目在 README 第一行就明确标注了"仅限研究教育用途",作者本人也写道,他做这个工具的目的并非滥用,而是"希望推动 OpenAI 在水印设计上更加严格和明显"。这是一个技术与伦理博弈的真实案例。
Sweeta 的核心技术栈采用了双模型架构,这是它最有技术含量的部分。
第一步:Florence-2 开放词汇检测
水印去除的前提是找到水印位置。Sweeta 使用了微软的 Florence-2 多模态模型来完成这个任务。这是一个支持"开放词汇检测"(Open Vocabulary Detection)的视觉语言模型——用户只需要给一句 prompt"watermark",模型就能在整张图片中定位出所有水印区域的边界框(bounding box)。
代码中的实现非常直接:将 prompt 包装成 <OPEN_VOCABULARY_DETECTION>watermark 的格式,输入 Florence-2 模型,模型返回一个包含所有水印 bounding box 的 JSON 结果。代码还做了一个面积过滤:如果某个 bounding box 覆盖了超过一定百分比(如 5%)的图像面积,就跳过它——这可以避免把整个画面误判为水印。
第二步:iopaint LaMA 图像修复
定位到水印区域后,下一步是"填满"这些区域。Sweeta 调用了 iopaint 库,这是一个封装了多种图像修复(inpainting)模型的工具,默认使用 LaMA(Large Mask Model)进行修复。
iopaint 的 ModelManager 接收原始图片 + 水印掩码(mask),然后在掩码区域用生成式 AI 重新绘制内容。代码中配置了 50 步 DDIM 采样,以及 HDStrategy.CROP 策略来处理高分辨率图像(超过 800px 时先裁剪再处理,最后拼回)。
两种使用界面
项目同时提供了两种运行方式:
这两种入口共享同一套核心处理逻辑,通过 process_image_with_lama() 函数解耦。
从 requirements.txt 可以看到完整的依赖链:
| 层级 | 依赖 | 作用 |
|---|---|---|
| 深度学习底座 | torch / torchvision / torchaudio | CUDA GPU 加速 |
| 视觉模型 | transformers | 加载 Florence-2 |
| 图像修复 | iopaint + pydantic<2.0.0 | LaMA inpainting |
| 图像处理 | opencv-python-headless / pillow / numpy | 预处理和后处理 |
| 模型下载 | huggingface-hub | 从 HF Hub 拉取预训练权重 |
| GUI | PyQt6 | 桌面图形界面 |
| 工具链 | click / tqdm / loguru / pyyaml | CLI / 日志 / 配置 |
值得注意的是 pydantic<2.0.0 这个版本约束——这是因为 iopaint 库依赖 Pydantic v1 的验证语法,直接安装最新版 Pydantic v2 会导致运行时崩溃。项目专门维护了 FIXES.md 来记录这个兼容性问题的根因和修复方式。
根据 README 和代码分析,Sweeta 的最低配置要求:
项目提供了四种安装路径:
windows/ 目录):管理员权限运行 cmd,执行 conda 环境创建和依赖安装unix/ 目录):Shell 脚本,逻辑相同environment.yml):一行命令 conda env create -f environment.yml,最推荐无 Docker 支持,这是有意为之的选择——PyQt6 GUI 在 Docker 容器中运行需要额外的 X11 转发配置,反而增加复杂度。
架构评分:7/10
项目采用了清晰的模块分层:remwm.py 是核心处理引擎,remwmgui.py 是 GUI 包装层,download_lama.py 负责模型下载,utils.py 提供工具函数。模块边界明确,CLI 和 GUI 复用同一处理逻辑。
代码规范:6/10
loguru 记录结构化日志click 构建 CLI,参数定义规范MatLike、自定义 Enum)remwm.py 约 14KB,全局函数式组织,大型重构空间download_lama.py 不完整(GitHub 内容读取被截断)文档质量:8/10
这是项目的亮点之一。除了 README,还维护了:
FIXES.md:记录 Pydantic 兼容性问题的完整修复过程TROUBLESHOOTING.md:按错误类型分类的排查指南journal.md:作者的开发日志,有真实的人情味colab_file/Sweeta_Colab.ipynb:云端运行的完整 notebook测试覆盖:未知
仓库中未发现 test_*.py 或 tests/ 目录,缺少自动化测试用例。这是未来改进空间最大的地方。
Sweeta 的存在本身就是一个有争议的话题。作者在多处明确表态:
"It's not to abuse the great initiative by OpenAI... it's to hopefully encourage them to be harsher and more obvious with it."
潜在的负面用途:
正面的技术价值:
从 License 角度看,项目使用 Apache-2.0 许可,本质上是开源的,没有技术手段阻止滥用。这是开源社区在安全工具上的典型困境:工具本身是中性的,但发布即传播。
Sweeta 不是一个基础教程级别的 demo,而是一个真实解决特定问题的 AI 应用工程。它的价值不仅在于去水印本身,更在于展示了一个完整的多模型协作流程:Florence-2 做检测,LaMA 做修复,PyQt6 做 UI,Conda 做环境管理。对于想学习如何将多个 SOTA 模型串联成实际产品的开发者,这是一个值得研究的参考实现。
如果你对 AI 生成内容的溯源问题感兴趣,这个项目也提供了一个观察窗口:当技术让水印变得可去除,唯一真正的解决方案是让水印本身更加不可伪造——这已经超出了软件工程的范畴,进入密码学和内容安全的深水区。