Skip to content

About

图片去水印工具 - 基于 OpenCV 的智能水印检测与去除 Web 应用

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

🖼️ 图片去水印工具

基于 OpenCV + Flask 的智能图片去水印 Web 应用,支持手动框选、自动检测和批量处理三种模式,内含 7 种水印检测策略、EAST 深度学习文字检测、FFT 频域分析、LAB 色彩校正。

✨ 功能特性

  • 手动框选模式 — 鼠标拖拽选中水印区域,一键去除
  • 自动检测模式 — 7 种检测策略加权融合,智能识别水印
  • 批量处理模式 — 多张图片一键处理,实时进度展示,结果打包 ZIP 下载
  • 平台预设 — 针对抖音、B站、微博、小红书优化检测参数
  • AI 文字检测 — 可选下载 EAST 深度学习模型,大幅提升文字水印识别率
  • FFT 频域检测 — 通过频域分析检测周期性半透明水印
  • LAB 色彩校正 — 修复后自动匹配周围区域颜色,消除色差
  • 智能修复 — 羽化迭代修复 + 泊松融合 + 纹理复制 + 边缘羽化,大面积水印也能处理

🚀 部署教程

一、Windows 本地部署

1. 安装 Python

前往 Python 官网 下载 Python 3.8 ~ 3.12(建议 3.10 或 3.11)。

安装时 务必勾选 "Add Python to PATH",然后点 Install Now。

验证安装:

python --version
# 输出类似 Python 3.11.9 即成功

2. 下载项目

方式一:用 Git 克隆

git clone https://github.com/你的用户名/watermark-remover.git
cd watermark-remover

方式二:直接下载 ZIP

  • 在 GitHub 仓库页面点绿色 Code 按钮 → Download ZIP
  • 解压到任意目录,用终端进入该目录

3. 安装依赖

pip install -r requirements.txt

如果网络慢,可以用国内镜像源:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

4. 启动应用

python app.py

看到以下输出说明启动成功:

==================================================
  [v4] Image Watermark Remover
  Platforms: Douyin / Bilibili / Weibo / Xiaohongshu / General
  AI Model: NOT DOWNLOADED (download from web UI)
  URL: http://localhost:5000
==================================================

浏览器打开 http://localhost:5000 即可使用。

5. (可选)下载 AI 模型

在页面顶部点击「下载 AI 模型 (~90MB)」按钮,等待下载完成。模型存放于 models/ 目录,下载一次后续自动加载。


二、Linux 服务器部署

以下以 Ubuntu 20.04/22.04 为例,CentOS 把 apt 换成 yum 即可。

1. 安装系统依赖

sudo apt update
sudo apt install -y python3 python3-pip python3-venv git

2. 克隆项目

git clone https://github.com/你的用户名/watermark-remover.git
cd watermark-remover

3. 创建虚拟环境(推荐)

python3 -m venv venv
source venv/bin/activate

4. 安装依赖

pip install -r requirements.txt

OpenCV 的 cv2.dnn 模块需要系统有 GUI 库支持。如果服务器无桌面环境,安装 headless 版本:

pip install opencv-python-headless>=4.8.0

5. 测试启动

python app.py

浏览器访问 http://服务器IP:5000,确认能正常打开。

6. 生产环境部署(后台运行 + Nginx 反代)

方式 A:systemd 服务(推荐)

创建服务文件:

sudo tee /etc/systemd/system/watermark.service << 'EOF'
[Unit]
Description=Watermark Remover Web App
After=network.target

[Service]
User=www-data
WorkingDirectory=/opt/watermark-remover
ExecStart=/opt/watermark-remover/venv/bin/python app.py
Restart=always
RestartSec=5
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target
EOF

把项目放到 /opt/watermark-remover,确保权限正确:

sudo cp -r watermark-remover /opt/
sudo chown -R www-data:www-data /opt/watermark-remover

启动服务:

sudo systemctl daemon-reload
sudo systemctl enable watermark
sudo systemctl start watermark
sudo systemctl status watermark

方式 B:nohup 简单后台运行

nohup python app.py > app.log 2>&1 &

Nginx 反向代理配置

sudo apt install -y nginx

创建配置文件:

