| import os |
| import tempfile |
| import numpy as np |
| from tensorflow.keras.models import load_model |
| from PIL import Image |
| import imageio.v2 as imageio |
| from app.models.DEEP_STEGO.Utils.preprocessing import normalize_batch, denormalize_batch |
|
|
| _MODEL_PATH = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'models', 'hide.h5') |
| _model = None |
|
|
|
|
| def _get_model(): |
| global _model |
| if _model is None: |
| _model = load_model(_MODEL_PATH) |
| return _model |
|
|
|
|
| def hide_image(cover_image_filepath, secret_image_filepath): |
| model = _get_model() |
|
|
| secret_image_in = Image.open(secret_image_filepath).convert('RGB') |
| cover_image_in = Image.open(cover_image_filepath).convert('RGB') |
|
|
| if secret_image_in.size != (224, 224): |
| secret_image_in = secret_image_in.resize((224, 224)) |
| if cover_image_in.size != (224, 224): |
| cover_image_in = cover_image_in.resize((224, 224)) |
|
|
| secret_image_in = np.array(secret_image_in).reshape(1, 224, 224, 3) / 255.0 |
| cover_image_in = np.array(cover_image_in).reshape(1, 224, 224, 3) / 255.0 |
|
|
| steg_image_out = model.predict([normalize_batch(secret_image_in), normalize_batch(cover_image_in)]) |
|
|
| steg_image_out = denormalize_batch(steg_image_out) |
| steg_image_out = np.squeeze(steg_image_out) * 255.0 |
| steg_image_out = np.uint8(steg_image_out) |
|
|
| _, output_path = tempfile.mkstemp(suffix='.png') |
| imageio.imsave(output_path, steg_image_out) |
| print("Saved steg image to", output_path) |
|
|
| return output_path |
|
|
|
|
|
|