invisible-watermark 0.2.0

Creator: bradpython12

Last updated:

0 purchases

TODO
Add to Cart

Description:

invisiblewatermark 0.2.0

invisible-watermark





invisible-watermark is a python library and command line tool for creating invisible watermark over image (a.k.a. blink image watermark, digital image watermark). The algorithm doesn't rely on the original image.
Note that this library is still experimental and it doesn't support GPU acceleration, carefully deploy it on the production environment. The default method dwtDCT(one variant of frequency methods) is ready for on-the-fly embedding, the other methods are too slow on a CPU only environment.
supported algorithms

Discrete wavelet transform + Discrete cosine transform frequency embedding algorithm variants.
RivaGAN, a deep-learning model trained from Hollywood2 movie clips dataset.

speed

default embedding method dwtDct is fast and suitable for on-the-fly embedding
dwtDctSvd is 3x slower and rivaGan is 10x slower, for large image they are not suitable for on-the-fly embedding

accuracy

The algorithm cannot gurantee to decode the original watermarks 100% accurately even though we don't apply any attack.
Known defects: Test shows all algorithms do not perform well for web page screenshots or posters with homogenous background color

Supported Algorithms

frequency methods




dwtDct: DWT + DCT transform, embed watermark bit into max non-trivial coefficient of block dct coefficents


dwtDctSvd: DWT + DCT transform, SVD decomposition of each block, embed watermark bit into singular value decomposition




rivaGan: encoder/decoder model with Attention mechanism + embed watermark bits into vector.


background:

Discrete wavelet transform
Discrete cosine transform.
RivaGAN, a deep-learning model trained from Hollywood2 movie clips dataset.


How to install
pip install invisible-watermark
Library API
Embed watermark

example embed 4 characters (32 bits) watermark

import cv2
from imwatermark import WatermarkEncoder

bgr = cv2.imread('test.png')
wm = 'test'

encoder = WatermarkEncoder()
encoder.set_watermark('bytes', wm.encode('utf-8'))
bgr_encoded = encoder.encode(bgr, 'dwtDct')

cv2.imwrite('test_wm.png', bgr_encoded)

Decode watermark

example decode 4 characters (32 bits) watermark

import cv2
from imwatermark import WatermarkDecoder

bgr = cv2.imread('test_wm.png')

decoder = WatermarkDecoder('bytes', 32)
watermark = decoder.decode(bgr, 'dwtDct')
print(watermark.decode('utf-8'))

CLI Usage
embed watermark: ./invisible-watermark -v -a encode -t bytes -m dwtDct -w 'hello' -o ./test_vectors/wm.png ./test_vectors/original.jpg

decode watermark: ./invisible-watermark -v -a decode -t bytes -m dwtDct -l 40 ./test_vectors/wm.png

positional arguments:
input The path of input

optional arguments:
-h, --help show this help message and exit
-a ACTION, --action ACTION
encode|decode (default: None)
-t TYPE, --type TYPE bytes|b16|bits|uuid|ipv4 (default: bits)
-m METHOD, --method METHOD
dwtDct|dwtDctSvd|rivaGan (default: maxDct)
-w WATERMARK, --watermark WATERMARK
embedded string (default: )
-l LENGTH, --length LENGTH
watermark bits length, required for bytes|b16|bits
watermark (default: 0)
-o OUTPUT, --output OUTPUT
The path of output (default: None)
-v, --verbose print info (default: False)

Test Result
For better doc reading, we compress all images in this page, but the test is taken on 1920x1080 original image.
Methods are not robust to resize or aspect ratio changed crop but robust to noise, color filter, brightness and jpg compress.
rivaGan outperforms the default method on crop attack.
only default method is ready for on-the-fly embedding.
Input


Input Image: 1960x1080 Image
Watermark:

For freq method, we use 64bits, string expression "qingquan"
For RivaGan method, we use 32bits, string expression "qing"


Parameters: only take U frame to keep image quality, scale=36


Attack Performance
Watermarked Image




Attacks
Image
Freq Method
RivaGan




JPG Compress

Pass
Pass


Noise

Pass
Pass


Brightness

Pass
Pass


Overlay

Pass
Pass


Mask

Pass
Pass


crop 7x5

Fail
Pass


Resize 50%

Fail
Fail


Rotate 30 degress

Fail
Fail



Running Speed (CPU Only)



Image
Method
Encoding
Decoding




1920x1080
dwtDct
300-350ms
150ms-200ms


1920x1080
dwtDctSvd
1500ms-2s
~1s


1920x1080
rivaGan
~5s
4-5s


600x600
dwtDct
70ms
60ms


600x600
dwtDctSvd
185ms
320ms


600x600
rivaGan
1s
600ms



RivaGAN Experimental
Further, We will deliver the 64bit rivaGan model and test the performance on GPU environment.
Detail: https://github.com/DAI-Lab/RivaGAN
Zhang, Kevin Alex and Xu, Lei and Cuesta-Infante, Alfredo and Veeramachaneni, Kalyan. Robust Invisible Video Watermarking with Attention. MIT EECS, September 2019.[PDF]

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Files:

Customer Reviews

There are no reviews.