{ "info": { "author": "MIT Data To AI Lab", "author_email": "dailabmit@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "

\n\u201cSteganoGAN\u201d\nAn open source project from Data to AI Lab at MIT.\n

\n\n[![PyPI Shield](https://img.shields.io/pypi/v/steganogan.svg)](https://pypi.python.org/pypi/steganogan)\n[![Travis CI Shield](https://travis-ci.org/DAI-Lab/SteganoGAN.svg?branch=master)](https://travis-ci.org/DAI-Lab/SteganoGAN)\n\n# SteganoGAN\n\n- License: MIT\n- Documentation: https://DAI-Lab.github.io/SteganoGAN\n- Homepage: https://github.com/DAI-Lab/SteganoGAN\n\n## Overview\n\n**SteganoGAN** is a tool for creating steganographic images using adversarial training.\n\n## Installation\n\nTo get started with **SteganoGAN**, we recommend using `pip`:\n\n```bash\npip install steganogan\n```\n\nAlternatively, you can clone the repository and install it from source by running `make install`:\n\n```bash\ngit clone git@github.com:DAI-Lab/SteganoGAN.git\ncd SteganoGAN\nmake install\n```\n\nFor development, you can use the `make install-develop` command instead in order to install all\nthe required dependencies for testing and linting.\n\n## Usage\n### Command Line\n\n**SteganoGAN** includes a simple command line interface for encoding and decoding steganographic images.\n\n#### Hide a message inside an image\n\nTo create a steganographic image, you simply need to supply the path to the cover image and the secret \nmessage:\n\n```\nsteganogan encode [options] path/to/cover/image.png \"Message to hide\"\n```\n\n#### Read a message from an image\n\nTo recover the secret message from a steganographic image, you simply supply the path to the steganographic \nimage that was generated by a compatible model:\n\n```\nsteganogan decode [options] path/to/generated/image.png\n```\n\n#### Additional options\n\nThe script has some additional options to control its behavior:\n\n* `-o, --output PATH`: Path where the generated image will be stored. Defaults to `output.png`.\n* `-a, --architecture ARCH`: Architecture to use, basic or dense. Defaults to dense.\n* `-v, --verbose`: Be verbose.\n* `--cpu`: force CPU usage even if CUDA is available. This might be needed if there is a GPU\n available in the system but the VRAM amount is too low.\n\n**WARNING**: Make sure to use the same architecture specification (`--architecture`) during both \nthe encoding and decoding stage; otherwise, `SteganoGAN` will fail to decode the message.\n\n### Python\n\nThe primary way to interact with **SteganoGAN** from Python is through the `steganogan.SteganoGAN` \nclass. This class can be instantiated using a pretrained model:\n\n```\n>>> from steganogan import SteganoGAN\n>>> steganogan = SteganoGAN.load('steganogan/pretrained/dense.steg')\nUsing CUDA device\n```\n\nOnce we have loaded our model, we can give it the input image path, the output image path, and \nthe secret message:\n\n```\n>>> steganogan.encode('research/input.png', 'research/output.png', 'This is a super secret message!')\nEncoding completed.\n```\n\nThis will generate an `output.png` image that closely resembles the input image but contains the \nsecret message. In order to recover the message, we can simply pass `output.png` to the `decode` \nmethod:\n\n```\n>>> steganogan.decode('research/output.png')\n'This is a super secret message!'\n```\n\n## Research\n\nWe provide example scripts in the `research` folder which demonstrate how you can train your own\n`SteganoGAN` models from scratch on arbitrary datasets. In addition, we provide a convenience \nscript in `research/data` for downloading two popular image datasets.\n\n## References\n\nIf you use SteganoGAN for your research, please consider citing the following work:\n\nZhang, Kevin Alex and Cuesta-Infante, Alfredo and Veeramachaneni, Kalyan. SteganoGAN: High Capacity Image Steganography with GANs. MIT EECS, January 2019. ([PDF](https://arxiv.org/pdf/1901.03892.pdf))\n\n```\n@article{zhang2019steganogan,\n title={SteganoGAN: High Capacity Image Steganography with GANs},\n author={Zhang, Kevin Alex and Cuesta-Infante, Alfredo and Veeramachaneni, Kalyan},\n journal={arXiv preprint arXiv:1901.03892},\n year={2019},\n url={https://arxiv.org/abs/1901.03892}\n}\n```\n\n\n# History\n\n## 0.1.2\n\n* Add option to work with a custom pretrained model from CLI and Python\n* Refactorize Critics and Decoders to match Encoders code style\n* Make old pretrained models compatible with new code versions\n* Cleanup unneeded dependencies\n* Extensive unit testing\n\n## 0.1.1\n\n* Add better pretrained models.\n* Improve support for non CUDA devices.\n\n## 0.1.0 - First release to PyPi\n\n* SteganoGAN class which can be fitted, saved, loaded and used to encode and decode messages.\n* Basic command line interface that allow using pretrained models.\n* Basic and Dense pretrained models for demo purposes.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/DAI-Lab/SteganoGAN", "keywords": "steganogan", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "steganogan", "package_url": "https://pypi.org/project/steganogan/", "platform": "", "project_url": "https://pypi.org/project/steganogan/", "project_urls": { "Homepage": "https://github.com/DAI-Lab/SteganoGAN" }, "release_url": "https://pypi.org/project/steganogan/0.1.2/", "requires_dist": [ "imageio (>=2.4.1)", "reedsolo (>=0.3)", "scipy (>=1.1.0)", "torch (>=1.0.0)", "torchvision (>=0.2.1)", "tqdm (>=4.28.1)", "numpy (>=1.15.4)", "bumpversion (>=0.5.3) ; extra == 'dev'", "pip (>=9.0.1) ; extra == 'dev'", "watchdog (>=0.8.3) ; extra == 'dev'", "m2r (>=0.2.0) ; extra == 'dev'", "Sphinx (>=1.7.1) ; extra == 'dev'", "sphinx-rtd-theme (>=0.2.4) ; extra == 'dev'", "flake8 (>=3.5.0) ; extra == 'dev'", "isort (>=4.3.4) ; extra == 'dev'", "autoflake (>=1.1) ; extra == 'dev'", "autopep8 (>=1.3.5) ; extra == 'dev'", "twine (>=1.10.0) ; extra == 'dev'", "wheel (>=0.30.0) ; extra == 'dev'", "jupyter (==1.0.0) ; extra == 'dev'", "coverage (>=4.5.1) ; extra == 'dev'", "pytest (>=3.4.2) ; extra == 'dev'", "tox (>=2.9.1) ; extra == 'dev'", "coverage (>=4.5.1) ; extra == 'test'", "pytest (>=3.4.2) ; extra == 'test'", "tox (>=2.9.1) ; extra == 'test'" ], "requires_python": ">=3.5", "summary": "Steganography tool based on DeepLearning GANs", "version": "0.1.2" }, "last_serial": 4782602, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "a8aa89e794e0161f62da3e9589ee109a", "sha256": "29388e4b9b8ad442b36e35e68e6797359574d0f0e9e9ad087cd93453236f90bc" }, "downloads": -1, "filename": "steganogan-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a8aa89e794e0161f62da3e9589ee109a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 1643298, "upload_time": "2018-12-22T21:49:07", "url": "https://files.pythonhosted.org/packages/df/f9/b60692654a0d613958aac7eaf7a35637f09624a75d64a25b3387f0afd8ce/steganogan-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e9564ac38d619929097a2a2d6f7229c2", "sha256": "2e09e8002d6e788f0a1c7a60a3b58fd8fc617779a07a0a8d4e09e95f05fd24df" }, "downloads": -1, "filename": "steganogan-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e9564ac38d619929097a2a2d6f7229c2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 1654389, "upload_time": "2018-12-22T21:49:36", "url": "https://files.pythonhosted.org/packages/f6/08/07f16cdb8c788cd79ee7a432dfe2097855076df04aeae9116db823b92c3b/steganogan-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "4fd4fdb82ea24d89e619662a38cdf080", "sha256": "f46b846b24ee977c148a2be0d17809e577e46984aab615ddbb5f03eea9d4679d" }, "downloads": -1, "filename": "steganogan-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4fd4fdb82ea24d89e619662a38cdf080", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 2815314, "upload_time": "2019-01-07T11:28:37", "url": "https://files.pythonhosted.org/packages/7b/c6/51f9877b85b39d0c70ebf512f5afbafe089751f8e62f363381bbb12c1071/steganogan-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ac8facc01cb9342567e745863935121", "sha256": "45515bf3593595db7d68390bfb9534a6783205dd19b90ee977cc00f5bc634f7c" }, "downloads": -1, "filename": "steganogan-0.1.1.tar.gz", "has_sig": false, "md5_digest": "8ac8facc01cb9342567e745863935121", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 2822503, "upload_time": "2019-01-07T11:29:24", "url": "https://files.pythonhosted.org/packages/b4/f5/f78f0938794aa85270c9c44480041e8c7e837530010c3ea35022a163f258/steganogan-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "fc5599d38724f9b76cdc90b4d28d7de2", "sha256": "d1ca7fe18fb21e8646d90c84b9162803d7df07cfcfe643b3e59b6fd7b5c6bce7" }, "downloads": -1, "filename": "steganogan-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fc5599d38724f9b76cdc90b4d28d7de2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 2816362, "upload_time": "2019-02-05T15:24:53", "url": "https://files.pythonhosted.org/packages/b4/4a/39ffd8404fac276f417d236b1906a6c7cea5e02efef7e3899c9332911f28/steganogan-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e193654ee44932f6388c1340e4062002", "sha256": "3090aa1da1ea981510a5bf7a696de0c615209d411d06d67c7e7e778a0de14914" }, "downloads": -1, "filename": "steganogan-0.1.2.tar.gz", "has_sig": false, "md5_digest": "e193654ee44932f6388c1340e4062002", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 4357904, "upload_time": "2019-02-05T15:24:59", "url": "https://files.pythonhosted.org/packages/6a/f2/354cef2f9809d36b930a89a7427303a36e8ef100a9214e04e6e4761aab22/steganogan-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fc5599d38724f9b76cdc90b4d28d7de2", "sha256": "d1ca7fe18fb21e8646d90c84b9162803d7df07cfcfe643b3e59b6fd7b5c6bce7" }, "downloads": -1, "filename": "steganogan-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fc5599d38724f9b76cdc90b4d28d7de2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 2816362, "upload_time": "2019-02-05T15:24:53", "url": "https://files.pythonhosted.org/packages/b4/4a/39ffd8404fac276f417d236b1906a6c7cea5e02efef7e3899c9332911f28/steganogan-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e193654ee44932f6388c1340e4062002", "sha256": "3090aa1da1ea981510a5bf7a696de0c615209d411d06d67c7e7e778a0de14914" }, "downloads": -1, "filename": "steganogan-0.1.2.tar.gz", "has_sig": false, "md5_digest": "e193654ee44932f6388c1340e4062002", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 4357904, "upload_time": "2019-02-05T15:24:59", "url": "https://files.pythonhosted.org/packages/6a/f2/354cef2f9809d36b930a89a7427303a36e8ef100a9214e04e6e4761aab22/steganogan-0.1.2.tar.gz" } ] }