blind_watermark README

The project's README from github.com/guofei9987/blind_watermark. As one markdown file: README.md.

blind-watermark

Blind watermark based on DWT-DCT-SVD.

PyPI Build Status codecov License Python Platform stars fork Downloads Discussions Featured|HelloGitHub

install

pip install blind-watermark

For the current developer version:

git clone [email protected]:guofei9987/blind_watermark.git
cd blind_watermark
pip install .

How to use

Use in 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

Use in Python

Original Image + Watermark = Watermarked Image

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

See the codes

Embed watermark:

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))

Extract watermark:

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

Output:

@guofei9987 开源万岁!

attacks on Watermarked Image

attack method image after attack extracted 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 开源万岁!'

embed images

embed watermark:

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')

Extract watermark:

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 method image after attack extracted watermark
Rotate 45 Degrees 旋转攻击
Random crop 截屏攻击 多遮挡_提取水印
Mask 多遮挡攻击 多遮挡_提取水印

embed array of bits

See it here

As demo, we embed 6 bytes data:

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

Embed:

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')

Extract:

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

Notice that wm_shape (shape of watermark) is necessary

The output wm_extract is an array of float. set a threshold such as 0.5.

Concurrency

WaterMark(..., processes=None)

blind_watermark (guofei9987/blind_watermark)

Searching Database…

Что это такое?Это Python-библиотека для слепого невидимого водяного знака в изображениях: вы встраиваете скрытый водяной знак в изображение, а потом можете извлечь его без исходного изображения, на котором знака ещё нет.
Это библиотека или утилита командной строки?Это Python-библиотека, которую также можно запускать прямо из командной строки: можно либо импортировать её в коде на Python, либо выполнять bash-команды для встраивания и извлечения водяных знаков.
Как начать встраивать водяные знаки?Установите пакет для своего окружения Python, затем вызовите функцию встраивания для изображения и данных водяного знака, а позже используйте парную функцию извлечения, чтобы достать знак обратно.
Мне нужно что-то кроме Python?В README не указано никаких дополнительных зависимостей, кроме самого Python; при желании можно передать аргумент processes, чтобы использовать multiprocessing и ускорить встраивание.
Водяной знак переживает изменения изображения?В демонстрациях скрытый водяной знак сохраняется после поворота на 45 градусов, случайной обрезки, наложения маски, вертикальных и горизонтальных разрезов, изменения размера, перцового шума и снижения яркости на 10%, но устойчивость, естественно, зависит от того, насколько сильно изображение искажено.
Какие данные можно встроить как водяной знак?Можно встроить в качестве водяного знака текстовую строку, другое изображение или необработанный массив битов.
Почему для извлечения не нужно исходное изображение?Библиотека по замыслу использует «слепой» метод водяных знаков, то есть знак можно извлечь прямо из изображения с водяным знаком, не сравнивая его с оригиналом.
Есть ли похожие проекты для водяных знаков в других медиа?Тот же автор поддерживает textblindwatermark для скрытия сообщений в тексте и HideInfo для скрытия данных в виде изображений, звуков или текста.
Creator
guofei9987
Size
3.9 MB
Stars
14.8K
Age
7y
Commits · 90 Days