CATastrophe / app.py
akrasi's picture
Update app.py
3dd0570 verified
import gradio as gr
import numpy as np
import cv2
import tensorflow as tf
from PIL import Image
def apply_random_mask(img):
mask_size = 50
y1, x1 = np.random.randint(0, img.shape[0] - mask_size, 1)[0], np.random.randint(0, img.shape[1] - mask_size, 1)[0]
y2, x2 = y1 + mask_size, x1 + mask_size
binary_mask = np.zeros((img.shape[0], img.shape[1]), dtype=np.uint8)
binary_mask[y1:y2, x1:x2] = 1
masked_img = img.copy()
masked_img[y1:y2, x1:x2] = 0
return masked_img
def preprocess_image(image):
image = np.array(image)
image = cv2.resize(image, (256, 256))
image = apply_random_mask(image)
image = image / 255.0
return image
def predict(image):
model = tf.keras.models.load_model("initial_generator_model2.keras")
processed_image = preprocess_image(image)
input_image = np.expand_dims(processed_image, axis=0)
output_image = model.predict(input_image)[0]
output_image = (output_image * 255).astype(np.uint8)
filtered_image = cv2.medianBlur(output_image, 3)
output_masked = (processed_image * 255).astype(np.uint8)
return Image.fromarray(output_masked), Image.fromarray(filtered_image)
demo = gr.Interface(
fn=predict,
inputs=gr.Image(type="pil"),
outputs=[gr.Image(type="pil"), gr.Image(type="pil")],
title="Image Inpainting Model",
description="Upload an image. A random mask will be applied, and the model will attempt to fill it in."
)
demo.launch()