Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from data_loader import load_data_from_file | |
| from visualization import create_3d_visualization | |
| import os | |
| LANDMARKS = ["SHOULDER", "ELBOW", "WRIST", "INDEX", "THUMB"] | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# **Visualisation 3D Interactive du Mouvement**") | |
| with gr.Row(): | |
| with gr.Column(scale=1, min_width=300): | |
| file_input = gr.File(label="Charger un fichier CSV") | |
| file_status = gr.Textbox(label="Statut du fichier", interactive=False) | |
| landmark_checkboxes = {} | |
| with gr.Accordion("Visibilité des repères", open=True): | |
| for lm in LANDMARKS: | |
| landmark_checkboxes[lm] = gr.Checkbox(value=True, label=lm) | |
| with gr.Accordion("Options d'affichage", open=True): | |
| show_trajectories_checkbox = gr.Checkbox(value=True, label="Afficher les trajectoires") | |
| show_segments_checkbox = gr.Checkbox(value=True, label="Afficher les segments") | |
| frame_slider = gr.Slider(minimum=0, maximum=0, step=1, value=0, label="Frame") | |
| frame_label = gr.Textbox(label="Frame actuelle", interactive=False) | |
| with gr.Column(scale=4): | |
| output_plot = gr.Plot(label="Visualisation 3D") | |
| df_state = gr.State(None) | |
| n_frames_state = gr.State(0) | |
| current_frame_state = gr.State(0) | |
| def on_file_upload(file_obj): | |
| if file_obj is None: | |
| return None, 0, "Aucun fichier chargé", 0, gr.Slider(maximum=0, value=0), "Frame: 0/0", None | |
| df, n_frames = load_data_from_file(file_obj) | |
| if df is None: | |
| return None, 0, "Erreur de chargement", 0, gr.Slider(maximum=0, value=0), "Frame: 0/0", None | |
| fig = create_3d_visualization(df, 0) | |
| return (df, n_frames, f"Fichier: {os.path.basename(file_obj.name)}", | |
| 0, gr.Slider(maximum=n_frames-1, value=0), | |
| f"Frame: 0/{n_frames-1}", fig) | |
| file_input.upload( | |
| on_file_upload, | |
| inputs=[file_input], | |
| outputs=[df_state, n_frames_state, file_status, current_frame_state, | |
| frame_slider, frame_label, output_plot] | |
| ) | |
| def update_visualization_and_frame_label(frame, df, n_frames, show_traj, show_seg, *lm_vis_values): | |
| if df is None: | |
| return None, "Frame: 0/0" | |
| lm_visibility = {lm: val for lm, val in zip(LANDMARKS, lm_vis_values)} | |
| fig = create_3d_visualization(df, int(frame), show_traj, show_seg, lm_visibility) | |
| return fig, f"Frame: {int(frame)}/{n_frames-1}" | |
| frame_slider.change( | |
| update_visualization_and_frame_label, | |
| inputs=[frame_slider, df_state, n_frames_state, show_trajectories_checkbox, show_segments_checkbox] + [landmark_checkboxes[lm] for lm in LANDMARKS], | |
| outputs=[output_plot, frame_label] | |
| ) | |
| for cb in [show_trajectories_checkbox, show_segments_checkbox] + [landmark_checkboxes[lm] for lm in LANDMARKS]: | |
| cb.change( | |
| update_visualization_and_frame_label, | |
| inputs=[frame_slider, df_state, n_frames_state, show_trajectories_checkbox, show_segments_checkbox] + [landmark_checkboxes[lm] for lm in LANDMARKS], | |
| outputs=[output_plot, frame_label] | |
| ) | |
| demo.launch() |