← Back to skills
extension
Category: Marketing & GrowthAPI key requirement unconfirmed

水印移除助手

去除图片、文档、视频中的水印

personAuthor: nice696hubModelScope

去水印工具(Watermark Remover)

去除图片、PDF、Word(.docx)、PPT(.pptx)、视频中水印的通用技能。核心逻辑封装在 scripts/remove_watermark.py(一个不依赖 GUI 的 CLI,输出 JSON 结果,便于自动化 与断言验证)。优先用脚本完成,不要手动用 cv2 现写处理逻辑。

触发时机

  • 用户提到“去水印 / 去除水印 / 去掉水印 / remove watermark / 抹掉水印/LOGO”等, 输入为图片、PDF、Word、PPT、视频文件时,本技能适用。
  • 用户给的是文件路径(或待处理文件在工作目录/附件目录中)时,直接调用脚本。
  • 输入格式不明时先按扩展名自动判断(--type auto 是默认值)。

依赖

运行时需可用:python(>=3.8)、opencv-python-headless、numpy、 PyMuPDF(pymupdf)、lxml(docx/pptx 是 zip+xml,可选)、ffmpeg + ffprobe (视频混流音频时用;没有 ffmpeg 也能出无声视频)。

安装示例:

python -m pip install opencv-python-headless numpy pymupdf

如缺 ffmpeg:apt-get install -y ffmpeg 或 conda install -c conda-forge ffmpeg。

快速上手

脚本路径:scripts/remove_watermark.py。运行前先确认脚本存在,必要时 pip install 上述依赖。

图片

python scripts/remove_watermark.py 带水印.png -o out.png
python scripts/remove_watermark.py 带水印.png -o out.png --bbox 600,450,780,560
python scripts/remove_watermark.py 带水印.png -o out.png --bbox 10,10,200,90 --method mirror
  • 默认自动检测(平铺文字水印 / 角落 LOGO),检测不到会报错并提示用 --bbox。
  • --method mirror:镜像填充,对角落 LOGO效果通常比 inpaint 好。
  • 验证效果:--reference <干净原图> 会输出 psnr_db,一般 >= 20dB 表示修复质量好。

PDF

python scripts/remove_watermark.py 带水印.pdf -o out.pdf --text "内部资料"
python scripts/remove_watermark.py 带水印.pdf -o out.pdf          # 自动识别跨页重复文字
  • 优先 --text:基于文本层精准删除该文字(保持矢量、体积小)。
  • 不传 --text 时自动识别“多页重复出现”的文字并按水印删除。
  • 若没有可删除的文本水印(比如 PDF 是扫描图+图片水印),自动回退为 “整页栅格化 + 图像去水印 + 重建 PDF”,可用 --bbox 指定水印区域提高效果。

Word / PPT

python scripts/remove_watermark.py 带水印.docx -o out.docx
python scripts/remove_watermark.py 带水印.pptx -o out.pptx
python scripts/remove_watermark.py 带水印.docx -o out.docx --text "机密"
  • docx:删除页眉/页脚中的 v:shape(behindDoc 文字水印)与页面背景水印。
  • pptx:删除幻灯片/母版/版式中内容匹配水印关键词的 shape(文本或名称含 水印/机密/confidential/draft 等)。建议传 --text 精确匹配,避免误删正文。

视频

python scripts/remove_watermark.py 带水印.mp4 -o out.mp4 --bbox 20,20,180,60
python scripts/remove_watermark.py 带水印.mp4 -o out.mp4          # 自动检测首帧
python scripts/remove_watermark.py 带水印.mp4 -o out.mp4 --bbox 20,20,180,60 --reference clean.mp4
  • 对固定位置水印逐帧 inpaint;有音频时自动用 ffmpeg 保留原音频。
  • 建议视频必传 --bbox(水印位置固定时最稳);自动检测只在首帧做,可能漏检。

输出与验证

脚本成功时输出一行 JSON,例如:

{"ok": true, "type": "image", "input": "...", "output": "...",
 "kind": "tiled", "mask_area_ratio": 0.02, "psnr_db": 28.4}
  • kind:tiled(平铺文字水印)/ corner(角落水印)/ bbox(手动指定)。
  • psnr_db:传 --reference 时给出,>=20dB 视为修复效果良好。
  • 输出文件默认 <原名>_nowatermark.<ext>,可用 -o 覆盖。

注意事项 / 边界

  • 诚实评估:自动检测不是万能的。脚本检测不到水印时会直接报错(不会假装成功); 此时改用 --bbox/--text 重试,并把失败情况如实告诉用户。
  • 对“半透明平铺文字”效果最好;“水印盖住重要内容”的情况,修复后会留下 inpaint 痕迹,需向用户说明这是物理可恢复性的极限,无法做到无损。
  • docx/pptx 只改 OOXML 结构,不动正文内容;但若水印被做成普通文本段落, 需要用户提供 --text 精确删除。
  • 视频逐帧处理较慢:先确认水印区域(首帧截图 + 视觉查看或问用户 bbox)再跑, 避免处理整段视频后发现区域不对。
  • 不要处理加密/受密码保护的 PDF、DRM 视频;文件无法打开时报错即可。
  • 结果文件必须真实生成并核对存在后再交付;脚本 ok:false 时不要谎报成功。