jbilcke-hf HF Staff commited on
Commit
1c8dc47
·
verified ·
1 Parent(s): 3581570

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -7
app.py CHANGED
@@ -128,16 +128,21 @@ class GPUSatelliteModelGenerator:
128
  tree_positions = cp.where(tree_mask)
129
  num_trees = len(tree_positions[0])
130
 
 
 
 
 
131
  # Random height variation for trees
132
  tree_heights = cp.random.uniform(0.15, 0.25, num_trees)
133
 
134
  # Create vertex displacements for tree geometry
135
  tree_vertices = base_vertices.copy()
136
- tree_vertices[tree_positions] += cp.stack([
137
- cp.zeros(num_trees), # x offset
138
- tree_heights, # y offset (height)
139
- cp.zeros(num_trees) # z offset
140
- ], axis=1)
 
141
 
142
  return tree_vertices
143
 
@@ -271,17 +276,22 @@ class GPUSatelliteModelGenerator:
271
  def generate_mesh_gpu(self, height_map, texture_img):
272
  """Generate optimized 3D mesh with tree geometry"""
273
  height_map_gpu = cp.asarray(height_map)
274
- # Convert texture_img to CuPy array
275
  texture_img_gpu = cp.asarray(texture_img)
276
  height, width = height_map.shape
277
 
278
  # Generate base vertices
279
  x, z = cp.meshgrid(cp.arange(width), cp.arange(height))
280
  vertices = cp.stack([x, height_map_gpu * self.building_height, z], axis=-1)
 
281
 
282
  # Detect tree areas and generate tree geometry
283
  tree_mask = cp.all(texture_img_gpu == self.colors['dark_green'], axis=2)
284
- vertices = self.generate_tree_vertices(tree_mask, vertices.reshape(-1, 3))
 
 
 
 
 
285
 
286
  # Normalize coordinates
287
  scale = max(width, height)
 
128
  tree_positions = cp.where(tree_mask)
129
  num_trees = len(tree_positions[0])
130
 
131
+ # Return original vertices if no trees detected
132
+ if num_trees == 0:
133
+ return base_vertices
134
+
135
  # Random height variation for trees
136
  tree_heights = cp.random.uniform(0.15, 0.25, num_trees)
137
 
138
  # Create vertex displacements for tree geometry
139
  tree_vertices = base_vertices.copy()
140
+
141
+ # Get indices for tree positions
142
+ tree_indices = cp.ravel_multi_index(tree_positions, tree_mask.shape)
143
+
144
+ # Add height offsets to tree positions
145
+ tree_vertices[tree_indices, 1] += tree_heights
146
 
147
  return tree_vertices
148
 
 
276
  def generate_mesh_gpu(self, height_map, texture_img):
277
  """Generate optimized 3D mesh with tree geometry"""
278
  height_map_gpu = cp.asarray(height_map)
 
279
  texture_img_gpu = cp.asarray(texture_img)
280
  height, width = height_map.shape
281
 
282
  # Generate base vertices
283
  x, z = cp.meshgrid(cp.arange(width), cp.arange(height))
284
  vertices = cp.stack([x, height_map_gpu * self.building_height, z], axis=-1)
285
+ vertices = vertices.reshape(-1, 3)
286
 
287
  # Detect tree areas and generate tree geometry
288
  tree_mask = cp.all(texture_img_gpu == self.colors['dark_green'], axis=2)
289
+
290
+ # Add some debug printing
291
+ print(f"Tree mask shape: {tree_mask.shape}")
292
+ print(f"Number of trees detected: {cp.sum(tree_mask)}")
293
+
294
+ vertices = self.generate_tree_vertices(tree_mask, vertices)
295
 
296
  # Normalize coordinates
297
  scale = max(width, height)