|
|
|
|
|
import gradio as gr |
|
|
from gradio_patch_selection import PatchSelector |
|
|
|
|
|
|
|
|
|
|
|
DEFAULT_IMG_SIZE = 224 |
|
|
DEFAULT_PATCH_SIZE = 16 |
|
|
|
|
|
example_annotation = { |
|
|
"image": "https://gradio-builds.s3.amazonaws.com/demo-files/base.png", |
|
|
"patch_index": 42, |
|
|
"img_size": DEFAULT_IMG_SIZE, |
|
|
"patch_size": DEFAULT_PATCH_SIZE |
|
|
} |
|
|
|
|
|
examples = [ |
|
|
{ |
|
|
"image": "https://raw.githubusercontent.com/gradio-app/gradio/main/guides/assets/logo.png", |
|
|
"patch_index": 10, |
|
|
"img_size": DEFAULT_IMG_SIZE, |
|
|
"patch_size": DEFAULT_PATCH_SIZE |
|
|
}, |
|
|
{ |
|
|
"image": "https://gradio-builds.s3.amazonaws.com/demo-files/base.png", |
|
|
"patch_index": 42, |
|
|
"img_size": DEFAULT_IMG_SIZE, |
|
|
"patch_size": DEFAULT_PATCH_SIZE |
|
|
}, |
|
|
] |
|
|
|
|
|
|
|
|
def get_patch_index(annotations): |
|
|
"""Get the selected patch index from annotations""" |
|
|
if annotations and annotations.get("patch_index") is not None: |
|
|
return f"Selected Patch Index: {annotations['patch_index']}" |
|
|
return "No patch selected" |
|
|
|
|
|
|
|
|
def update_params(img_size, patch_size, current_annotation): |
|
|
"""Update patch_size and img_size based on user inputs""" |
|
|
if not current_annotation: |
|
|
current_annotation = {"image": None, "patch_index": None} |
|
|
|
|
|
|
|
|
img_size = max(32, min(1024, int(img_size))) |
|
|
patch_size = max(1, min(128, int(patch_size))) |
|
|
|
|
|
|
|
|
current_annotation["img_size"] = img_size |
|
|
current_annotation["patch_size"] = patch_size |
|
|
|
|
|
|
|
|
param_info = f"Image Size: {img_size}x{img_size}\nPatch Size: {patch_size}x{patch_size}" |
|
|
|
|
|
|
|
|
grid_width = img_size // patch_size |
|
|
grid_height = img_size // patch_size |
|
|
grid_info = f"Grid Dimensions: {grid_width}x{grid_height} ({grid_width * grid_height} patches)" |
|
|
|
|
|
return current_annotation, param_info, grid_info |
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
with gr.Tab("Dynamic Patch Selector", id="tab_dynamic_patch_selector"): |
|
|
gr.Markdown("# Dynamic Patch Selector Demo") |
|
|
gr.Markdown("This demo shows how to dynamically update the patch size and image size using number inputs.") |
|
|
|
|
|
with gr.Row(): |
|
|
with gr.Column(scale=1): |
|
|
img_size_input = gr.Number( |
|
|
value=DEFAULT_IMG_SIZE, |
|
|
label="Image Size", |
|
|
minimum=32, |
|
|
maximum=1024, |
|
|
step=16, |
|
|
precision=0 |
|
|
) |
|
|
patch_size_input = gr.Number( |
|
|
value=DEFAULT_PATCH_SIZE, |
|
|
label="Patch Size", |
|
|
minimum=1, |
|
|
maximum=128, |
|
|
step=1, |
|
|
precision=0 |
|
|
) |
|
|
param_info = gr.Textbox( |
|
|
value=f"Image Size: {DEFAULT_IMG_SIZE}x{DEFAULT_IMG_SIZE}\nPatch Size: {DEFAULT_PATCH_SIZE}x{DEFAULT_PATCH_SIZE}", |
|
|
label="Parameters", |
|
|
interactive=False |
|
|
) |
|
|
grid_info = gr.Textbox( |
|
|
value=f"Grid Dimensions: {DEFAULT_IMG_SIZE//DEFAULT_PATCH_SIZE}x{DEFAULT_IMG_SIZE//DEFAULT_PATCH_SIZE} ({(DEFAULT_IMG_SIZE//DEFAULT_PATCH_SIZE)**2} patches)", |
|
|
label="Grid Information", |
|
|
interactive=False |
|
|
) |
|
|
|
|
|
with gr.Row(): |
|
|
with gr.Column(scale=2): |
|
|
annotator = PatchSelector( |
|
|
example_annotation, |
|
|
img_size=DEFAULT_IMG_SIZE, |
|
|
patch_size=DEFAULT_PATCH_SIZE, |
|
|
show_grid=True, |
|
|
grid_color="rgba(200, 200, 200, 0.5)" |
|
|
) |
|
|
|
|
|
with gr.Column(scale=1): |
|
|
output = gr.Textbox(label="Selected Patch", value="No patch selected") |
|
|
gr.Markdown("### How it works") |
|
|
gr.Markdown("1. Adjust the image size and patch size using the number inputs") |
|
|
gr.Markdown("2. The grid will update automatically based on your inputs") |
|
|
gr.Markdown("3. Click on any patch to select it and get its index") |
|
|
|
|
|
|
|
|
img_size_input.change( |
|
|
update_params, |
|
|
inputs=[img_size_input, patch_size_input, annotator], |
|
|
outputs=[annotator, param_info, grid_info] |
|
|
) |
|
|
|
|
|
patch_size_input.change( |
|
|
update_params, |
|
|
inputs=[img_size_input, patch_size_input, annotator], |
|
|
outputs=[annotator, param_info, grid_info] |
|
|
) |
|
|
|
|
|
|
|
|
annotator.patch_select(get_patch_index, annotator, output) |
|
|
|
|
|
gr.Examples(examples, annotator) |
|
|
|
|
|
if __name__ == "__main__": |
|
|
demo.launch() |
|
|
|