Spaces:
Sleeping
Sleeping
File size: 3,766 Bytes
49d1739 af8fde2 cbf824f 890aef1 49d1739 890aef1 38be658 890aef1 38be658 890aef1 38be658 890aef1 38be658 e0b3a2c 38be658 331812c af8fde2 890aef1 af8fde2 38be658 af8fde2 890aef1 af8fde2 953ea94 af8fde2 331812c 890aef1 af8fde2 890aef1 af8fde2 890aef1 af8fde2 890aef1 af8fde2 890aef1 af8fde2 953ea94 890aef1 953ea94 331812c |
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 93 94 95 |
import gradio as gr
import subprocess
import os
import spaces
from pathlib import Path
# Funktion zum automatischen Finden des Blender-Python-Interpreters
def find_blender_python():
# Suche nach Blender-Binär
blender_bin = next(iter(Path("/").glob("**/blender")), None)
if not blender_bin:
raise RuntimeError("Blender-Binär nicht gefunden!")
print(f"Blender-Binär gefunden: {blender_bin}")
# Erkenne Blender-Version
version_result = subprocess.run([str(blender_bin), "-v"], capture_output=True, text=True)
blender_version = next((line.split()[1] for line in version_result.stdout.split("\n") if "Blender" in line and "." in line), None)
print(f"Blender-Version erkannt: {blender_version or 'unbekannt'}")
# Suche nach Python-Interpreter
base_path = Path("/usr/share/blender") if blender_version else Path("/")
python_patterns = [
f"{base_path}/{blender_version}/python/bin/python*",
f"{base_path}/*/python/bin/python*",
"/usr/lib/blender/*/python/bin/python*"
]
for pattern in python_patterns:
python_bin = next(iter(Path().glob(pattern)), None)
if python_bin and python_bin.is_file():
print(f"Blender Python gefunden: {python_bin}")
return str(python_bin)
raise RuntimeError("Blender Python-Interpreter nicht gefunden!")
# Funktion zum Installieren von Infinigen
def install_infinigen():
infinigen_dir = Path("infinigen")
if not infinigen_dir.exists():
print("Klone Infinigen...")
subprocess.run(["git", "clone", "https://github.com/princeton-vl/infinigen.git"], check=True)
blender_python = find_blender_python()
subprocess.run([
blender_python, "-m", "pip", "install", "-e", str(infinigen_dir) + "[terrain,vis]", "--no-deps", "--user"
], check=True)
print("Infinigen installiert.")
# Infinigen beim Start installieren
try:
install_infinigen()
except Exception as e:
print(f"Fehler bei Infinigen-Installation: {e}")
# Funktion zum Generieren einer Szene mit ZeroGPU
@spaces.GPU
def generate_scene(seed):
output_dir = Path("outputs")
output_dir.mkdir(exist_ok=True)
try:
blender_python = find_blender_python()
command = [
blender_python, "-m", "infinigen.datagen.manage_jobs",
"--output_folder", str(output_dir),
"--num_scenes", "1",
"--specific_seed", str(int(seed)),
"--configs", "infinigen/infinigen_examples/configs/desert.gin",
"infinigen/infinigen_examples/configs/simple.gin",
"--pipeline_configs", "infinigen/infinigen_examples/configs/local_16GB.gin",
"infinigen/infinigen_examples/configs/monocular.gin",
"infinigen/infinigen_examples/configs/blender_gt.gin"
]
result = subprocess.run(command, capture_output=True, text=True, check=True)
print(f"STDOUT: {result.stdout}")
print(f"STDERR: {result.stderr}")
output_path = output_dir / "0000000000.png"
return str(output_path) if output_path.exists() else f"Fehler: Bild nicht gefunden. STDERR: {result.stderr}"
except subprocess.CalledProcessError as e:
return f"Fehler: {e.stderr}"
except Exception as e:
return f"Fehler beim Generieren: {e}"
# Gradio-Oberfläche
with gr.Blocks(title="Infinigen Demo") as demo:
gr.Markdown("## Infinigen Scene Generator")
seed_input = gr.Number(label="Seed", value=0, precision=0)
output_image = gr.Image(label="Generierte Szene")
generate_button = gr.Button("Szene generieren")
generate_button.click(fn=generate_scene, inputs=[seed_input], outputs=[output_image])
demo.launch() |