import re import subprocess import gradio as gr import trimesh import tempfile import time import pathlib import os os.system("pip install -e ./simple-knn") os.system("pip install -e ./diff-gaussian-rasterization") TEMP_DIR = "/tmp/dreamgaussian" os.makedirs(TEMP_DIR, exist_ok=True) def create_from_text(prompt): temp_dir = tempfile.mkdtemp(dir=TEMP_DIR) sanitized_prompt = re.sub("[^0-9a-zA-Z]+", "_", prompt) cmd1 = [ "python", "main.py", "--config", "configs/text.yaml", f"prompt={prompt}", f"outdir={temp_dir}", f"save_path={sanitized_prompt}", "force_cuda_rast=True", "mesh_format=glb", ] cmd2 = [ "python", "main2.py", "--config", "configs/text.yaml", f"prompt={prompt}", f"outdir={temp_dir}", f"save_path={sanitized_prompt}", "force_cuda_rast=True", "mesh_format=glb", ] subprocess.run(cmd1) subprocess.run(cmd2) glb_path = f"{temp_dir}/{sanitized_prompt}.glb" return [get_html_model(glb_path), glb_path] def create_from_image(image): temp_dir = tempfile.mkdtemp(dir=TEMP_DIR) sanitized_prompt = "image" image.save(f"{temp_dir}/{sanitized_prompt}.png") cmd1 = [ "python", "process.py", f"{temp_dir}/{sanitized_prompt}.png", "--size", "512", ] # <<< 256 may be a good default cmd2 = [ "python", "main.py", "--config", "configs/image.yaml", f"outdir={temp_dir}", f"input={temp_dir}/{sanitized_prompt}_rgba.png", f"save_path={sanitized_prompt}", "force_cuda_rast=True", "mesh_format=glb", ] cmd3 = [ "python", "main2.py", "--config", "configs/image.yaml", f"outdir={temp_dir}", f"input={temp_dir}/{sanitized_prompt}_rgba.png", f"save_path={sanitized_prompt}", "force_cuda_rast=True", "mesh_format=glb", ] print(cmd1) print(cmd2) print(cmd3) subprocess.run(cmd1) subprocess.run(cmd2) subprocess.run(cmd3) glb_path = f"{temp_dir}/{sanitized_prompt}.glb" return [get_html_model(glb_path), glb_path] def get_html_model(f_path): iframe = f"""""" return iframe def generate(prompt, image): if prompt: gr.Info("Generating from prompt") return create_from_text(prompt) elif image: gr.Info("Generating from image") return create_from_image(image) raise gr.Error("Please enter a prompt or upload an image.") with gr.Blocks() as demo: gr.Markdown( """ # DreamGaussian source: https://github.com/dreamgaussian/dreamgaussian """ ) with gr.Row(): with gr.Column(): prompt = gr.Textbox(lines=2, placeholder="Enter Prompt...") image = gr.Image(type="pil", label="Image") with gr.Row(): clear = gr.Button("Clear") btn = gr.Button("Generate") with gr.Column(): with gr.Box(): model_3d = gr.HTML( value="