ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

blind_watermark教程:三步上手图片盲水印,提取无须原图

blind_watermark教程:三步上手图片盲水印,提取无须原图 blind_watermark教程三步上手图片盲水印提取无须原图【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark你发在网上的照片被人截图、裁剪、加了滤镜之后二次发布你想证明这张图是我的却拿不出证据。贴一个可见的 logo 水印虽然直接却会毁掉画面。blind_watermark 就是来解决这件事的开源 Python 图片盲水印工具它把一段文字、一张图或一串比特流隐形地写进照片里肉眼看不出来而提取水印时不需要原图图片被旋转、裁剪、缩放之后依然有机会把水印取回来。项目速览能力清单与版本要求项目说明定位基于频域的图片盲水印嵌入不可见提取无须原图水印类型文字str、图片img、比特流bit三种模式平台支持Windows / Linux / macOSPython 版本 3.5主要依赖numpy、opencv-python、PyWavelets开源协议MIT当前版本0.4.4嵌入与提取请使用同一版本使用方式Python API 命令行工具blind_watermark并行处理可通过processes参数指定线程数默认用满全部线程上手路径从安装到第一次产出盲水印整个流程很短装包、嵌入、提取三步就能跑通。第一步安装pip install blind-watermark如果想用最新开发版本也可以先克隆仓库再本地安装git clone https://gitcode.com/GitHub_Trending/bl/blind_watermark cd blind_watermark pip install .第二步第一次嵌入并提取仓库在 examples/ 目录下提供了现成的测试图片如examples/pic/中的样图你可以直接拿它跑下面的最小示例from blind_watermark import WaterMark bwm WaterMark(password_img1, password_wm1) bwm.read_img(pic/ori_img.jpeg) bwm.read_wm(my first blind watermark, modestr) bwm.embed(output/embedded.png) bwm1 WaterMark(password_img1, password_wm1) print(bwm1.extract(output/embedded.png, wm_shapelen(bwm.wm_bit), modestr))运行后output/embedded.png看起来和原图几乎没有区别打印出来的却正是你写入的那段文字。不想写代码的话也可以直接敲命令行嵌入用blind_watermark --embed --pwd 1234 图片 水印文字 输出文件提取时用--extract并加上--wm_shape指定水印长度命令行参数细节可以看 blind_watermark/cli_tools.py。水印鲁棒性验证图片被加工后还能不能取出来这是用盲水印前最该问的问题。仓库把答案做成了可复现的脚本 examples/example_str.py先嵌入一句文字水印然后依次施加旋转、随机截屏裁剪缩放、多遮挡、裁剪、缩放、椒盐噪声、亮度变化七种攻击再逐一提取每一步都有assert断言提取结果与原文一致。官方给出的对照结果里这几种攻击下的提取结果全部与原水印吻合。需要说明的是鲁棒性不是无条件的。旋转后的图需要先反向旋转回正裁剪或截屏后的图需要先恢复到原图尺寸仓库提供了recover_crop和estimate_crop_parameters后者能在不知道裁剪参数时自动估计然后再提取。也就是说轻度到中等程度的加工扛得住但提取前通常要先做一步还原。盲水印是怎么做到的原理通俗化把图片想象成一块布料。可见水印相当于把标签印在布面上一眼就能看到盲水印则是把信息织进布料的纹路里。具体做法是先把图片切成 4x4 的小块对每个小块做离散小波DWT和离散余弦DCT变换把数据搬到频域再通过奇异值分解SVD把水印的每一比特写进奇异值上一丁点人眼察觉不到的偏移里。密码的作用有两层一是打乱每个块内部系数的读取顺序二是打乱水印比特本身的存放顺序。所以即使有人拿到图片不知道密码也读不出你藏了什么而图片被旋转、缩放后只要把块找回来纹路还在信息就能重新读出。代码地图看懂三个文件就够blind_watermark/blind_watermark.pyWaterMark类对外接口都在这。read_img读图、read_wm读水印支持 str/img/bit 三种模式、embed嵌入、extract提取。blind_watermark/bwm_core.py核心算法本体。逐块做 DWT→DCT→SVD 嵌入三个颜色通道各自嵌入再求平均提取时用一维 K-means 卡阈值还内置了并行处理。blind_watermark/att.py攻击模拟工具实现旋转、裁剪、遮挡、椒盐、缩放、亮度等攻击函数配套的 blind_watermark/recover.py 负责裁剪参数估计与图片还原两者配合完成了前面提到的鲁棒性测试。落地场景盲水印能做的几件事版权自证把作者ID编号作为文字水印写进每张对外发布的图被搬运时提取水印即可证明出处。内容溯源给不同渠道、不同期数的素材写入不同的隐藏编号就能追踪内容是从哪条链路流出去的。防伪验证产品图、证书图、票据图里预先埋入校验信息验真时提取比对不需要保留原始底图。数据通道用 bit 模式在图片里夹带少量二进制数据适合做轻量级的信息隐藏实验。⚠️ 避坑提醒参数、版本与常见失败原因密码必须成对一致password_img和password_wm在嵌入和提取时要完全相同换一个密码提取出来就是乱码。wm_shape不能忘提取时必须传水印长度文字模式就是len(bwm.wm_bit)图片模式是(高, 宽)比特模式是位数传错长度结果必错。嵌入与提取用同一版本程序启动时会提示版本信息混用不同版本可能导致不兼容。水印太长会溢出可嵌入的比特数取决于图片能切出多少块水印比容量大时embed会直接报溢出错误——换更大的图或缩短水印。先还原再提取对旋转、裁剪、截屏过的图要先反向旋转或用recover_crop恢复到原尺寸再提取否则成功率会明显下降。少做有损压缩embed支持输出 JPEG 时指定压缩质量反复有损压缩会累积失真能存 PNG 就存 PNG。适合谁一句收尾如果你是需要给作品留一手版权证据的个人创作者或者想在自己项目里快速集成一个免原图提取的图片盲水印的开发者blind_watermark 的 API 和示例脚本都足够你半天内上手。它不是绝对防伪造的手段而是一把应对常规加工的可靠工具用之前按仓库里的攻击脚本自己跑一遍心里就有数了。【免费下载链接】blind_watermarkBlindInvisible Watermark 图片盲水印提取水印无须原图项目地址: https://gitcode.com/GitHub_Trending/bl/blind_watermark创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表