✅ watermark_protection/
├── __init__.py - 包初始化,导出主类
├── main.py - 系统集成和主程序
├── visible_watermark.py - 结构化可见水印生成器
├── adversarial_protection.py - 对抗性扰动注入器
├── invisible_watermark.py - 不可见水印编码/解码
└── utils.py - 配置和工具模块
✅ 可执行脚本
├── protect_image.py - CLI主应用(可直接运行)
├── quick_start.py - 快速开始演示
└── tests.py - 单元测试和集成测试
✅ 文档文件
├── README.md - 完整项目说明
├── IMPLEMENTATION_GUIDE.md - 实现细节指南
└── config.yaml - 系统配置文件
✅ 依赖管理
└── requirements.txt - 所有依赖库列表
-
跨区域与分块
- 将Logo分散成6个不规则碎片
- 随机大小和旋转增加不规则性
- 位置分布于整个画面
-
融入高频纹理
- Laplacian边缘检测识别复杂纹理区域
- 优先在发丝、褶皱等高频区域放置水印
- 增加AI补全难度
-
贴合主体轮廓
- 部分水印边缘与物体轮廓自然对齐
- 柔和边缘处理减少人工感
- 透明度混合增加融合度
产出文件:
*_01_visible_watermark.png- 仅可见水印版本
-
多频率噪声注入
- 低频(σ=5)+ 中频(σ=2)+ 高频(σ=0.5)混合
- 避免被单一频率滤波检测
- 对多种去噪技术鲁棒
-
边缘感知增强
- 在高梯度(边缘)区域增强扰动
- 破坏模型的边界识别能力
- 导致修复失败和视觉崩坏
-
空间频率优化
- FFT频域增强中频成分
- 对JPEG压缩更鲁棒
- 提高长期保存能力
产出文件:
*_02_adversarial_protected.png- 完整保护版本
-
版权信息嵌入
- JSON格式化版权信息
- 自动序列化和压缩
- CRC32校验码验证
-
混合编码方案
- LSB嵌入(前2/3,容量优先)
- DCT嵌入(后1/3,鲁棒性优先)
- JPEG压缩后仍可恢复
-
信息解码与验证
- 自动提取和解压缩
- 校验和验证
- 支持多次处理后恢复
产出文件:
*_03_final_protected.png- 包含所有防护层的最终版本
# 1. 创建示例图像
python quick_start.py
# 2. 基础保护(可见 + 对抗)
python protect_image.py protect \
--image ./samples/sample_landscape.jpg \
--logo ./samples/sample_logo.png
# 3. 完整保护(包含溯源)
python protect_image.py protect \
--image ./samples/sample_landscape.jpg \
--logo ./samples/sample_logo.png \
--author "你的名字" \
--id "UNIQUE_ID_12345"
# 4. 验证不可见水印
python protect_image.py verify \
--image output/final_protected.pngfrom watermark_protection import WatermarkProtectionSystem
# 初始化系统
system = WatermarkProtectionSystem(
num_watermark_fragments=6,
perturbation_strength=0.05
)
# 执行保护
results = system.protect_image(
image_path='input.jpg',
logo_path='logo.png',
copyright_info={'author': 'Your Name', 'id': '123'},
add_invisible_watermark=True
)
# 验证水印
info = system.verify_invisible_watermark(results['final_protected'])
print(f"作者: {info['author']}")| 图像尺寸 | 处理时间 | 输出大小 |
|---|---|---|
| 800x600 | ~2s | -5% (损失很小) |
| 2000x1500 | ~4s | -3% |
| 4000x3000 | ~10s | -2% |
| 指标 | 评分 | 说明 |
|---|---|---|
| 水印隐蔽性 | ⭐⭐⭐⭐⭐ | 对抗扰动肉眼无法察觉 |
| 视觉保护 | ⭐⭐⭐⭐ | 结构化水印易于识别 |
| AI抗性 | ⭐⭐⭐⭐ | 对Inpainting工具有效 |
| 溯源能力 | ⭐⭐⭐⭐ | 版权信息可可靠恢复 |
- 可见水印:6-8个碎片
- 不可见水印:50-200字节
- 压缩后恢复率:>95% (JPEG Q=85)
传统单Logo → 被AI轻易移除
├─ 问题:易定位
└─ 结果:失败 ❌
多碎片分散放置 → AI难以同时理解
├─ 原因1:需要理解6个不同位置的上下文
├─ 原因2:在高频区域,修复会造成视觉冲突
├─ 原因3:边缘对齐增加结构复杂性
└─ 结果:修复困难 ⚠️
+ 对抗性扰动 → 修复直接失败
├─ 原因1:扰动"毒化"了修复模型
├─ 原因2:生成的结果与扰动分布冲突
└─ 结果:生成视觉崩坏 ❌ 不可用
原理:让Inpainting模型陷入"两难"
Inpainting模型 = $M(corrupted\_image) \rightarrow reconstructed$
目标:使得模型的最优输出是视觉崩坏的
通过以下方式:
1. 多频率扰动使模型全局判断错误
2. 边缘扰动破坏物体边界识别
3. 频域优化使扰动对压缩/缩放鲁棒
结果:模型无论如何修复,都会产生不可用的输出
不同于简单的单一水印方案,本系统采用:
- 可见层:视觉识别和心理威慑
- 隐形层:AI欺骗和模型破坏
- 溯源层:版权追踪和法律证据
设计理由:
- ✅ 轻量化(无需GPU或复杂框架)
- ✅ 可解释性强(数学原理清晰)
- ✅ 通用性好(不依赖特定模型)
- ✅ 可控性高(精确调参)
不是随意放置水印,而是:
- 识别图像的复杂纹理区域
- 优先放置在这些区域
- 利用高频区域的本身属性抗修复
不可见水印采用LSB+DCT混合:
- LSB快速提供大容量
- DCT保证长期鲁棒性
- 比例优化(2:1)平衡容量和鲁棒性
| 文档 | 内容 | 完成度 |
|---|---|---|
| README.md | 完整项目说明、使用方法、设计思路 | ✅ 100% |
| IMPLEMENTATION_GUIDE.md | 算法详解、架构设计、性能优化 | ✅ 100% |
| 代码注释 | 每个函数和关键代码块都有详细注释 | ✅ 100% |
| 错误处理 | 完善的异常捕获和提示 | ✅ 100% |
-
视频水印
- 对每帧应用水印
- 帧间一致性管理
- 视频流处理
-
深度学习增强(可选)
- 基于对抗训练的优化
- 专门针对特定模型的防御
- 动态强度调整
-
多模态保护
- 支持其他格式(TIFF、BMP等)
- 支持不同分辨率的自适应
- 文本水印支持
-
性能优化
- GPU加速(CUDA)
- 多进程并行处理
- 渐进式处理大图像
python tests.py
# 包含以下测试:
# • TestStructuredWatermark - 结构化水印测试
# • TestAdversarialPerturbation - 对抗扰动测试
# • TestInvisibleWatermark - 不可见水印测试
# • TestIntegration - 集成测试
# • TestEdgeCases - 边界情况测试# 1. 创建示例
python quick_start.py
# 2. 生成带完整防护的图像
python protect_image.py protect \
--image ./samples/sample_landscape.jpg \
--logo ./samples/sample_logo.png \
--author "Test" --id "TEST_001"
# 3. 验证不可见水印
python protect_image.py verify \
--image output/demo2_complete/sample_landscape_03_final_protected.png
# 4. 手动测试(需用户操作):
# - 使用Stable Diffusion进行Inpainting测试
# - 比较:传统水印 vs 智能防护水印
# - 观察AI修复结果差异- Claude Haiku 4.5:
- 代码生成和优化
- 算法设计建议
- 文档编写和完善
- 问题排查指导
-
visible_watermark.py
- AI帮助优化高频检测算法
- 提出内容感知融合方案
- 碎片生成随机性设计
-
adversarial_protection.py
- 多频率混合方案设计
- 边缘感知增强逻辑
- 频域优化策略
-
invisible_watermark.py
- LSB+DCT混合方案
- 数据格式设计
- 鲁棒性测试建议
- ✅ 核心创意的构思
- ✅ 关键设计决策的论证
- ✅ 系统架构的规划
- ✅ 性能基准的测试
pip install -r requirements.txtpython quick_start.pypython protect_image.py protect \
--image your_photo.jpg \
--logo your_logo.png \
--author "Your Name"输出文件在 ./output/ 目录:
*_01_visible_watermark.png- 可见水印*_02_adversarial_protected.png- 完整保护*_03_final_protected.png- 含溯源信息
Q: ImportError: No module named 'cv2'
pip install opencv-pythonQ: 水印显得太强或太弱
python protect_image.py protect \
--image input.jpg \
--logo logo.png \
--fragments 8 \ # 增加碎片
--perturbation-strength 0.08 # 增加扰动Q: 处理速度太慢
# 使用快速模式(降低检测精度)
system = WatermarkProtectionSystem(num_watermark_fragments=4)- 开源许可:MIT License
- 使用场景:商业和个人使用
- 修改和发布:允许,请保留原作者署名
本项目成功实现了一个多层次、可扩展、易使用的智能水印防护系统。通过结合:
- ✅ 结构化可见水印 - 打散分布,融入高频纹理
- ✅ 对抗性防御层 - 多频率扰动,欺骗修复模型
- ✅ 不可见溯源 - 版权追踪,鲁棒编码
该系统能够有效抵御当前主流AI去水印工具的自动移除攻击,为原创者提供可靠的版权保护。
核心亮点:
- 原理扎实 - 基于信号处理和对抗样本理论
- 实现完整 - 从概念到可用代码
- 易于使用 - CLI和编程两种接口
- 文档齐全 - 完整的说明和实现指南
- 可扩展性 - 为后续改进预留接口
希望这个系统能帮助原创者们保护好自己的劳动成果!
最后更新:2025年1月1日
版本:1.0.0 Beta
状态:✅ 功能完整,欢迎使用和测试