GarmentCode / app.py
qbhf2's picture
Update app.py
b001341 verified
raw
history blame
3.97 kB
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()