
blind_watermark 实战3 种水印模式提取时不需要原图【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark图片被转载后找不到证据是内容创作者最常遇到的糟心事。blind_watermark 是一个 Python 盲水印库把版权信息藏进像素肉眼看不出提取水印无须原图。命令行两句话3 种模式文本、图片、二进制任选。先跑通一条命令git clone https://gitcode.com/GitHub_Trending/bl/blind_watermark cd blind_watermark pip install -e . python -m blind_watermark.cli_tools --embed --pwd 1234 examples/pic/ori_img.jpeg owner embedded.png python -m blind_watermark.cli_tools --extract --pwd 1234 --wm_shape 39 embedded.png最后一条会原样吐出owner。闭环的关键参数是--pwd和--wm_shape水印比特长度上例为 39嵌入时记下来提取时原样带上。仓库自带的示例图水印就是嵌在这张里。三种模式一张表讲清模式嵌入内容典型场景抗压缩/缩放表现源码入口文本str一句文字UTF-8 编码后转比特署名、版权声明、联系方式短文本循环写入大量块冗余度最高抗压缩缩放最稳blind_watermark.pyread_wm(modestr)图片img水印图按灰度 128 阈值转成 0/1 矩阵Logo、复杂图形水印每个像素只写一次块少位多旋转缩放后提取图易糊同上read_wm(modeimg)二进制bit一串自定义 0/1 序列数字指纹、溯源标识容量最灵活鲁棒性取决于你给多少冗余同上read_wm(modebit)三种模式的差别只在read_wm()这一步怎么变成比特串后面完全同一条流水线DCT 变换后按 SVD 把比特写进 4×4 块的奇异值三个颜色通道各写一份提取时对每个比特的所有副本求平均抗噪核心实现在 bwm_core.py。一句话差异文本模式适合短内容、强对抗图片模式适合图形化水印、能接受损失二进制模式适合自己控制编码与校验。压一压、转一转水印还在吗缩放把打过水印的图压到 300×400 再放大回去提取结果仍是原文本逐字符完整。仓库里有对照图docs/缩放攻击.jpg 是攻击后的图docs/缩放攻击_提取水印.png 是提取出的水印。旋转转 45° 再转回来文本水印照样读出见 docs/旋转攻击.jpg 与 docs/旋转攻击_提取水印.png 两张成对示例。裁剪更极端先裁剪、再被缩放常见于手机截图转发可以靠 recover.py 里的estimate_crop_parameters推测裁剪参数再recover_crop模板还原后正常提取攻击函数本体在 att.py。选型 踩坑速查--pwd和--wm_shape记牢提取必须知道密码和水印比特长度丢一个都白搭建议随图存档。文字短一点文本模式会把比特循环铺满全图所有可用块文本越短冗余越多抗压缩水印能力越强。JPG 质量参数别低于 80有损压缩直接改 DCT 系数奇异值被噪声淹没后提取位误差明显上升交付前的最后一次压缩要留够质量。先还原尺寸再提取被缩放、旋转过的图恢复接近原图大小后再提取块与 4×4 分块的对应关系才稳定平均环节才有效。报溢出就是容量不够水印比特数超过图片可容纳的块数时会抛 IndexError换短文本或更大的底图。想再深一层更多攻击样例与截图还原流程在 docs/ 目录嵌入与提取的完整实现就在 bwm_core.py全局常数d1/d2控制鲁棒性与失真的平衡改这两个数即可按自己的场景调参。【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考