Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -11,43 +11,52 @@ class InfinigenManager:
|
|
11 |
self.output_dir = Path(output_dir)
|
12 |
self.blender_bin = None
|
13 |
self.blender_python = None
|
|
|
14 |
self._setup_blender()
|
15 |
self._setup_infinigen()
|
16 |
|
17 |
def _setup_blender(self):
|
18 |
-
"""Stellt sicher, dass
|
19 |
try:
|
20 |
-
# Prüfe vorhandene Blender-Version
|
21 |
blender_bins = glob.glob("/usr/bin/blender")
|
22 |
-
if blender_bins:
|
23 |
-
|
24 |
-
version_result = subprocess.run([self.blender_bin, "-v"], capture_output=True, text=True)
|
25 |
-
blender_version = next((line.split()[1] for line in version_result.stdout.split("\n") if "Blender" in line and "." in line), None)
|
26 |
-
print(f"Vorhandene Blender-Version: {blender_version or 'unbekannt'}")
|
27 |
-
else:
|
28 |
-
raise FileNotFoundError("Blender nicht vorhanden")
|
29 |
|
30 |
-
|
31 |
-
|
|
|
|
|
|
|
|
|
|
|
32 |
python_patterns = [
|
33 |
-
f"
|
34 |
-
f"
|
35 |
-
"/usr/lib/blender/*/python/bin/python*"
|
|
|
36 |
]
|
37 |
for pattern in python_patterns:
|
38 |
python_bins = glob.glob(pattern, recursive=True)
|
39 |
if python_bins:
|
40 |
self.blender_python = python_bins[0]
|
41 |
print(f"Blender Python gefunden: {self.blender_python}")
|
|
|
42 |
return
|
43 |
|
|
|
|
|
|
|
44 |
raise RuntimeError("Blender Python-Interpreter nicht gefunden!")
|
45 |
except Exception as e:
|
46 |
print(f"Fehler bei Blender-Setup: {e}")
|
47 |
-
|
48 |
|
49 |
def _setup_infinigen(self):
|
50 |
-
"""Installiert Infinigen, falls
|
|
|
|
|
|
|
|
|
51 |
if not self.base_dir.exists():
|
52 |
print("Klone Infinigen...")
|
53 |
subprocess.run(["git", "clone", "https://github.com/princeton-vl/infinigen.git"], check=True)
|
@@ -61,6 +70,8 @@ class InfinigenManager:
|
|
61 |
|
62 |
def _is_infinigen_installed(self):
|
63 |
"""Prüft, ob Infinigen bereits installiert ist."""
|
|
|
|
|
64 |
try:
|
65 |
subprocess.run([self.blender_python, "-c", "import infinigen"], check=True, capture_output=True)
|
66 |
return True
|
@@ -70,8 +81,10 @@ class InfinigenManager:
|
|
70 |
@spaces.GPU
|
71 |
def generate_scene(self, seed, configs=None, pipeline_configs=None):
|
72 |
"""Generiert eine Szene mit Infinigen."""
|
73 |
-
self.
|
|
|
74 |
|
|
|
75 |
configs = configs or ["infinigen_examples/configs/desert.gin", "infinigen_examples/configs/simple.gin"]
|
76 |
pipeline_configs = pipeline_configs or [
|
77 |
"infinigen_examples/configs/local_16GB.gin",
|
@@ -96,10 +109,7 @@ class InfinigenManager:
|
|
96 |
return f"Fehler: {e.stderr}"
|
97 |
|
98 |
# Manager initialisieren
|
99 |
-
|
100 |
-
manager = InfinigenManager()
|
101 |
-
except Exception as e:
|
102 |
-
print(f"Fehler bei der Initialisierung: {e}")
|
103 |
|
104 |
# Gradio-Oberfläche
|
105 |
with gr.Blocks(title="Infinigen Demo") as demo:
|
|
|
11 |
self.output_dir = Path(output_dir)
|
12 |
self.blender_bin = None
|
13 |
self.blender_python = None
|
14 |
+
self.initialized = False
|
15 |
self._setup_blender()
|
16 |
self._setup_infinigen()
|
17 |
|
18 |
def _setup_blender(self):
|
19 |
+
"""Stellt sicher, dass Blender installiert ist und findet den Python-Interpreter."""
|
20 |
try:
|
|
|
21 |
blender_bins = glob.glob("/usr/bin/blender")
|
22 |
+
if not blender_bins:
|
23 |
+
raise FileNotFoundError("Blender-Binär nicht gefunden!")
|
|
|
|
|
|
|
|
|
|
|
24 |
|
25 |
+
self.blender_bin = blender_bins[0]
|
26 |
+
version_result = subprocess.run([self.blender_bin, "-v"], capture_output=True, text=True)
|
27 |
+
blender_version = next((line.split()[1] for line in version_result.stdout.split("\n") if "Blender" in line and "." in line), None)
|
28 |
+
print(f"Vorhandene Blender-Version: {blender_version or 'unbekannt'}")
|
29 |
+
|
30 |
+
# Breite Suche nach Python-Interpreter
|
31 |
+
base_paths = ["/usr/share/blender", "/usr/lib/blender"]
|
32 |
python_patterns = [
|
33 |
+
f"/usr/share/blender/{blender_version}/python/bin/python*",
|
34 |
+
f"/usr/share/blender/*/python/bin/python*",
|
35 |
+
f"/usr/lib/blender/*/python/bin/python*",
|
36 |
+
"/**/blender/*/python/bin/python*"
|
37 |
]
|
38 |
for pattern in python_patterns:
|
39 |
python_bins = glob.glob(pattern, recursive=True)
|
40 |
if python_bins:
|
41 |
self.blender_python = python_bins[0]
|
42 |
print(f"Blender Python gefunden: {self.blender_python}")
|
43 |
+
self.initialized = True
|
44 |
return
|
45 |
|
46 |
+
# Debugging: Vollständige Python-Suche
|
47 |
+
all_python = glob.glob("/**/python", recursive=True)
|
48 |
+
print(f"Alle Python-Pfade: {all_python}")
|
49 |
raise RuntimeError("Blender Python-Interpreter nicht gefunden!")
|
50 |
except Exception as e:
|
51 |
print(f"Fehler bei Blender-Setup: {e}")
|
52 |
+
self.blender_python = None
|
53 |
|
54 |
def _setup_infinigen(self):
|
55 |
+
"""Installiert Infinigen, falls möglich."""
|
56 |
+
if not self.blender_python:
|
57 |
+
print("Kann Infinigen nicht installieren: Blender Python fehlt.")
|
58 |
+
return
|
59 |
+
|
60 |
if not self.base_dir.exists():
|
61 |
print("Klone Infinigen...")
|
62 |
subprocess.run(["git", "clone", "https://github.com/princeton-vl/infinigen.git"], check=True)
|
|
|
70 |
|
71 |
def _is_infinigen_installed(self):
|
72 |
"""Prüft, ob Infinigen bereits installiert ist."""
|
73 |
+
if not self.blender_python:
|
74 |
+
return False
|
75 |
try:
|
76 |
subprocess.run([self.blender_python, "-c", "import infinigen"], check=True, capture_output=True)
|
77 |
return True
|
|
|
81 |
@spaces.GPU
|
82 |
def generate_scene(self, seed, configs=None, pipeline_configs=None):
|
83 |
"""Generiert eine Szene mit Infinigen."""
|
84 |
+
if not self.initialized or not self.blender_python:
|
85 |
+
return "Fehler: Infinigen nicht initialisiert (Blender Python fehlt)!"
|
86 |
|
87 |
+
self.output_dir.mkdir(exist_ok=True)
|
88 |
configs = configs or ["infinigen_examples/configs/desert.gin", "infinigen_examples/configs/simple.gin"]
|
89 |
pipeline_configs = pipeline_configs or [
|
90 |
"infinigen_examples/configs/local_16GB.gin",
|
|
|
109 |
return f"Fehler: {e.stderr}"
|
110 |
|
111 |
# Manager initialisieren
|
112 |
+
manager = InfinigenManager() # Immer definieren, auch bei Fehlern
|
|
|
|
|
|
|
113 |
|
114 |
# Gradio-Oberfläche
|
115 |
with gr.Blocks(title="Infinigen Demo") as demo:
|