| 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 = "Wow this works!" | |
| 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() |