
Liens hypertextes invisibles dans les photographies physiques
Matthew Tancik, Ben Mildenhall, Ren Ng Université de Californie, Berkeley

Ce dépôt est une version du code pour le rapport ArXiv disponible ici. Le projet explore la dissimulation de données dans des images tout en maintenant la similarité perceptuelle. Notre contribution est la capacité d'extraire les données après que l'image encodée (StegaStamp) a été imprimée et photographiée avec une caméra (ces étapes introduisent des corruptions d'image). Ce dépôt contient le code et les modèles pré-entraînés pour reproduire les résultats présentés dans l'article. De plus, le dépôt contient le code nécessaire pour entraîner les modèles encodeur et décodeur.
Si vous trouvez notre travail utile, veuillez envisager de citer :
@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
L'entraînement est effectué dans train.py. Il y a un certain nombre d'hyperparamètres, dont beaucoup correspondent aux paramètres d'augmentation. scripts/bash.sh fournit un bon point de départ.
Le code d'entraînement pour le modèle de détecteur (utilisé pour segmenter les StegaStamps) n'est pas inclus dans ce dépôt. Le modèle utilisé dans l'article a été entraîné en utilisant le modèle BiSeNet publié ici. CROP_WIDTH et CROP_HEIGHT ont été définis sur 1024, tous les autres paramètres ont été définis par défaut. Le jeu de données a été généré en plaçant aléatoirement des StegaStamps déformés sur des images plus grandes.
Pour visualiser l'entraînement, exécutez la commande suivante et naviguez vers http://localhost:6006 dans votre navigateur.
tensorboard --logdir logs
Le script encode_image.py peut être utilisé pour encoder un message dans une image ou un répertoire d'images. Le modèle par défaut attend un secret encodé en utf-8 de <= 7 caractères (message de 100 bits -> 56 bits après ECC).
Encoder un message dans une image :
python encode_image.py \
saved_models/stegastamp_pretrained \
--image test_im.png \
--save_dir out/ \
--secret Hello
Cela sauvegardera à la fois le StegaStamp et le résidu appliqué à l'image originale.
Le script decode_image.py peut être utilisé pour décoder un message à partir d'un StegaStamp.
Exemple d'utilisation :
python decode_image.py \
saved_models/stegastamp_pretrained \
--image out/test_hidden.png
Le script detector.py peut être utilisé pour détecter et décoder des StegaStamps dans une image. Ceci est utile dans les cas où plusieurs StegaStamps sont présents ou lorsque le StegaStamp ne remplit pas le cadre de l'image.
Pour utiliser le détecteur, assurez-vous de télécharger le modèle de détecteur comme décrit dans la section installation. La résolution vidéo d'entrée recommandée est 1920x1080.
python detector.py \
--detector_model detector_models/stegastamp_detector \
--decoder_model saved_models/stegastamp_pretrained \
--video test_vid.mp4
Ajoutez l'option --save_video FILENAME pour sauvegarder les résultats.
L'option --visualize_detector peut être utilisée pour visualiser la sortie du réseau de détection. Le masque correspond au masque de segmentation, les polygones colorés sont ajustés à ce masque de segmentation à l'aide d'un ensemble d'heuristiques. Les sorties du détecteur peuvent être bruttées et sont sensibles à la taille du StegaStamp. Une optimisation supplémentaire du réseau de détection n'est pas explorée dans cet article.