dev-bjoern commited on
Commit
04532d1
·
verified ·
1 Parent(s): e053144

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -21
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 die neueste Blender-Version installiert ist."""
19
  try:
20
- # Prüfe vorhandene Blender-Version
21
  blender_bins = glob.glob("/usr/bin/blender")
22
- if blender_bins:
23
- self.blender_bin = blender_bins[0]
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
- # Finde Blender-Python
31
- base_path = "/usr/share/blender"
 
 
 
 
 
32
  python_patterns = [
33
- f"{base_path}/{blender_version}/python/bin/python*",
34
- f"{base_path}/*/python/bin/python*",
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
- raise
48
 
49
  def _setup_infinigen(self):
50
- """Installiert Infinigen, falls nicht vorhanden."""
 
 
 
 
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.output_dir.mkdir(exist_ok=True)
 
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
- try:
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: