Spaces:
Sleeping
Sleeping
File size: 3,971 Bytes
99ffd02 1d5744a 99ffd02 1d5744a a651679 1d5744a 230b8e8 1d5744a b001341 52df11a b001341 52df11a b001341 99ffd02 b001341 52df11a b001341 52df11a b001341 52df11a b001341 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | 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() |