Stego / app.py
YassineYousfi
gitkeep
1f2c04e
raw
history blame
1.51 kB
import gradio as gr
import stc
import numpy as np
import imageio
from scipy import signal
import cv2
from PIL import Image
title = "Steganography"
description = "Explore hiding messages in images using content adaptive steganography and STCs. Python implementation by Daniel Lerch https://github.com/daniellerch/pySTC"
def HILL(input_image, operation, message, key):
input_image.seek(0)
buffer = input_image.read()
I = cv2.imdecode(np.frombuffer(buffer, np.uint8), 1)
I = cv2.cvtColor(I,cv2.COLOR_BGR2GRAY)
cv2.imwrite('tmp/file.png',I)
if operation == 'decode':
stc.extract('tmp/file.png', key, 'tmp/output.txt')
return 'tmp/output.txt'
else:
H = np.array(
[[-1, 2, -1],
[ 2, -4, 2],
[-1, 2, -1]])
L1 = np.ones((3, 3)).astype('float32')/(3**2)
L2 = np.ones((15, 15)).astype('float32')/(15**2)
costs = signal.convolve2d(I, H, mode='same')
costs = abs(costs)
costs = signal.convolve2d(costs, L1, mode='same')
costs = 1/costs
costs = signal.convolve2d(costs, L2, mode='same')
costs[costs == np.inf] = 1
stc.embed('tmp/file.png', costs, message, key, 'tmp/stego.png')
return 'tmp/stego.png'
iface = gr.Interface(HILL,
["file", gr.inputs.Radio(["encode", "decode"]), "text", "text"],
"file",
title=title,
description=description)
iface.launch()