尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

一条命令嵌入隐形水印,提取无须原图:blind_watermark 盲水印上手实录

发布时间:2026/9/12 5:56:03

资讯中心
01
ARTICLE

一条命令嵌入隐形水印,提取无须原图:blind_watermark 盲水印上手实录

一条命令嵌入隐形水印,提取无须原图:blind_watermark 盲水印上手实录
一条命令嵌入隐形水印提取无须原图blind_watermark 盲水印上手实录【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark作品被人转载至别人的博客你第一个反应是有凭证吗 如果发图前就嵌入了盲水印现在只需要那张被攻击过的图。 无需原图。blind_watermark 是干这件事的开源项目把文字或 logo 隐形嵌入普通图片之后从那张图里直接把水印提取出来。 上手实录blind_watermark 安装命令与一条命令嵌入先装。一行命令pip install blind-watermark想用源码版git clone https://gitcode.com/GitHub_Trending/bl/blind_watermark进入目录后pip install .。下面用仓库示例图走一遍完整流程嵌入加提取只有 2 条命令blind_watermark --embed --pwd 1234 examples/pic/ori_img.jpeg watermark text examples/output/embedded.png blind_watermark --extract --pwd 1234 --wm_shape 111 examples/output/embedded.png第二条命令输出 watermark text。--pwd是密码--wm_shape是水印比特长度由第一条命令打印。 忘了记录长度就无法提取这是硬性前置条件。嵌入后的图与原图肉眼无差别。Python API 流程一致一共 2 个密码from blind_watermark import WaterMark bwm WaterMark(password_img1, password_wm1) bwm.read_img(examples/pic/ori_img.jpeg) bwm.read_wm(Copyright guofei9987, modestr) bwm.embed(examples/output/embedded.png) len_wm len(bwm.wm_bit) # 提取时必须用到的长度 bwm1 WaterMark(password_img1, password_wm1) print(bwm1.extract(examples/output/embedded.png, wm_shapelen_wm, modestr))输出 Copyright guofei9987。 mode 有 3 种str 传文字img 传图片bit 传比特流。 img 模式下 wm_shape 要传水印图的宽高比如 (128, 128)。 原理透视为什么提取水印不需要原图先用生活类比。 它像钞票上的厂印。 每个 4x4 像素块都被盖上一 bit 的“指纹”整张图成千上万个块同一个 bit 反复盖进不同块里。专业流程是 3 层频域变换实现在 bwm_core.pyDWT离散小波变换Haar 基把图分解只留平滑的低频子带。DCT离散余弦变换每个 4x4 块转成频域系数。SVD奇异值分解把水印 bit 写进块的前 2 个奇异值。嵌入的写法是个取整技巧奇异值除以 36按 bit 加 0.25 或 0.75再乘回 36。 提取时看除以 36 的余数是否过半。 这种微幅改动被图像自身纹理吸收人眼看不出。“盲”靠两个机制成立双密码password_wm 打乱 bit 顺序password_img 打乱块的选取顺序和块内系数顺序。提取时按同样规则逆序还原。密码错一位提取出的 bit 全部错位。冗余平均每 1 bit 在 3 个通道、多个块里循环嵌入提取时对全部副本求平均再用 kmeans 聚类判 0/1。平均压掉了随机噪声。原图全程没参与所以不需要。️ 能力边界图片盲水印扛得住什么扛不住什么仓库里的 examples/example_str.py 是完整测试。 每种攻击后都有 assert 断言提取结果与原水印完全相等脚本才会跑完。 可验证的结论如下| 攻击 | 参数 | 结论 | | -- | -- | -- | | 椒盐噪声 | 5% 像素 | 直接提取完全一致 | | 遮挡 | 60 块、每块占图 10% | 直接提取完全一致 | | 亮度 | 先乘 0.9 再乘 1.1 | 完全一致 | | 缩放 | 缩到 300x400 再放大回原分辨率 | 完全一致 | | 旋转 | 45° 或 60° | 先反方向旋转回来完全一致 | | 裁剪/截屏 | 裁掉 50% 再缩放 0.7 倍 | 还原填补后完全一致 |这张表同时暴露了 2 条边界旋转不是盲旋转。示例代码先按同角度反向旋转再提取。你不知道图被转了多少度就得自己试。裁剪还原依赖原图。裁剪场景靠模板匹配推测裁切位置recover.py需要你提供嵌入前那张图。“提取无须原图”在这一场景不成立。还有 3 个场景基本会失效反复有损压缩。仓库没有对应测试。水印在频域JPEG 每压一次都掉一块。嵌入强度 d1/d2 是写死的常量 36/20不能用清晰度换更强鲁棒性。水印长度丢失。extract 必须传 wm_shape水印不携带自描述头。容量上限。容量约 (宽/8) x (高/8) bit。512x512 的图是 4096 bit约 170 个汉字1024x1024 约 680 个汉字。嵌长文不现实。另外嵌入本身计算量不小构造参数里的 processes 可以开多进程。批量处理几千张图前先跑一张测速。⚖️ 适配判断谁该用 blind_watermark谁该换方案适合你的情况个人创作者做版权存证。照片、海报、插画嵌一段含你的 ID 和日期的字符串即可。场景是“最终图片是唯一证据”。不存原图、不依赖任何数据库拿到图就能提取。需要隐形 logo 做防伪核验。用 img 模式嵌 64x64 到 128x128 的图案。建议换方案的情况要视频水印。项目只支持图片。图片会经历角度未知的旋转、反复压缩。嵌入强度不可调建议选能调鲁棒性的方案。需要嵌入大量数据。容量被图像尺寸卡死。要求“无原图的盲裁剪”。做不了裁剪还原依赖模板匹配。收尾导航一句话总结与源码地图一句话blind_watermark 把文字或 logo 隐形嵌入图片之后无需原图即可从该图提取小角度旋转和裁剪各多一步还原。关键路径核心算法DWT-DCT-SVD、双密码、冗余平均blind_watermark/bwm_core.py8 种攻击测试带 assertexamples/example_str.py裁剪参数推测与还原blind_watermark/recover.py官方文档docs/README.md【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。