基于深度学习gans的隐写工具
steganogan的Python项目详细描述
麻省理工学院从数据到人工智能实验室的开源项目。
隐写
概述
steganogan是使用对抗性训练创建隐写图像的工具。
安装
要开始使用steganogan,建议使用pip
:
pip install steganogan
或者,您可以克隆存储库并通过运行make install
:
git clone git@github.com:DAI-Lab/SteganoGAN.git
cd SteganoGAN
make install
对于开发,您可以使用make install-develop
命令来安装所有
测试和linting所需的依赖项。
用法
命令行
steganogan包含一个简单的命令行接口,用于编码和解码隐写图像。
在图像中隐藏消息
要创建隐写图像,只需提供到封面图像的路径和秘密 消息:
steganogan encode [options] path/to/cover/image.png "Message to hide"
从图像中读取消息
要从隐写图像中恢复秘密消息,只需提供隐写的路径 由兼容型号生成的图像:
steganogan decode [options] path/to/generated/image.png
附加选项
脚本有一些附加选项来控制其行为:
-o, --output PATH
:存储生成图像的路径。默认为output.png
。-a, --architecture ARCH
:要使用的体系结构,基本的或密集的。默认为“密集”。-v, --verbose
:冗长。--cpu
:即使cuda可用,也强制使用cpu。如果有GPU,这可能是必需的 系统中提供,但VRAM数量太低。
警告:确保在这两个过程中使用相同的体系结构规范(--architecture
)
编码和解码阶段;否则,SteganoGAN
将无法解码消息。
Python
与来自python的steganogan交互的主要方式是通过steganogan.SteganoGAN
上课。这个类可以使用预先训练的模型来实例化:
>>> from steganogan import SteganoGAN
>>> steganogan = SteganoGAN.load('steganogan/pretrained/dense.steg')
Using CUDA device
一旦我们加载了模型,我们就可以给它输入图像路径,输出图像路径,以及 秘密消息:
>>> steganogan.encode('research/input.png', 'research/output.png', 'This is a super secret message!')
Encoding completed.
这将生成一个output.png
图像,该图像与输入图像非常相似,但包含
秘密消息。为了恢复消息,我们可以简单地将output.png
传递给decode
方法:
>>> steganogan.decode('research/output.png')
'This is a super secret message!'
研究
我们在research
文件夹中提供示例脚本,演示如何训练自己的脚本
SteganoGAN
在任意数据集上从头开始建模。此外,我们还提供了一个方便
用于下载两个流行图像数据集的research/data
中的脚本。
参考文献
如果您使用隐写术进行研究,请考虑引用以下工作:
Zhang,Kevin Alex和Cuesta Infante,Alfredo和Veeramachaneni,Kalyan。隐写术:高容量的图像隐写术。麻省理工学院欧洲经济学院,2019年1月。(PDF)
@article{zhang2019steganogan,
title={SteganoGAN: High Capacity Image Steganography with GANs},
author={Zhang, Kevin Alex and Cuesta-Infante, Alfredo and Veeramachaneni, Kalyan},
journal={arXiv preprint arXiv:1901.03892},
year={2019},
url={https://arxiv.org/abs/1901.03892}
}
历史记录
0.1.2
- 添加选项以使用来自cli和python的自定义预训练模型
- 重构批评者和解码器以匹配编码器代码样式
- 使旧的预训练模型与新的代码版本兼容
- 清除不需要的依赖项
- 广泛的单元测试
0.1.1
- 添加更好的预训练模型。
- 改进对非CUDA设备的支持。
0.1.0-pypi的第一个版本
- 隐写类,它可以安装、保存、加载和用于对消息进行编码和解码。
- 允许使用预训练模型的基本命令行界面。
- 用于演示的基本和密集的预训练模型。