import gradio as gr from datasets import load_dataset from PIL import Image, ImageDraw import os hf_token = os.getenv("HF_TOKEN") dataset = load_dataset("agentsea/wave-ui-25k", split="train", token=hf_token) current_index = 0 def draw_bounding_box(image, bbox): draw = ImageDraw.Draw(image) draw.rectangle(bbox, outline="red", width=2) return image def show_image(index): global current_index current_index = index data = dataset[current_index] image = data['image'] bbox = data['bbox'] image_with_bbox = draw_bounding_box(image, bbox) image_info = f""" \n**Image {current_index + 1} of {len(dataset)}** \n**Source**: {data['source']} \n**Platform**: {data['platform']} \n**Name**: {data['name']} \n**Description**: {data['description']} \n**Type**: {data['type']} \n**OCR**: {data['OCR']} \n**Language**: {data['language']} \n**Purpose**: {data['purpose']} \n**Expectation**: {data['expectation']} """ return image_with_bbox, image_info def next_image(): global current_index current_index = (current_index + 1) % len(dataset) return show_image(current_index) def previous_image(): global current_index current_index = (current_index - 1) % len(dataset) return show_image(current_index) def change_index(new_index): new_index = int(new_index) if 0 <= new_index < len(dataset): return show_image(new_index) else: return show_image(current_index), f"Invalid index. Please enter a number between 0 and {len(dataset) - 1}." shortcut_js = """ """ with gr.Blocks(head=shortcut_js) as app: gr.Markdown("# WaveUI 25k Dataset Explorer") with gr.Row(): image_output = gr.Image(type="pil") label_output = gr.Markdown() with gr.Row(): prev_button = gr.Button("Previous", elem_id="prev_btn") next_button = gr.Button("Next", elem_id="next_btn") with gr.Row(): index_input = gr.Number(label="Go to index (0-based)", value=0) go_button = gr.Button("Go", elem_id="go_btn") prev_button.click(previous_image, outputs=[image_output, label_output]) next_button.click(next_image, outputs=[image_output, label_output]) go_button.click(change_index, inputs=[index_input], outputs=[image_output, label_output]) app.load(show_image, inputs=[gr.Number(value=0, visible=False)], outputs=[image_output, label_output]) app.launch()