Spaces:
Sleeping
Sleeping
File size: 3,678 Bytes
49d1739 af8fde2 cbf824f 49d1739 38be658 e0b3a2c 38be658 e0b3a2c 38be658 e0b3a2c 38be658 331812c af8fde2 38be658 331812c 38be658 af8fde2 38be658 af8fde2 953ea94 af8fde2 331812c af8fde2 38be658 331812c af8fde2 953ea94 af8fde2 2ccb445 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 96 97 98 99 |
import gradio as gr
import subprocess
import os
import spaces
def find_blender_python():
possible_paths = [
"/usr/share/blender/4.2/python/bin/python3.10",
"/usr/share/blender/3.6/python/bin/python3.10",
"/usr/share/blender/3.5/python/bin/python3.10",
"/usr/share/blender/3.1/python/bin/python3.10",
"/usr/lib/blender/3.1/python/bin/python3.10"
]
for path in possible_paths:
if os.path.exists(path):
return path
# Breiterer Fallback-Suchbefehl
result = subprocess.run(["find", "/", "-name", "python3.*", "-path", "*/blender/*", "-type", "f"], capture_output=True, text=True)
paths = result.stdout.strip().split("\n")
if paths and paths[0] and os.path.exists(paths[0]):
return paths[0]
# Debugging: Blender selbst suchen
blender_bin = subprocess.run(["find", "/", "-name", "blender", "-type", "f"], capture_output=True, text=True)
print(f"Blender-Binär gefunden: {blender_bin.stdout}")
raise RuntimeError("Blender Python-Interpreter nicht gefunden!")
# Funktion zum Installieren von Infinigen
def install_infinigen():
infinigen_dir = "infinigen"
if not os.path.exists(infinigen_dir):
print("Klone Infinigen...")
subprocess.run(["git", "clone", "https://github.com/princeton-vl/infinigen.git"], check=True)
blender_python = find_blender_python()
if not blender_python:
raise RuntimeError("Blender Python-Interpreter nicht gefunden!")
print(f"Blender Python gefunden unter: {blender_python}")
subprocess.run([
blender_python, "-m", "pip", "install", "-e", f"{infinigen_dir}[terrain,vis]", "--no-deps"
], check=True)
print("Infinigen installiert.")
# Infinigen beim Start installieren
try:
install_infinigen()
except Exception as e:
print(f"Fehler bei der Installation von Infinigen: {e}")
# Funktion zum Generieren einer Szene mit ZeroGPU
@spaces.GPU
def generate_scene(seed):
output_dir = "outputs"
os.makedirs(output_dir, exist_ok=True)
blender_python = find_blender_python()
if not blender_python:
return "Fehler: Blender Python-Interpreter nicht gefunden!"
command = [
blender_python, "-m", "infinigen.datagen.manage_jobs",
"--output_folder", 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"
]
try:
result = subprocess.run(command, capture_output=True, text=True, check=True)
print("STDOUT:", result.stdout)
print("STDERR:", result.stderr)
output_path = os.path.join(output_dir, "0000000000.png")
if os.path.exists(output_path):
return output_path
return f"Fehler: Bild nicht gefunden. STDERR: {result.stderr}"
except subprocess.CalledProcessError as e:
return f"Fehler: {e.stderr}"
# 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() |