multitabbedinterface / imageprocessui.py
Avkash's picture
Upload imageprocessui.py
eb21215
import gradio as gr
import numpy as np
from PIL import Image
image_global = np.zeros([10,10,3], dtype=np.uint8)
def process_source_image(image_source):
image_out = image_source
global image_global
image_global = image_source
img_info = []
if image_source is not None:
if len(image_source.shape) == 3:
img_info.append({"Height: ": image_source.shape[0]})
img_info.append({"Width: ": image_source.shape[1]})
img_info.append({"Channels: ": image_source.shape[2]})
if len(image_source.shape) == 2:
img_info.append({"Height: ": image_source.shape[0]})
img_info.append({"Width: ": image_source.shape[1]})
return str(img_info), image_out
def image_resizer(img_height, img_width):
image_out = Image.fromarray(image_global)
image_out = image_out.resize((img_width, img_height))
return image_out
def image_convert_grayscale():
image_out = Image.fromarray(image_global)
image_out = image_out.convert('L')
return image_out
def image_process_alpha_channel(alpha_value):
image_out = Image.fromarray(image_global)
image_out.putalpha(alpha_value)
return image_out
def image_process_scratchpad(scratch_img):
global image_global
image_global = scratch_img
image_out = Image.fromarray(scratch_img)
return image_out
def show_3_channels():
img_red = img_green = img_blue = image_global
if len(image_global.shape) == 3 and image_global.shape[2] == 3:
red_img = np.zeros(image_global.shape)
red_channel = image_global[:, :, 0]
red_img[:, :, 0] = red_channel
green_img = np.zeros(image_global.shape)
green_channel = image_global[:, :, 1]
green_img[:, :, 1] = green_channel
blue_img = np.zeros(image_global.shape)
blue_channel = image_global[:, :, 2]
blue_img[:, :, 2] = blue_channel
img_red = Image.fromarray(red_img.astype(np.uint8))
img_green = Image.fromarray(green_img.astype(np.uint8))
img_blue = Image.fromarray(blue_img.astype(np.uint8))
return img_red, img_green, img_blue,
class ImageProcessUI(object):
def __init__(self, ui_obj):
self.name = "Image Processor UI"
self.description = "This class is designed to build UI for our application"
self.ui_obj = ui_obj
def create_application_ui(self):
with self.ui_obj:
gr.Markdown("Image Processing Application UI with Gradio")
with gr.Tabs():
with gr.TabItem("Select your image"):
with gr.Row():
with gr.Column():
img_source = gr.Image(label="Please select source Image")
source_image_loader = gr.Button("Load above Image")
with gr.Column():
output_label = gr.Label(label="Image Info")
img_output = gr.Image(label="Image Output")
with gr.TabItem("Resize your Image"):
with gr.Row():
with gr.Column():
resize_label = gr.Label(label="Select your image height and width")
image_height = gr.Slider(10, 1000, label="Image Height", value=100)
image_width = gr.Slider(10, 1000, label="Image Width", value=100)
image_resize_btn = gr.Button("Resize Image")
with gr.Column():
img_resize_output = gr.Image(label="Resized Image Output")
with gr.TabItem("Image as Grayscale"):
with gr.Row():
with gr.Column():
resize_label = gr.Label(label="Source image as GrayScale",
value="GRAYSCALE IMAGE")
img_gray_output = gr.Image(label="Grayscale Image Output")
image_grayscale_btn = gr.Button("Grayscale Your Image")
with gr.TabItem("Image with Red, Green and Blue Channels"):
with gr.Row():
with gr.Column():
rgb_label = gr.Label(label="Source image with 3 channels",
value="RED, GREEN and BLUE IMAGE CHANNELS")
with gr.Row():
with gr.Column():
rgb_red_label = gr.Label(label="", value="RED CHANNELS")
img_red_output = gr.Image(label="Image as Red Channel")
with gr.Column():
rgb_green_label = gr.Label(label="", value="GREEN CHANNELS")
img_green_output = gr.Image(label="Image as Green Channel")
with gr.Column():
rgb_blue_label = gr.Label(label="", value="BLUE CHANNELS")
img_blue_output = gr.Image(label="Image as Blue Channel")
image_3channels_btn = gr.Button("Show 3 Channels in Image")
with gr.TabItem("Image with Alpha Channel"):
with gr.Row():
with gr.Column():
alpha_channel_label = gr.Label(label="Source image",
value="IMAGE WITH ALPHA CHANNEL")
alpha_channel_value = gr.Slider(1, 256, label="Alpha Channel", value=128)
img_alpha_channel_output = gr.Image(label="Image with Alpha Channel Output")
image_alpha_channel_btn = gr.Button("Image with Alpha Channel")
alpha_channel_value.change(
image_process_alpha_channel,
inputs=[alpha_channel_value],
outputs=[img_alpha_channel_output]
)
with gr.TabItem("Image with Scratchpad"):
with gr.Row():
with gr.Column():
img_scratch_pad_src = gr.Sketchpad(label="Draw your image")
scratch_pd_btn = gr.Button("Update Scribble Image")
with gr.Column():
img_scratch_pad_out = gr.Image(label="Scribbled Output")
source_image_loader.click(
process_source_image,
[
img_source
],
[
output_label,
img_output
]
)
image_resize_btn.click(
image_resizer,
[
image_height,
image_width
],
[
img_resize_output
]
)
image_grayscale_btn.click(
image_convert_grayscale,
[
],
[
img_gray_output
]
)
image_3channels_btn.click(
show_3_channels,
[
],
[
img_red_output,
img_green_output,
img_blue_output
]
)
image_alpha_channel_btn.click(
image_process_alpha_channel,
[
alpha_channel_value
],
[
img_alpha_channel_output
]
)
scratch_pd_btn.click(
image_process_scratchpad,
[
img_scratch_pad_src
],
[
img_scratch_pad_out
]
)
def launch_ui(self):
self.ui_obj.launch()