一站式开源水印标识开发套件,支持文本、图像、音频和视频内容的显式标识,隐式标识和隐水印功能
快速开始 »
本项目提供一站式开源水印标识开发套件。支持文本、图像、音频和视频四大模态,具备显式水印标识和隐水印功能,覆盖GB 45438-2025《网络安全技术 人工智能生成合成内容标识方法》标准规定的标识范围。
应用案例:本项目作为实训平台,支撑了上海市人工智能安全专项课程 2025 短训班的教学与实战演练,帮助学员深度掌握AIGC水印嵌入与检测技术。
(返回顶部)
| 原始图像 | 隐水印图像 | 显式标识图像 |
|---|---|---|
![]() | ![]() | ![]() |
| 原始视频 | 隐水印视频 | 显式标识视频 |
|---|---|---|
![]() | ![]() | ![]() |
克隆仓库
git clone --recurse-submodules https://github.com/MillionMillionLi/AIGC-Watermark-Toolkit.git
cd AIGC-Watermark-Toolkit
安装核心依赖
pip install -r requirements.txt
安装系统依赖
sudo apt install ffmpeg
(可选)下载 AI 生成模型
仅当需要使用 AI 生成内容并添加水印功能时才需要此步骤。如果只处理已有文件(上传模式添加水印),可跳过此步骤。
# 图像生成 + 水印(Stable Diffusion 2.1)
python scripts/download_sd_model.py
# 视频生成 + 水印(Wan2.1)
python scripts/download_wan_model.py
# 文本生成 + 水印(PostMark + Mistral)
python scripts/download_postmark_deps.py
# 音频生成 + 水印(Bark)
python scripts/download_bark_model.py
pip install git+https://github.com/suno-ai/bark.git
配置环境
export TRANSFORMERS_OFFLINE=1
export HF_HUB_OFFLINE=1
export HF_ENDPOINT=https://hf-mirror.com
前置要求:需要 NVIDIA GPU 和 NVIDIA Container Toolkit
拉取镜像
docker pull millionmillionli/aigc-watermark-toolkit:latest
运行容器
docker run -d --name aigc-watermark-toolkit \
--gpus all \
-v /path/to/your/.cache/huggingface:/cache/huggingface \ ## 将这一行的路径改为你的实际模型缓存路径
-v $(pwd):/app \
-e HF_HOME=/cache/huggingface \
-e PYTHONPATH=/app \
-e CUDA_VISIBLE_DEVICES=0 \
--restart unless-stopped \
millionmillionli/aigc-watermark-toolkit:latest \
tail -f /dev/null
(可选)准备AI模型,仅当需要使用 AI 生成内容并添加水印功能时才需要此步骤。
需要下载的模型:
stabilityai/stable-diffusion-2-1-base)Wan-AI/Wan2.1-T2V-1.3B-Diffusers)mistralai/Mistral-7B-Instruct-v0.2)suno/bark)进入容器
docker exec -it aigc-watermark-toolkit bash
进阶使用:如需完整配置(benchmark挂载、只读配置等),可使用 docker-compose up -d或查看docker-compose.yml 文件。
WatermarkTool是推荐的主要入口点,提供统一的接口支持所有模态的水印和显式标识操作。
from src.unified.watermark_tool import WatermarkTool
# 使用默认配置初始化
tool = WatermarkTool()
# 使用自定义配置初始化
tool = WatermarkTool(config_path="path/to/config.yaml")
def embed(self,
content: Union[str, Path],
message: str,
modality: str,
operation: str = 'watermark',
**kwargs) -> Union[str, PIL.Image, torch.Tensor, Path]:
"""
嵌入水印或添加显式标识
Args:
content: 输入内容
- 文本模态: 提示文本(AI生成)或文本文件路径(上传模式)
- 图像模态: 提示文本(AI生成)或图像文件路径(上传模式)
- 音频模态: 提示文本(AI生成)或音频文件路径(上传模式)
- 视频模态: 提示文本(AI生成)或视频文件路径(上传模式)
message: 要嵌入的水印信息或显式标识文本
modality: 模态类型 ('text', 'image', 'audio', 'video')
operation: 操作类型 ('watermark' 或 'visible_mark')
**kwargs: 模态特定参数
Returns:
处理后的内容(格式根据模态而定)
"""
使用示例:
# 隐式水印(默认operation='watermark')
img_wm = tool.embed("a cat under the sun", "img_msg", 'image')
# 上传文件模式
img_wm = tool.embed("", "file_msg", 'image', image_input="/path/to/image.jpg")
# 显式标识
marked_img = tool.embed("/path/to/image.jpg", "AI标识", 'image',
operation='visible_mark', position='bottom_right')
def extract(self,
content: Union[str, PIL.Image, torch.Tensor, Path],
modality: str,
operation: str = 'watermark',
**kwargs) -> Dict[str, Any]:
"""
提取水印或检测显式标识
Args:
content: 待检测的内容
modality: 模态类型
operation: 操作类型 ('watermark' 或 'visible_mark')
**kwargs: 检测参数
Returns:
检测结果字典:
{
'detected': bool, # 是否检测到水印/标识
'message': str, # 提取的消息内容
'confidence': float, # 置信度 (0.0-1.0)
'metadata': dict # 额外的元数据信息
}
"""
使用示例:
# 提取隐式水印
img_result = tool.extract(watermarked_image, 'image')
# 检测显式标识
mark_result = tool.extract(marked_content, 'text', operation='visible_mark')
评估各模态水印算法的性能表现,提供标准化的测试数据集、攻击方式和评估指标,帮助用户选择最适合应用场景的算法。
评估图像水印算法对传统失真攻击(亮度、对比度、模糊、噪声、JPEG压缩)的鲁棒性。
核心特性:
数据集: W-Bench DISTORTION_1K(1000张图像)
评估指标:: PSNR, SSIM, LPIPS, TPR,Bit accuracy
快速使用:
python benchmarks/Image-Bench/run_benchmark.py
使用自定义数据集:
benchmarks/Image-Bench/dataset/my_dataset/)configs/videoseal_distortion.yaml:
dataset:
path: benchmarks/Image-Bench/dataset/my_dataset
评估指标:
| 指标类别 | 指标 | 判定阈值 | 指标说明 |
|---|---|---|---|
| 质量 | PSNR | ≥ 35.0 dB | Peak Signal-to-Noise Ratio(峰值信噪比),越高越好 |
| 质量 | SSIM | ≥ 0.95 | Structural Similarity Index(结构相似度),越接近 1 越好 |
| 质量 | LPIPS | ≤ 0.015 | Learned Perceptual Similarity(感知相似度),越低越好 |
| 鲁棒性 | TPR | ≥ 0.80 | True Positive Rate(检测成功率),越高表示鲁棒性越强 |
| 鲁棒性 | Bit Accuracy | ≥ 0.85 | 水印比特准确率,决定解码结果与原始水印的接近程度 |
结果分析:
| TPR | Bit Accuracy | 质量评估指标 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
![]() | ![]() |
|
详细文档: benchmarks/Image-Bench/README.md
评估音频水印算法(AudioSeal)对多种音频攻击的鲁棒性,覆盖噪声、滤波、压缩等常见干扰。
核心特性:
快速使用:
python benchmarks/Audio-Bench/run_benchmark.py
使用自定义数据集:
configs/audioseal_robustness.yaml:
dataset:
path: benchmarks/Audio-Bench/dataset/my_audio_dataset
评估指标:
| 指标类别 | 指标 | 判定阈值 | 指标说明 |
|---|---|---|---|
| 质量 | SNR | ≥ 20.0 dB | Signal-to-Noise Ratio,原音频 vs 水印音频,越高越好 |
| 鲁棒性 | TPR (Detection Probability) | ≥ 0.80 | 以检测概率判定的真阳性率 |
| 鲁棒性 | Bit Accuracy | ≥ 0.875 | 图案水印比特正确率,越高越好 |
结果分析:
| TPR (Detection Probability) | Bit Accuracy | 质量评估指标 | ||||||
|---|---|---|---|---|---|---|---|---|
![]() | ![]() |
|
详细文档: benchmarks/Audio-Bench/README.md
评估视频水印算法(VideoSeal)在图像级和视频级扰动下的鲁棒性,严格遵循VideoMarkBench论文方法。
核心特性:
快速使用:
python benchmarks/Video-Bench/run_benchmark.py
使用自定义数据集:
configs/videoseal_robustness.yaml:
dataset:
path: benchmarks/Video-Bench/dataset/my_video_dataset
评估指标:
| 指标类别 | 指标 | 判定阈值 | 指标说明 |
|---|---|---|---|
| 质量 | PSNR | ≥ 35.0 dB | Peak Signal-to-Noise Ratio,越高越好 |
| 质量 | SSIM | ≥ 0.95 | Structural Similarity Index,越接近 1 越好 |
| 质量 | tLP | ≤ 0.20 | Temporal LPIPS,衡量跨帧感知一致性,越低越好 |
| 鲁棒性 | FNR | ≤ 0.01 | False Negative Rate,漏检率,越低表示鲁棒性越强 |
| 鲁棒性 | Bit Accuracy | ≥ 0.85 | 解码比特准确率,越高越好 |
结果分析:
| FNR | Bit Accuracy | 质量评估指标 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
![]() | ![]() |
|
详细文档: benchmarks/Video-Bench/README.md
(返回顶部)
本项目基于以下优秀的开源工作构建:
(返回顶部)
如果您觉得本项目对您的研究有所帮助,请考虑引用我们的论文:
@article{li2025unimark,
title={UniMark: Artificial Intelligence Generated Content Identification Toolkit},
author={Meilin Li and Ji He and Yu Yi and Jia Xu and Shanzhe Lei and Yan Teng and Yingchun Wang and Xuhong Wang},
journal={arXiv preprint arXiv:2512.12324},
year={2025}
}
(返回顶部)
25 commits
Jupyter Notebook
52.8%
Python
46.9%
一站式开源水印标识开发套件,支持文本、图像、音频和视频内容的显式标识,隐式标识和隐水印功能
快速开始 »
本项目提供一站式开源水印标识开发套件。支持文本、图像、音频和视频四大模态,具备显式水印标识和隐水印功能,覆盖GB 45438-2025《网络安全技术 人工智能生成合成内容标识方法》标准规定的标识范围。
应用案例:本项目作为实训平台,支撑了上海市人工智能安全专项课程 2025 短训班的教学与实战演练,帮助学员深度掌握AIGC水印嵌入与检测技术。
(返回顶部)
| 原始图像 | 隐水印图像 | 显式标识图像 |
|---|---|---|
![]() | ![]() | ![]() |
| 原始视频 | 隐水印视频 | 显式标识视频 |
|---|---|---|
![]() | ![]() | ![]() |
克隆仓库
git clone --recurse-submodules https://github.com/MillionMillionLi/AIGC-Watermark-Toolkit.git
cd AIGC-Watermark-Toolkit
安装核心依赖
pip install -r requirements.txt
安装系统依赖
sudo apt install ffmpeg
(可选)下载 AI 生成模型
仅当需要使用 AI 生成内容并添加水印功能时才需要此步骤。如果只处理已有文件(上传模式添加水印),可跳过此步骤。
# 图像生成 + 水印(Stable Diffusion 2.1)
python scripts/download_sd_model.py
# 视频生成 + 水印(Wan2.1)
python scripts/download_wan_model.py
# 文本生成 + 水印(PostMark + Mistral)
python scripts/download_postmark_deps.py
# 音频生成 + 水印(Bark)
python scripts/download_bark_model.py
pip install git+https://github.com/suno-ai/bark.git
配置环境
export TRANSFORMERS_OFFLINE=1
export HF_HUB_OFFLINE=1
export HF_ENDPOINT=https://hf-mirror.com
前置要求:需要 NVIDIA GPU 和 NVIDIA Container Toolkit
拉取镜像
docker pull millionmillionli/aigc-watermark-toolkit:latest
运行容器
docker run -d --name aigc-watermark-toolkit \
--gpus all \
-v /path/to/your/.cache/huggingface:/cache/huggingface \ ## 将这一行的路径改为你的实际模型缓存路径
-v $(pwd):/app \
-e HF_HOME=/cache/huggingface \
-e PYTHONPATH=/app \
-e CUDA_VISIBLE_DEVICES=0 \
--restart unless-stopped \
millionmillionli/aigc-watermark-toolkit:latest \
tail -f /dev/null
(可选)准备AI模型,仅当需要使用 AI 生成内容并添加水印功能时才需要此步骤。
需要下载的模型:
stabilityai/stable-diffusion-2-1-base)Wan-AI/Wan2.1-T2V-1.3B-Diffusers)mistralai/Mistral-7B-Instruct-v0.2)suno/bark)进入容器
docker exec -it aigc-watermark-toolkit bash
进阶使用:如需完整配置(benchmark挂载、只读配置等),可使用 docker-compose up -d或查看docker-compose.yml 文件。
WatermarkTool是推荐的主要入口点,提供统一的接口支持所有模态的水印和显式标识操作。
from src.unified.watermark_tool import WatermarkTool
# 使用默认配置初始化
tool = WatermarkTool()
# 使用自定义配置初始化
tool = WatermarkTool(config_path="path/to/config.yaml")
def embed(self,
content: Union[str, Path],
message: str,
modality: str,
operation: str = 'watermark',
**kwargs) -> Union[str, PIL.Image, torch.Tensor, Path]:
"""
嵌入水印或添加显式标识
Args:
content: 输入内容
- 文本模态: 提示文本(AI生成)或文本文件路径(上传模式)
- 图像模态: 提示文本(AI生成)或图像文件路径(上传模式)
- 音频模态: 提示文本(AI生成)或音频文件路径(上传模式)
- 视频模态: 提示文本(AI生成)或视频文件路径(上传模式)
message: 要嵌入的水印信息或显式标识文本
modality: 模态类型 ('text', 'image', 'audio', 'video')
operation: 操作类型 ('watermark' 或 'visible_mark')
**kwargs: 模态特定参数
Returns:
处理后的内容(格式根据模态而定)
"""
使用示例:
# 隐式水印(默认operation='watermark')
img_wm = tool.embed("a cat under the sun", "img_msg", 'image')
# 上传文件模式
img_wm = tool.embed("", "file_msg", 'image', image_input="/path/to/image.jpg")
# 显式标识
marked_img = tool.embed("/path/to/image.jpg", "AI标识", 'image',
operation='visible_mark', position='bottom_right')
def extract(self,
content: Union[str, PIL.Image, torch.Tensor, Path],
modality: str,
operation: str = 'watermark',
**kwargs) -> Dict[str, Any]:
"""
提取水印或检测显式标识
Args:
content: 待检测的内容
modality: 模态类型
operation: 操作类型 ('watermark' 或 'visible_mark')
**kwargs: 检测参数
Returns:
检测结果字典:
{
'detected': bool, # 是否检测到水印/标识
'message': str, # 提取的消息内容
'confidence': float, # 置信度 (0.0-1.0)
'metadata': dict # 额外的元数据信息
}
"""
使用示例:
# 提取隐式水印
img_result = tool.extract(watermarked_image, 'image')
# 检测显式标识
mark_result = tool.extract(marked_content, 'text', operation='visible_mark')
评估各模态水印算法的性能表现,提供标准化的测试数据集、攻击方式和评估指标,帮助用户选择最适合应用场景的算法。
评估图像水印算法对传统失真攻击(亮度、对比度、模糊、噪声、JPEG压缩)的鲁棒性。
核心特性:
数据集: W-Bench DISTORTION_1K(1000张图像)
评估指标:: PSNR, SSIM, LPIPS, TPR,Bit accuracy
快速使用:
python benchmarks/Image-Bench/run_benchmark.py
使用自定义数据集:
benchmarks/Image-Bench/dataset/my_dataset/)configs/videoseal_distortion.yaml:
dataset:
path: benchmarks/Image-Bench/dataset/my_dataset
评估指标:
| 指标类别 | 指标 | 判定阈值 | 指标说明 |
|---|---|---|---|
| 质量 | PSNR | ≥ 35.0 dB | Peak Signal-to-Noise Ratio(峰值信噪比),越高越好 |
| 质量 | SSIM | ≥ 0.95 | Structural Similarity Index(结构相似度),越接近 1 越好 |
| 质量 | LPIPS | ≤ 0.015 | Learned Perceptual Similarity(感知相似度),越低越好 |
| 鲁棒性 | TPR | ≥ 0.80 | True Positive Rate(检测成功率),越高表示鲁棒性越强 |
| 鲁棒性 | Bit Accuracy | ≥ 0.85 | 水印比特准确率,决定解码结果与原始水印的接近程度 |
结果分析:
| TPR | Bit Accuracy | 质量评估指标 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
![]() | ![]() |
|
详细文档: benchmarks/Image-Bench/README.md
评估音频水印算法(AudioSeal)对多种音频攻击的鲁棒性,覆盖噪声、滤波、压缩等常见干扰。
核心特性:
快速使用:
python benchmarks/Audio-Bench/run_benchmark.py
使用自定义数据集:
configs/audioseal_robustness.yaml:
dataset:
path: benchmarks/Audio-Bench/dataset/my_audio_dataset
评估指标:
| 指标类别 | 指标 | 判定阈值 | 指标说明 |
|---|---|---|---|
| 质量 | SNR | ≥ 20.0 dB | Signal-to-Noise Ratio,原音频 vs 水印音频,越高越好 |
| 鲁棒性 | TPR (Detection Probability) | ≥ 0.80 | 以检测概率判定的真阳性率 |
| 鲁棒性 | Bit Accuracy | ≥ 0.875 | 图案水印比特正确率,越高越好 |
结果分析:
| TPR (Detection Probability) | Bit Accuracy | 质量评估指标 | ||||||
|---|---|---|---|---|---|---|---|---|
![]() | ![]() |
|
详细文档: benchmarks/Audio-Bench/README.md
评估视频水印算法(VideoSeal)在图像级和视频级扰动下的鲁棒性,严格遵循VideoMarkBench论文方法。
核心特性:
快速使用:
python benchmarks/Video-Bench/run_benchmark.py
使用自定义数据集:
configs/videoseal_robustness.yaml:
dataset:
path: benchmarks/Video-Bench/dataset/my_video_dataset
评估指标:
| 指标类别 | 指标 | 判定阈值 | 指标说明 |
|---|---|---|---|
| 质量 | PSNR | ≥ 35.0 dB | Peak Signal-to-Noise Ratio,越高越好 |
| 质量 | SSIM | ≥ 0.95 | Structural Similarity Index,越接近 1 越好 |
| 质量 | tLP | ≤ 0.20 | Temporal LPIPS,衡量跨帧感知一致性,越低越好 |
| 鲁棒性 | FNR | ≤ 0.01 | False Negative Rate,漏检率,越低表示鲁棒性越强 |
| 鲁棒性 | Bit Accuracy | ≥ 0.85 | 解码比特准确率,越高越好 |
结果分析:
| FNR | Bit Accuracy | 质量评估指标 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
![]() | ![]() |
|
详细文档: benchmarks/Video-Bench/README.md
(返回顶部)
本项目基于以下优秀的开源工作构建:
(返回顶部)
如果您觉得本项目对您的研究有所帮助,请考虑引用我们的论文:
@article{li2025unimark,
title={UniMark: Artificial Intelligence Generated Content Identification Toolkit},
author={Meilin Li and Ji He and Yu Yi and Jia Xu and Shanzhe Lei and Yan Teng and Yingchun Wang and Xuhong Wang},
journal={arXiv preprint arXiv:2512.12324},
year={2025}
}
(返回顶部)
25 commits
Jupyter Notebook
52.8%
Python
46.9%