Spaces:
Paused
Paused
Update app.py
Browse files
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 |
-
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
|
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
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)
|