Spaces:
Running
Running
import gradio as gr | |
import numpy as np | |
import random | |
with gr.Blocks() as demo: | |
section_labels = [ | |
"apple", | |
"banana", | |
"carrot", | |
"donut", | |
"eggplant", | |
"fish", | |
"grapes", | |
"hamburger", | |
"ice cream", | |
"juice", | |
] | |
with gr.Row(): | |
num_boxes = gr.Slider(0, 5, 2, step=1, label="Number of boxes") | |
num_segments = gr.Slider(0, 5, 1, step=1, label="Number of segments") | |
with gr.Row(): | |
img_input = gr.Image() | |
img_output = gr.AnnotatedImage( | |
color_map={"banana": "#a89a00", "carrot": "#ffae00"} | |
) | |
section_btn = gr.Button("Identify Sections") | |
selected_section = gr.Textbox(label="Selected Section") | |
def section(img, num_boxes, num_segments): | |
sections = [] | |
for a in range(num_boxes): | |
x = random.randint(0, img.shape[1]) | |
y = random.randint(0, img.shape[0]) | |
w = random.randint(0, img.shape[1] - x) | |
h = random.randint(0, img.shape[0] - y) | |
sections.append(((x, y, x + w, y + h), section_labels[a])) | |
for b in range(num_segments): | |
x = random.randint(0, img.shape[1]) | |
y = random.randint(0, img.shape[0]) | |
r = random.randint(0, min(x, y, img.shape[1] - x, img.shape[0] - y)) | |
mask = np.zeros(img.shape[:2]) | |
for i in range(img.shape[0]): | |
for j in range(img.shape[1]): | |
dist_square = (i - y) ** 2 + (j - x) ** 2 | |
if dist_square < r**2: | |
mask[i, j] = round((r**2 - dist_square) / r**2 * 4) / 4 | |
sections.append((mask, section_labels[b + num_boxes])) | |
return (img, sections) | |
section_btn.click(section, [img_input, num_boxes, num_segments], img_output) | |
def select_section(evt: gr.SelectData): | |
return section_labels[evt.index] | |
img_output.select(select_section, None, selected_section) | |
if __name__ == "__main__": | |
demo.launch() | |