GarmentCode / app.py
qbhf2's picture
Update app.py
8a22a31 verified
raw
history blame
3.15 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()
with gr.Blocks(title="3D Garment Generator",theme=gr.themes.Default(text_size="sm")) as demo:
with gr.Row():
# Левый столбец (ввод параметров)
with gr.Column(scale=1):
gr.Markdown("### Параметры генерации")
# Загрузка файлов
pattern_upload = gr.File(label="1. Загрузите лекала (JSON/SVG)", file_types=[".json", ".svg"])
body_upload = gr.File(label="2. Загрузите 3D-модель тела (OBJ/USD/FBX)", file_types=[".obj", ".usd", ".fbx"])
# Параметры (заглушки)
with gr.Accordion("3. Параметры генерации", open=False):
gr.Radio(["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf","SquareNeckHalf","TrapezoidNeckHalf","CircleArcNeckHalf","Bezier2NeckHalf"], label="Front Collar", info="Front collar shape"),
gr.Radio(["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf","SquareNeckHalf","TrapezoidNeckHalf","CircleArcNeckHalf","Bezier2NeckHalf"], label="Back Collar", info="Back collar shape"),
# Дополнительные опции (заглушки)
with gr.Accordion("4. Дополнительные настройки", open=False):
gr.Dropdown(["Опция 1", "Опция 2"], label="Выберите режим")
# Правый столбец (3D просмотрщик)
with gr.Column(scale=2):
gr.Markdown("### 3D Просмотрщик")
# 3D просмотрщик (поддерживает OBJ/GLB)
viewer = gr.Model3D(label="Результат генерации", interactive=True)
# Кнопки сохранения
with gr.Row():
save_obj_btn = gr.Button("Сохранить OBJ")
save_render_btn = gr.Button("Сохранить рендер")
# Логика обновления просмотрщика
body_upload.change(
fn=lambda file: file.name if file else None,
inputs=body_upload,
outputs=viewer
)
# Запуск приложения
if __name__ == "__main__":
demo.launch()