
Невидимые гиперссылки в физических фотографиях
Matthew Tancik, Ben Mildenhall, Ren Ng Калифорнийский университет в Беркли

Этот репозиторий содержит код, выпущенный к отчету на ArXiv, найденному здесь. Проект исследует сокрытие данных в изображениях при сохранении перцептивного сходства. Наш вклад заключается в возможности извлечения данных после того, как закодированное изображение (StegaStamp) было напечатано и сфотографировано камерой (эти шаги вносят искажения изображения). Этот репозиторий содержит код и предварительно обученные модели для воспроизведения результатов, показанных в статье. Кроме того, репозиторий содержит код, необходимый для обучения моделей кодировщика и декодировщика.
Если вы находите нашу работу полезной, пожалуйста, рассмотрите возможность цитирования:
@inproceedings{2019stegastamp,
title={StegaStamp: Invisible Hyperlinks in Physical Photographs},
author={Tancik, Matthew and Mildenhall, Ben and Ng, Ren},
booktitle={IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
year={2020}
}
git clone --recurse-submodules https://github.com/tancik/StegaStamp.git
cd StegaStamp
pip install -r requirements.txt
TRAIN_PATH = DIR_OF_DATASET_IMAGES
bash scripts/base.sh EXP_NAME
Обучение выполняется в train.py. Имеется ряд гиперпараметров, многие из которых соответствуют параметрам аугментации. scripts/bash.sh предоставляет хорошую отправную точку.
Код обучения модели детектора (используемой для сегментации StegaStamp) не включен в этот репозиторий. Модель, использованная в статье, была обучена с помощью модели BiSeNet, выпущенной здесь. CROP_WIDTH и CROP_HEIGHT были установлены в 1024, все остальные параметры были оставлены по умолчанию. Набор данных был сгенерирован путем случайного размещения искаженных StegaStamp на больших изображениях.
Чтобы визуализировать обучение, выполните следующую команду и перейдите по адресу http://localhost:6006 в браузере.
tensorboard --logdir logs
Скрипт encode_image.py может использоваться для кодирования сообщения в изображение или каталог изображений. Модель по умолчанию ожидает секрет, закодированный в utf-8, длиной не более 7 символов (сообщение из 100 бит -> 56 бит после ECC).
Закодируйте сообщение в изображение:
python encode_image.py \
saved_models/stegastamp_pretrained \
--image test_im.png \
--save_dir out/ \
--secret Hello
Это сохранит как StegaStamp, так и остаток, примененный к исходному изображению.
Скрипт decode_image.py можно использовать для декодирования сообщения из StegaStamp.
Пример использования:
python decode_image.py \
saved_models/stegastamp_pretrained \
--image out/test_hidden.png
Скрипт detector.py можно использовать для обнаружения и декодирования StegaStamp на изображении. Это полезно в случаях, когда присутствует несколько StegaStamp или StegaStamp не заполняет весь кадр изображения.
Чтобы использовать детектор, убедитесь, что вы загрузили модель детектора, как описано в разделе установки. Рекомендуемое разрешение входного видео — 1920x1080.
python detector.py \
--detector_model detector_models/stegastamp_detector \
--decoder_model saved_models/stegastamp_pretrained \
--video test_vid.mp4
Добавьте флаг --save_video FILENAME, чтобы сохранить результаты.
Флаг --visualize_detector можно использовать для визуализации вывода сети детектора. Маска соответствует маске сегментации, цветные полигоны подгоняются к этой маске сегментации с помощью набора эвристик. Выводы детектора могут быть зашумлены и чувствительны к размеру stegastamp. Дальнейшая оптимизация сети обнаружения в этой статье не рассматривается.