Пример #1
0
    def test_invalid_binary_data(self):
        # Watermark inserted
        iwatermark = ewatermark = 'asd45621'

        with self.assertRaises(ValueError):
            metrics.ber(iwatermark, ewatermark)

        iwatermark = ewatermark = '45621'

        with self.assertRaises(ValueError):
            metrics.ber(iwatermark, ewatermark)
Пример #2
0
def pnsr_ber_index(
        hider_factory, cover_work, data,
        index, step, *args, attacks=None, reference_psnr=44, **kwargs):

    def get_extractor(extractor, index):
        def wrapper(ws_work):
            return extractor(ws_work, index=index)

        return wrapper

    index = int(round(index))
    step = int(round(step))

    data = utils.char2bin(data)
    hider = hider_factory.build(step, *args, **kwargs)
    ws_work = hider.insert(cover_work, data, index=index)
    psnr = imperceptibility.psnr(cover_work, ws_work)

    watermark = hider.extract(ws_work, index=index)
    if attacks:
        extract = get_extractor(hider.extract, index)
        ber = ber_mean(extract, ws_work, watermark, attacks)
    else:
        ber = robustness.ber(watermark, data)

    return psnr, ber
Пример #3
0
    def test_watermarks_same_length(self):
        # Watermark inserted
        iwatermark = '1011001010'
        # Watermark extracted
        ewatermark = '1111000111'

        ber = metrics.ber(iwatermark, ewatermark)
        self.assertEqual(ber, 0.4)
Пример #4
0
def ber_mean(extract, ws_work, watermark, attacks):
    return np.mean(
        [
            robustness.ber(
                extract(attack(ws_work)),
                watermark
            )
            for attack in attacks
        ]
    )
Пример #5
0
    def test_watermark_zero_length(self):
        # Watermark inserted
        iwatermark = ewatermark = ''

        with self.assertRaises(ValueError):
            metrics.ber(iwatermark, ewatermark)