| import gradio as gr | |
| from gradio_rerun import Rerun | |
| from data.loader import load_simulation_data | |
| from visualization.visualizer import visualize_simulation | |
| def update_simulation_dropdown(file): | |
| simulations, descriptions = load_simulation_data(file) | |
| return gr.Dropdown( | |
| choices=descriptions if descriptions else [], | |
| value=None, | |
| allow_custom_value=False | |
| ) | |
| def create_app(): | |
| with gr.Blocks() as demo: | |
| gr.Markdown(""" | |
| # Camera Simulation Visualizer | |
| Upload a JSON file containing camera simulation data and select a simulation to visualize. | |
| """) | |
| with gr.Row(): | |
| file_input = gr.File( | |
| label="Upload Simulation JSON", | |
| file_types=[".json"] | |
| ) | |
| simulation_dropdown = gr.Dropdown( | |
| label="Select Simulation", | |
| choices=[], | |
| type="index", | |
| scale=2 | |
| ) | |
| frame_input = gr.Textbox( | |
| label="Frame Selection", | |
| placeholder="E.g. 1-30, 35, 40-50 (leave empty for all frames)" | |
| ) | |
| with gr.Row(): | |
| viewer = Rerun(streaming=False) | |
| file_input.change( | |
| update_simulation_dropdown, | |
| inputs=[file_input], | |
| outputs=[simulation_dropdown] | |
| ) | |
| simulation_dropdown.change( | |
| visualize_simulation, | |
| inputs=[file_input, simulation_dropdown, frame_input], | |
| outputs=[viewer] | |
| ) | |
| frame_input.change( | |
| visualize_simulation, | |
| inputs=[file_input, simulation_dropdown, frame_input], | |
| outputs=[viewer] | |
| ) | |
| return demo | |
| if __name__ == "__main__": | |
| demo = create_app() | |
| demo.queue().launch(share=False) | |