sudo tee /etc/nginx/sites-available/watermark << 'EOF'
server {
    listen 80;
    server_name your-domain.com;  # 换成你的域名或 IP

    client_max_body_size 50m;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
EOF

启用配置并重启 Nginx:

sudo ln -s /etc/nginx/sites-available/watermark /etc/nginx/sites-enabled/
sudo nginx -t           # 检查配置语法
sudo systemctl restart nginx

现在通过 http://your-domain.com 即可访问。

7. (可选)配置 HTTPS

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

按提示操作即可自动配置 HTTPS + 自动续期。


📖 使用说明

手动框选模式

适合已知水印位置的情况:

  1. 点击「📁 上传图片」或直接拖拽图片到页面
  2. 确认当前为「✏️ 手动框选」模式(默认)
  3. 在图片上按住鼠标左键拖拽,画出水印所在的矩形区域(红色虚线框)
  4. 可以画多个选区,支持「↩️ 撤销」和「🗑️ 清除选区」
  5. 点击「🚀 去除水印」,等待处理完成
  6. 右侧显示结果,点击「💾 下载」保存

自动检测模式

适合不确定水印位置的情况:

  1. 点击「📁 上传图片」或拖拽图片
  2. 点击切换到「🔍 自动检测」模式
  3. 选择 平台(抖音 / B站 / 微博 / 小红书 / 通用),不同平台的水印位置和样式不同,选对平台检测更准
  4. 调整 灵敏度(1-10),默认 5。值越大检测越激进,可能误检更多;值越小越保守
  5. 勾选 🤖 AI 检测(需先下载 AI 模型),可显著提升文字水印的检测精度
  6. 点击「🚀 去除水印」
  7. 处理完成后可点击「👁️ 显示检测区域」查看 AI 检测到了哪些区域

批量处理模式

适合一次去除多张图片水印的情况:

  1. 点击切换到「📦 批量处理」模式
  2. 拖拽多张图片到上传区域,或点击「点击选择文件」多选图片(支持 JPG / PNG / WEBP)
  3. 选择 平台、调整 灵敏度、决定是否启用 AI 检测(与自动模式相同)
  4. 点击「🚀 开始批量处理」
  5. 文件列表实时显示每张图片的处理状态:⏳等待中 → 🔄处理中 → ✅完成 / ❌失败
  6. 顶部进度条显示整体进度
  7. 处理完成后点击「📦 全部下载 (ZIP)」打包下载所有结果
  8. 也可以点击右侧结果网格中的单张图片单独下载
  9. 如果有失败的图片,修改设置后点击「🔄 重新处理失败项」可只重试失败的

提示:批量处理串行执行每张图片,大图可能需要几秒。处理过程中可随时点「⏹ 停止」中断。

灵敏度建议

灵敏度 效果
1-3 保守检测,只识别最明显的水印,适合水印清晰的图片
4-6 均衡模式,大多数场景适用
7-10 激进检测,能发现微弱水印,但可能误伤图片细节

⚙️ 检测策略说明

自动检测模式使用 7 种策略并行检测,加权融合后生成最终水印 mask:

策略 原理 适用场景
平台专属 HSV 颜色筛选 + 角落区域定位 已知平台的固定水印样式(抖音/微博等)
透明文字 高通滤波 + 自适应阈值 + 颜色过滤 半透明叠加水印
MSER 最稳定极值区域检测 + 连通域分析 任意位置的文字水印
频域分析 拉普拉斯算子 + 低饱和度区域 边缘锐利的叠加水印
FFT 频域 DFT 频谱分析 + 异常频率峰值检测 周期性半透明水印(如满屏斜纹水印)
底部横条 Sobel 梯度 + 横向形态学 底部版权横条(抖音/小红书)
AI-EAST 深度学习文字区域检测 + 角落过滤 复杂背景下的文字水印

🔧 修复算法说明

水印检测完成后,根据 mask 面积自动选择最优修复策略:

面积占比 策略 说明
< 2% NS inpaint + 边缘羽化 小面积文字水印,Navier-Stokes 方法边缘更平滑
2% ~ 15% 羽化迭代修复 + 泊松融合 多轮递减半径 inpaint,每轮羽化混合消除接缝
> 15% 分块多尺度 + 纹理复制 + 泊松融合 低分辨率粗修复 → 纹理填充 → 分块精细修复 → 泊松融合

每种策略最后都会经过:

  • 边缘羽化 — 距离变换生成渐变 alpha,消除修复区域和原图的接缝
  • 泊松融合 — cv2.seamlessClone 保持梯度连续,匹配边界颜色
  • LAB 色彩校正 — 将修复区域的亮度/色彩分布匹配到周围区域,消除色差

🛠️ 技术栈

层级 技术
后端 Python 3 / Flask
图像处理 OpenCV (inpaint / seamlessClone / MSER / DNN / distanceTransform)
频域分析 NumPy FFT / OpenCV DFT
色彩校正 OpenCV BGR↔LAB 色彩空间转换
AI 模型 EAST 文字检测 (TensorFlow frozen graph, ~90MB)
前端 原生 HTML / CSS / JavaScript (Canvas API)
批量下载 JSZip (客户端 ZIP 打包)

📁 项目结构

watermark-remover/
├── app.py              # Flask 后端,包含所有检测和修复算法(~1100 行)
├── requirements.txt    # Python 依赖
├── LICENSE             # MIT 开源协议
├── README.md           # 项目说明(本文件)
├── UPLOAD_GUIDE.md     # 项目上传 GitHub 教程
├── templates/
│   └── index.html      # 页面模板
├── static/
│   ├── style.css       # 样式
│   └── app.js          # 前端交互逻辑(含批量处理)
├── uploads/            # 上传文件临时目录(自动创建,已 gitignore)
└── models/             # AI 模型存放目录(自动创建,已 gitignore)

📊 处理流程

┌─────────────┐     ┌──────────────────────────────────┐
│  上传图片    │────→│  7 种检测策略并行运行              │
└─────────────┘     │  ① 平台专属  ② 透明文字  ③ MSER   │
                    │  ④ 频域分析  ⑤ FFT频域   ⑥ 底部横条│
                    │  ⑦ AI-EAST                         │
                    └──────────┬───────────────────────────┘
                               ▼
                    ┌──────────────────────┐
                    │  加权融合 + 自适应阈值  │
                    │  + 噪点清理 + mask膨胀 │
                    └──────────┬───────────┘
                               ▼
                    ┌──────────────────────┐
                    │  根据面积选修复策略    │
                    │  NS/羽化迭代/分块多尺度│
                    └──────────┬───────────┘
                               ▼
                    ┌──────────────────────┐
                    │  边缘羽化 + 泊松融合   │
                    │  + LAB 色彩校正       │
                    └──────────┬───────────┘
                               ▼
                    ┌─────────────┐
                    │  输出结果     │
                    └─────────────┘

❓ 常见问题

Q: 处理后图片模糊怎么办? A: 水印区域越大,修复效果越难保证。尝试用手动模式精确框选水印文字部分,而不是整个水印区域。大面积水印建议分多次小区域处理。

Q: 自动检测没找到水印? A: 试试调高灵敏度,或切换到正确的平台预设。如果水印是半透明叠加的,FFT 策略可能更有效;如果是纯色文字,勾选 AI 检测效果更好。

Q: 检测到了但修复后有色差? A: 已内置 LAB 色彩校正。如果仍有轻微色差,可能是因为水印覆盖了复杂纹理区域,可以尝试手动框选更精确的区域重新处理。

Q: AI 模型下载失败? A: 模型托管在 GitHub(~90MB),国内网络可能较慢。可以手动下载后放到 models/frozen_east_text_detection.pb:

wget -O models/frozen_east_text_detection.pb https://github.com/oyyd/frozen_east_text_detection.pb/raw/master/frozen_east_text_detection.pb

Q: 批量处理时某张图片失败了? A: 修改设置后点击「🔄 重新处理失败项」可只重试失败的图片,已完成的不会重复处理。

Q: 能处理视频水印吗? A: 当前版本只支持图片。可以写脚本用 ffmpeg 拆帧 → 调用 /auto-detect API → 重新合成视频。

📄 License

MIT License

About

图片去水印工具 - 基于 OpenCV 的智能水印检测与去除 Web 应用

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages