当前位置: 首页 > article >正文

blind-watermark - 水印绑定

文章目录

    • 一、关于 blind-watermark
      • 安装
    • 二、bash 中使用
    • 三、Python 调用
      • 1、基本使用
      • 2、attacks on Watermarked Image
      • 3、embed images
      • 4、embed array of bits
    • 四、并发
    • 五、相关 Project


一、关于 blind-watermark

Blind watermark 基于 DWT-DCT-SVD.

  • github : https://github.com/guofei9987/blind_watermark
  • Documentation: https://blindwatermark.github.io/blind_watermark/#/en/
  • 文档: https://blindwatermark.github.io/blind_watermark/#/zh/
  • Source code: https://github.com/guofei9987/blind_watermark
  • Discussions : https://github.com/guofei9987/blind_watermark/discussions

安装

pip install blind-watermark

源码安装当前开发版本

git clone git@github.com:guofei9987/blind_watermark.git
cd blind_watermark
pip install .


二、bash 中使用

# embed watermark into image:
blind_watermark --embed --pwd 1234 examples/pic/ori_img.jpeg "watermark text" examples/output/embedded.png

# extract watermark from image:
blind_watermark --extract --pwd 1234 --wm_shape 111 examples/output/embedded.png

三、Python 调用

1、基本使用

Original Image + Watermark = Watermarked Image

origin_image + ‘@guofei9987 开源万岁!’ = 打上水印的图


See the codes

嵌入水印:

from blind_watermark import WaterMark

bwm1 = WaterMark(password_img=1, password_wm=1)
bwm1.read_img('pic/ori_img.jpg')
wm = '@guofei9987 开源万岁!'
bwm1.read_wm(wm, mode='str')
bwm1.embed('output/embedded.png')
len_wm = len(bwm1.wm_bit)
print('Put down the length of wm_bit {len_wm}'.format(len_wm=len_wm))

提取水印:

bwm1 = WaterMark(password_img=1, password_wm=1)
wm_extract = bwm1.extract('output/embedded.png', wm_shape=len_wm, mode='str')
print(wm_extract)

输出:

@guofei9987 开源万岁!


2、attacks on Watermarked Image

attack methodimage after attackextracted watermark
Rotate 45 Degrees在这里插入图片描述‘@guofei9987 开源万岁!’
Random crop在这里插入图片描述‘@guofei9987 开源万岁!’
Masks在这里插入图片描述‘@guofei9987 开源万岁!’
Vertical cut横向裁剪攻击‘@guofei9987 开源万岁!’
Horizontal cut纵向裁剪攻击‘@guofei9987 开源万岁!’
Resize缩放攻击‘@guofei9987 开源万岁!’
Pepper Noise椒盐攻击‘@guofei9987 开源万岁!’
Brightness 10% Down亮度攻击‘@guofei9987 开源万岁!’

3、embed images

嵌入水印:

from blind_watermark import WaterMark

bwm1 = WaterMark(password_wm=1, password_img=1)
# read original image
bwm1.read_img('pic/ori_img.jpg')
# read watermark
bwm1.read_wm('pic/watermark.png')
# embed
bwm1.embed('output/embedded.png')

提取水印:

bwm1 = WaterMark(password_wm=1, password_img=1)
# notice that wm_shape is necessary
bwm1.extract(filename='output/embedded.png', wm_shape=(128, 128), out_wm_name='output/extracted.png', )

attack methodimage after attackextracted watermark
Rotate 45 Degrees[旋转攻击在这里插入图片描述
Random crop在这里插入图片描述多遮挡_提取水印
Mask多遮挡攻击多遮挡_提取水印

4、embed array of bits

See it here

作为 demo,我们嵌入 6 bytes 数据:

wm = [True, False, True, True, True, False]

嵌入:

from blind_watermark import WaterMark

bwm1 = WaterMark(password_img=1, password_wm=1)
bwm1.read_ori_img('pic/ori_img.jpg')
bwm1.read_wm([True, False, True, True, True, False], mode='bit')
bwm1.embed('output/embedded.png')

提取:

bwm1 = WaterMark(password_img=1, password_wm=1, wm_shape=6)
wm_extract = bwm1.extract('output/打上水印的图.png', mode='bit')
print(wm_extract)

请注意,wm_shape(水印的形状)是必需的

输出 wm_extract 是一个浮点数组。设置阈值,例如0.5。


四、并发

WaterMark(..., processes=None)

  • processes 进程数可以是整数。默认为 None,这意味着使用所有进程。

五、相关 Project

  • text_blind_watermark (将消息嵌入文本): https://github.com/guofei9987/text_blind_watermark
  • HideInfo(隐藏为图像、隐藏为声音、隐藏为文本):https://github.com/guofei9987/HideInfo


http://www.kler.cn/a/392729.html

相关文章:

  • LeetCode 3270.求出数字答案:每位分别计算 或 for循环
  • 【C++】字符串中的 insert 方法深层分析
  • 一键整理背包界面功能
  • Pytorch导出onnx模型并在C++环境中调用(含python和C++工程)
  • “深入浅出”系列之C++:(5)STL标准模板库详解
  • 通过Android Studio修改第三方jar包并重新生成jar包
  • 大数据新视界 -- 大数据大厂之 Impala 在大数据架构中的性能优化全景洞察(上)(13/30)
  • CSS Modules中的 :global
  • 矩阵的各种计算:乘法、逆矩阵、转置、行列式等——基于Excel实现
  • 遇到Word打不开,WPS可以打开的解决办法
  • ES6字符串的新增方法
  • 微服务架构面试内容整理-API 网关-Gateway
  • (68)希尔伯特变换、解析信号,与瞬时幅度、频率和相位的提取的MATLAB仿真
  • 《C陷阱与缺陷》
  • 缓存淘汰策略及其使用场景详解
  • 效率工具-tig的使用
  • 最新的ssl证书有效期只有3个月,ssl到期后如何处理?
  • Java Http 接口对接太繁琐?试试 UniHttp 框架吧
  • Unity Assembly Definition Assembly Definition Reference
  • Python网络爬虫与数据采集实战——网络爬虫的基本流程
  • xcode-select: error: tool ‘xcodebuild‘ requires Xcode, but active developer
  • 随机链表 (Randomized Linked List)、随机树 (Randomized Tree)详细解读
  • [Java]微服务治理
  • 小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程
  • Unity网络通信(part8.客户端主动断连与心跳消息)
  • Docker:助力应用程序开发的利器