Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import subprocess | |
| import os | |
| # Запуск setup.sh для настройки окружения и source ~/.bashrc | |
| def run_setup_script(): | |
| setup_script_path = os.path.join(os.path.dirname(__file__), "startup.sh") | |
| try: | |
| print("Running setup script...") | |
| # Выполнить setup.sh и source ~/.bashrc в одной сессии bash | |
| subprocess.run( | |
| f"bash -c 'source ~/.bashrc && bash {setup_script_path}'", | |
| shell=True, | |
| check=True, | |
| ) | |
| print("Setup script and environment initialization completed successfully!") | |
| except subprocess.CalledProcessError as e: | |
| print(f"Error while running setup script or sourcing .bashrc: {e}") | |
| exit(1) | |
| # Выполнить setup.sh перед запуском приложения | |
| run_setup_script() | |
| # Структура состояния приложения | |
| class GUIState: | |
| def __init__(self): | |
| self.pattern_state = None # Заглушка для состояния лекал | |
| self.local_path_3d = Path('./tmp_gui/garm_3d') | |
| self.local_path_3d.mkdir(parents=True, exist_ok=True) | |
| self.garm_3d_filename = None | |
| def update_pattern_ui_state(self, param_dict=None, param=None, new_value=None): | |
| """Обновление состояния лекал (заглушка)""" | |
| print("Обновление лекал...") | |
| def update_3d_scene(self): | |
| """Обновление 3D модели (заглушка)""" | |
| print("Обновление 3D модели...") | |
| self.garm_3d_filename = f'garm_3d_{time.time()}.glb' | |
| shutil.copy2('./assets/example.glb', self.local_path_3d / self.garm_3d_filename) | |
| return str(self.local_path_3d / self.garm_3d_filename) | |
| # Инициализация состояния | |
| state = GUIState() | |
| # Функция для загрузки файлов лекал и тела | |
| def upload_files(pattern_file, body_file): | |
| if pattern_file: | |
| print(f"Загружен файл лекал: {pattern_file.name}") | |
| if body_file: | |
| print(f"Загружен файл тела: {body_file.name}") | |
| return "Файлы успешно загружены!" | |
| # Функция для обновления 3D сцены | |
| def update_3d(): | |
| path_to_model = state.update_3d_scene() | |
| return path_to_model | |
| # Интерфейс Gradio | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| # Левая панель: загрузка файлов и параметры | |
| with gr.Column(scale=1): | |
| gr.Markdown("### Параметры генерации") | |
| pattern_upload = gr.File(label="Загрузите лекала (JSON/SVG)", file_types=[".json", ".svg"]) | |
| body_upload = gr.File(label="Загрузите модель тела (OBJ/USD/FBX)", file_types=[".obj", ".usd", ".fbx"]) | |
| upload_button = gr.Button("Загрузить файлы") | |
| upload_status = gr.Textbox(label="Статус загрузки", interactive=False) | |
| upload_button.click( | |
| fn=upload_files, | |
| inputs=[pattern_upload, body_upload], | |
| outputs=upload_status, | |
| ) | |
| gr.Markdown("### Дополнительные параметры") | |
| dropdown_menu = gr.Dropdown(["Опция 1", "Опция 2"], label="Выберите режим") | |
| # Правая панель: 3D просмотрщик | |
| with gr.Column(scale=2): | |
| gr.Markdown("### 3D Просмотрщик") | |
| viewer = gr.Model3D(label="Результат генерации", interactive=True) | |
| generate_button = gr.Button("Сгенерировать 3D модель") | |
| generate_button.click( | |
| fn=update_3d, | |
| inputs=[], | |
| outputs=viewer, | |
| ) | |
| # Запуск приложения | |
| demo.launch() |