
روابط خفية في الصور الفوتوغرافية المادية
ماثيو تانشيك، بن ميلدنهال، رين نغ جامعة كاليفورنيا، بيركلي

هذا المستودع هو إصدار كود للتقرير المنشور على 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.pyTRAIN_PATH = DIR_OF_DATASET_IMAGES
bash scripts/base.sh EXP_NAME
يتم التدريب في train.py. هناك عدد من المعلمات الفائقة (hyperparameters)، العديد منها يتوافق مع معلمات التوسيع (augmentation). يوفر 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 والمتبقي (residual) الذي تم تطبيقه على الصورة الأصلية.
يمكن استخدام السكريبت decode_image.py لفك تشفير رسالة من طابع StegaStamp.
مثال على الاستخدام:
python decode_image.py \
saved_models/stegastamp_pretrained \
--image out/test_hidden.png
يمكن استخدام السكريبت detector.py لكشف وفك تشفير طوابع 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 لتصور مخرجات شبكة الكاشف. القناع (mask) يتوافق مع قناع التجزئة، والمضلعات الملونة مناسبة لهذا القناع باستخدام مجموعة من القواعد الاستكشافية (heuristics). مخرجات الكاشف قد تكون مشوشة وحساسة لحجم الطابع. لم يتم استكشاف تحسين شبكة الكشف بشكل أكبر في هذه الورقة.