ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

去水印却把整图抹糊?DocConverter Web 的 AI 单图 / PDF 去水印双引擎

去水印却把整图抹糊?DocConverter Web 的 AI 单图 / PDF 去水印双引擎

一、承接上篇:会盖章了,但水印还压在文档上
上篇的电子签章解决了"加盖"问题,但现实里大量文档本就压着水印、Logo——有的是自己公司的底纹,有的是来源平台的角标。要复用、要归档,就得把它们干净去掉,且不能把底图细节一起抹糊。

二、痛点:传统去水印的两难
传统工具只有两条路:要么手动涂抹,累且慢,遇到几十页的 PDF 直接放弃;要么暴力处理,把整图细节都磨平,字也跟着糊。尤其是大面积 mask,还容易留下灰斑、黑斑,比水印更难看,适得其反。

三、双模式修复后端
我们设计了双模式修复后端,按需求选速度或质量:

极速模式(默认):OpenCV 的 cv2.inpaint Telea 算法。对文档类水印效果极佳、无需 GPU、几毫秒完成;另提供流体力学 cv2_ns 作为备选。
高质量模式:IOPaint / LaMa 深度学习修复,模型为 lama_fp32.onnx / big-lama.pt,适合复杂背景的大面积去除。
前端用透明红色画笔做交互式 Mask 标注;PDF 则逐页高分辨率渲染 → 去水印 → 重新合并,保持清晰度。推理层做硬件自适应:CUDA → MPS → CPU 懒加载,有卡用卡、无卡用 CPU,开箱即用。

修复路由(示意):按质量选算法

def inpaint(mask, mode=“fast”):
if mode == “fast”:
return cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA) # 极速
return lama_model.infer(img, mask) # 高质量
四、踩坑实录:四个"变灰 / 失败"的真凶
坑 1:LaMa 加载失败。 旧版 huggingface_hub 里 diffusers 曾导入已被删除的 cached_download。我们在本地桥接成 hf_hub_download,加载恢复正常。

坑 2:局部去 Logo 后整图变灰。 前端传的是"不透明黑白 RGBA Mask",其 Alpha=255 被后端误当成"整图都要涂抹"。改为按 Mask 格式解码,并让 LaMa 只替换 mask 像素,底图安然无恙。

坑 3:cv2 大面积 mask 留灰 / 黑斑。 采用自适应半径 + 大 mask 中位背景填充 + 边缘羽化,灰斑消失。

坑 4:Mask 解码误判。 原逻辑用 max(red, alpha) 判断,遇到特定格式就错。改为按格式识别解码,彻底修准。

极速与高质量,怎么选
选型并不玄学:文档扫描件上的浅色水印、单色底纹,OpenCV Telea 几毫秒就能修得干净,且完全不需要 GPU,是默认首选;只有当背景复杂、被遮区域大、用传统算法会留痕时,才上 IOPaint / LaMa 这类深度学习修复。模型就位 lama_fp32.onnx / big-lama.pt,用质量换时间,按需取用。此外 OpenCV 还提供流体力学 cv2_ns 作为备选,应对 Telea 处理不佳的特殊纹理;而深度学习模式虽慢,却能把被水印压住的文字、线条自然补全,这是传统算法做不到的。对 PDF,则是逐页高分辨率渲染、逐页去水印、再重新合并,清晰度不丢。

对企业档案室来说,去水印往往不是一两张的事,而是成千上万份历史资料的统一清理。这时候选型的代价就显现了:如果每处水印都要人工涂抹,工作量是天文数字;如果粗暴处理把字也糊掉,资料反而报废。所以我们把极速与高质量两条路都铺好,让操作员按资料珍贵程度自行取舍,既不浪费算力,也不牺牲关键文档的可用度。本地推理还有一层意义:敏感档案不需要离开内网,合规上说得过去。对运维来说,不需要显卡也能跑,普通办公机就能扛住日常量级。

说到底,去水印的底线只有一条:只动该动的地方,其余原样保留。我们为此在 Mask 解码上花了最多功夫,因为一旦把整图误当涂抹区域,再好的模型也救不回底图。下一篇我们把视角拉到批量场景,看几百份固定位置的扫描件,怎么在完全不联网的前提下被一次性清理干净。那才是企业档案部门真正头疼的规模问题。规模一大,手动就彻底失灵,这正是自动化必须接管的地方,也是我们做批量链路的初心。

本阶段使用建议
文档类水印默认走 Telea 极速模式,无需 GPU,性价比最高;
复杂背景、大面积 Logo 再切 LaMa 高质量模式;
前端透明红画笔标 Mask,后端按格式解码、只替换 mask 像素,防整图变灰;
大面积 mask 开自适应半径 + 中位背景填充 + 边缘羽化,消除灰/黑斑;
同一份文档先试极速、不满意再升高质量,两步切换零成本;
硬件自适应 CUDA→MPS→CPU 懒加载,有卡用卡、无卡用 CPU,开箱即用。
五、小结
去水印的"质量红线"是:只动该动的地方。双引擎 + 精准 Mask 解码,让我们在本地、离线的条件下,也能拿到接近商用的修复效果。

下期预告:单图 / 单 PDF 去水印解决了"精准",但当资料变成几百张固定位置的扫描件,逐张框选就不可行了,还绝不允许联网。下一篇讲 AI 批量去水印。

标签:#去水印 #OpenCV #LaMa #IOPaint #AI修复

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进