
Hyperlink invisibili nelle fotografie fisiche
Matthew Tancik, Ben Mildenhall, Ren Ng Università della California, Berkeley

Questo repository è un rilascio del codice per il rapporto ArXiv disponibile qui. Il progetto esplora la possibilità di nascondere dati nelle immagini mantenendo la similarità percettiva. Il nostro contributo è la capacità di estrarre i dati dopo che l'immagine codificata (StegaStamp) è stata stampata e fotografata con una fotocamera (questi passaggi introducono corruzioni nell'immagine). Questo repository contiene il codice e i modelli preaddestrati per replicare i risultati mostrati nell'articolo. Inoltre, il repository contiene il codice necessario per addestrare i modelli di codifica e decodifica.
Se trovi utile il nostro lavoro, considera di citarlo:
@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'addestramento viene eseguito in train.py. Ci sono diversi iperparametri, molti corrispondenti ai parametri di augmentazione. scripts/bash.sh fornisce un buon punto di partenza.
Il codice di addestramento per il modello di rilevamento (usato per segmentare gli StegaStamp) non è incluso in questo repository. Il modello utilizzato nell'articolo è stato addestrato usando il modello BiSeNet rilasciato qui. CROP_WIDTH e CROP_HEIGHT sono stati impostati a 1024, tutti gli altri parametri sono rimasti predefiniti. Il dataset è stato generato posizionando casualmente StegaStamp deformati su immagini più grandi.
Per visualizzare l'addestramento, esegui il seguente comando e naviga su http://localhost:6006 nel tuo browser.
tensorboard --logdir logs
Lo script encode_image.py può essere utilizzato per codificare un messaggio in un'immagine o in una directory di immagini. Il modello predefinito si aspetta un segreto codificato in utf-8 di lunghezza <= 7 caratteri (messaggio di 100 bit -> 56 bit dopo ECC).
Codificare un messaggio in un'immagine:
python encode_image.py \
saved_models/stegastamp_pretrained \
--image test_im.png \
--save_dir out/ \
--secret Hello
Questo salverà sia lo StegaStamp che il residuo applicato all'immagine originale.
Lo script decode_image.py può essere utilizzato per decodificare un messaggio da uno StegaStamp.
Esempio di utilizzo:
python decode_image.py \
saved_models/stegastamp_pretrained \
--image out/test_hidden.png
Lo script detector.py può essere utilizzato per rilevare e decodificare StegaStamp in un'immagine. È utile nei casi in cui siano presenti più StegaStamp o lo StegaStamp non riempia l'intero fotogramma dell'immagine.
Per utilizzare il rilevatore, assicurati di scaricare il modello del rilevatore come descritto nella sezione Installazione. La risoluzione video consigliata per l'input è 1920x1080.
python detector.py \
--detector_model detector_models/stegastamp_detector \
--decoder_model saved_models/stegastamp_pretrained \
--video test_vid.mp4
Aggiungi il flag --save_video FILENAME per salvare i risultati.
Il flag --visualize_detector può essere utilizzato per visualizzare l'output della rete del rilevatore. La maschera corrisponde alla maschera di segmentazione, i poligoni colorati sono adattati a questa maschera di segmentazione usando un insieme di euristiche. Gli output del rilevatore possono essere rumorosi e sono sensibili alle dimensioni dello StegaStamp. Un'ulteriore ottimizzazione della rete di rilevamento non è esplorata in questo articolo.