GarmentCode / app.py
qbhf2's picture
Update app.py
129a798 verified
raw
history blame
4.2 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()
import gradio as gr
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("### Параметры генерации")
# Ряд для загрузки файлов
with gr.Row():
with gr.Column(min_width=300,):
pattern_upload = gr.File(
label="1. Загрузите лекала (JSON/SVG)",
file_types=[".json", ".svg"],
elem_classes="upload-box"
)
with gr.Column(min_width=300):
body_upload = gr.File(
label="2. Загрузите 3D-модель тела (OBJ/USD/FBX)",
file_types=[".obj", ".usd", ".fbx"],
elem_classes="upload-box"
)
# Основной контент
with gr.Row():
# Левая панель параметров
with gr.Column(scale=1):
with gr.Accordion("3. Параметры генерации", open=False):
gr.Dropdown(
["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf", "SquareNeckHalf",
"TrapezoidNeckHalf", "CircleArcNeckHalf", "Bezier2NeckHalf"],
label="Front Collar",
info="Форма переднего воротника"
)
gr.Dropdown(
["CircleNeckHalf", "CurvyNeckHalf", "VNeckHalf", "SquareNeckHalf",
"TrapezoidNeckHalf", "CircleArcNeckHalf", "Bezier2NeckHalf"],
label="Back Collar",
info="Форма заднего воротника"
)
with gr.Accordion("4. Render engine", open=False):
gr.Radio(
["BPY", "Pyrender/Open3D", "Maya"],
label="Выберите рендер движок",
value="Pyrender/Open3D"
)
# Правая панель 3D просмотра
with gr.Column(scale=3):
# Основной 3D вьювер
viewer = gr.Model3D(
label="3D Просмотрщик",
interactive=True,
height=600
)
# Панель управления сохранением
with gr.Row():
with gr.Column(show_progress=True):
with gr.Row():
save_render_btn = gr.Button("Сохранить рендер", variant="primary")
save_obj_btn = gr.Button("Сохранить OBJ", variant="secondary")
# Логика обновления
body_upload.change(
fn=lambda file: file.name if file else None,
inputs=body_upload,
outputs=viewer
)
# Стилизация
demo.css = """
.upload-box {
margin: 1rem 0;
padding: 1rem;
border: 2px dashed #e0e0e0;
border-radius: 8px;
}
"""
# Запуск приложения
if __name__ == "__main__":
run_setup_script()
demo.launch()