
Unsichtbare Hyperlinks in physischen Fotografien
Matthew Tancik, Ben Mildenhall, Ren Ng University of California, Berkeley

Dieses Repository ist eine Codeveröffentlichung für den ArXiv-Bericht, der hier zu finden ist. Das Projekt untersucht das Verstecken von Daten in Bildern unter Beibehaltung der visuellen Ähnlichkeit. Unser Beitrag ist die Fähigkeit, die Daten zu extrahieren, nachdem das kodierte Bild (StegaStamp) gedruckt und mit einer Kamera fotografiert wurde (diese Schritte führen zu Bildverzerrungen). Dieses Repository enthält den Code und vortrainierte Modelle, um die im Paper gezeigten Ergebnisse zu reproduzieren. Zusätzlich enthält das Repository den notwendigen Code zum Trainieren der Encoder- und Decoder-Modelle.
Wenn Sie unsere Arbeit nützlich finden, ziehen Sie bitte in Betracht, diese zu zitieren:
@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
Das Training erfolgt in train.py. Es gibt eine Reihe von Hyperparametern, von denen viele den Augmentierungsparametern entsprechen. scripts/bash.sh bietet einen guten Ausgangspunkt.
Der Trainingscode für das Detektormodell (zur Segmentierung von StegaStamps) ist in diesem Repository nicht enthalten. Das im Paper verwendete Modell wurde mit dem hier veröffentlichten BiSeNet-Modell trainiert. CROP_WIDTH und CROP_HEIGHT wurden auf 1024 gesetzt, alle anderen Parameter blieben auf den Standardwerten. Der Datensatz wurde generiert, indem verzerrte StegaStamps zufällig auf größere Bilder platziert wurden.
Um das Training zu visualisieren, führen Sie den folgenden Befehl aus und navigieren Sie in Ihrem Browser zu http://localhost:6006.
tensorboard --logdir logs
Das Skript encode_image.py kann verwendet werden, um eine Nachricht in ein Bild oder ein Verzeichnis von Bildern zu kodieren. Das Standardmodell erwartet ein UTF-8-kodiertes Geheimnis mit einer Länge von <= 7 Zeichen (100-Bit-Nachricht -> 56 Bits nach ECC).
Nachricht in ein Bild kodieren:
python encode_image.py \
saved_models/stegastamp_pretrained \
--image test_im.png \
--save_dir out/ \
--secret Hello
Dies speichert sowohl den StegaStamp als auch das Residuum, das auf das ursprüngliche Bild angewendet wurde.
Das Skript decode_image.py kann verwendet werden, um eine Nachricht aus einem StegaStamp zu dekodieren.
Beispielnutzung:
python decode_image.py \
saved_models/stegastamp_pretrained \
--image out/test_hidden.png
Das Skript detector.py kann verwendet werden, um StegaStamps in einem Bild zu erkennen und zu dekodieren. Dies ist nützlich, wenn mehrere StegaStamps vorhanden sind oder der StegaStamp nicht den gesamten Bildausschnitt ausfüllt.
Um den Detektor zu verwenden, stellen Sie sicher, dass Sie das Detektormodell wie im Installationsabschnitt beschrieben herunterladen. Die empfohlene Eingabevideoauflösung beträgt 1920x1080.
python detector.py \
--detector_model detector_models/stegastamp_detector \
--decoder_model saved_models/stegastamp_pretrained \
--video test_vid.mp4
Fügen Sie das Flag --save_video FILENAME hinzu, um die Ergebnisse zu speichern.
Das Flag --visualize_detector kann verwendet werden, um die Ausgabe des Detektornetzwerks zu visualisieren. Die Maske entspricht der Segmentierungsmaske, die farbigen Polygone werden an diese Segmentierungsmaske mithilfe einer Reihe von Heuristiken angepasst. Die Detektorausgaben können verrauscht sein und sind empfindlich gegenüber der Größe des StegaStamp. Eine weitere Optimierung des Detektionsnetzwerks wird in diesem Paper nicht untersucht.