diff --git a/lidar_pipeline/visualizations.py b/lidar_pipeline/visualizations.py index 0c34a16..6fae2dd 100644 --- a/lidar_pipeline/visualizations.py +++ b/lidar_pipeline/visualizations.py @@ -394,6 +394,7 @@ def generate_hillshade(dem_file, basename, vis_dir, resolution, shared=None): logger.info(f" → Hillshade multidirectionnel{gpu_tag}...") t0 = time.time() output = vis_dir / f"{basename}_hillshade_multi.tif" + used_gpu = _gpu_mod.HAS_GPU try: if shared: @@ -446,7 +447,7 @@ def generate_hillshade(dem_file, basename, vis_dir, resolution, shared=None): combined_np = np.power(combined_np, gamma) _save_tif(output, combined_np.astype(np.float32), transform, crs, nan_mask=nan_mask) - logger.info(f" ✓ Hillshade terminé ({time.time()-t0:.1f}s){gpu_tag}") + logger.info(f" ✓ Hillshade terminé ({time.time()-t0:.1f}s){' [GPU]' if _gpu_mod.HAS_GPU else ''}") return output except Exception as e: logger.error(f" ✗ Erreur hillshade: {e}", exc_info=True) @@ -475,7 +476,7 @@ def generate_slope(dem_file, basename, vis_dir, resolution, shared=None): slope = xp.arctan(xp.sqrt(dx**2 + dy**2)) * 180 / xp.pi nan_mask = np.isnan(dem_np) _save_tif(output, to_cpu(slope) if _gpu_mod.HAS_GPU else slope, transform, crs, nan_mask=nan_mask) - logger.info(f" ✓ Pente terminée ({time.time()-t0:.1f}s){gpu_tag}") + logger.info(f" ✓ Pente terminée ({time.time()-t0:.1f}s){' [GPU]' if _gpu_mod.HAS_GPU else ''}") return output except Exception as e: logger.error(f" ✗ Erreur slope: {e}", exc_info=True) @@ -520,7 +521,7 @@ def generate_svf(dem_file, basename, vis_dir, resolution, shared=None): svf_np = to_cpu(svf_combined).astype(np.float32) svf_np[nan_mask] = np.nan _save_tif(output, svf_np, transform, crs) - logger.info(f" ✓ SVF terminé ({time.time()-t0:.1f}s){gpu_tag}") + logger.info(f" ✓ SVF terminé ({time.time()-t0:.1f}s){' [GPU]' if _gpu_mod.HAS_GPU else ''}") return output except Exception as e: logger.error(f" ✗ Erreur SVF: {e}", exc_info=True) @@ -568,7 +569,7 @@ def generate_openness(dem_file, basename, vis_dir, resolution, positive=True, sh openness_result = openness_result / std_val _save_tif(output, openness_result, transform, crs) - logger.info(f" ✓ {name} terminé ({time.time()-t0:.1f}s){gpu_tag}") + logger.info(f" ✓ {name} terminé ({time.time()-t0:.1f}s){' [GPU]' if _gpu_mod.HAS_GPU else ''}") return output except Exception as e: logger.error(f" ✗ Erreur openness: {e}", exc_info=True) @@ -637,7 +638,7 @@ def generate_mslrm(dem_file, basename, vis_dir, resolution, shared=None): mslrm = np.sign(signed_mean) * rms_magnitude mslrm[nan_mask] = np.nan _save_tif(output, mslrm.astype(np.float32), transform, crs) - logger.info(f" ✓ MSRM terminé ({time.time()-t0:.1f}s){gpu_tag}") + logger.info(f" ✓ MSRM terminé ({time.time()-t0:.1f}s){' [GPU]' if _gpu_mod.HAS_GPU else ''}") return output except Exception as e: logger.error(f" ✗ Erreur MSRM: {e}", exc_info=True) @@ -718,7 +719,7 @@ def generate_sailore(dem_file, basename, vis_dir, resolution, shared=None): sailore[nan_mask] = np.nan _save_tif(output, sailore.astype(np.float32), transform, crs) - logger.info(f" ✓ SAILORE terminé ({time.time()-t0:.1f}s){gpu_tag}") + logger.info(f" ✓ SAILORE terminé ({time.time()-t0:.1f}s){' [GPU]' if _gpu_mod.HAS_GPU else ''}") return output except Exception as e: logger.error(f" ✗ Erreur SAILORE: {e}", exc_info=True) @@ -790,7 +791,7 @@ def generate_roughness(dem_file, basename, vis_dir, resolution, shared=None): roughness[nan_mask] = np.nan _save_tif(output, roughness, transform, crs) - logger.info(f" ✓ Rugosité terminée ({time.time()-t0:.1f}s){gpu_tag}") + logger.info(f" ✓ Rugosité terminée ({time.time()-t0:.1f}s){' [GPU]' if _gpu_mod.HAS_GPU else ''}") return output except Exception as e: logger.error(f" ✗ Erreur rugosité: {e}", exc_info=True) @@ -922,7 +923,7 @@ def generate_wavelet(dem_file, basename, vis_dir, resolution, shared=None): combined[nan_mask] = np.nan _save_tif(output, combined.astype(np.float32), transform, crs) - logger.info(f" ✓ Ondelette terminée ({time.time()-t0:.1f}s){gpu_tag}") + logger.info(f" ✓ Ondelette terminée ({time.time()-t0:.1f}s){' [GPU]' if _gpu_mod.HAS_GPU else ''}") return output except Exception as e: logger.error(f" ✗ Erreur ondelette: {e}", exc_info=True) @@ -1044,7 +1045,7 @@ def generate_flow_accumulation(dem_file, basename, vis_dir, resolution, shared=N flow_result[nan_mask] = np.nan _save_tif(output, flow_result, transform, crs) - logger.info(f" ✓ Flow accumulation terminé ({time.time()-t0:.1f}s){gpu_tag}") + logger.info(f" ✓ Flow accumulation terminé ({time.time()-t0:.1f}s){' [GPU]' if _gpu_mod.HAS_GPU else ''}") return output except Exception as e: logger.error(f" ✗ Erreur flow accumulation: {e}", exc_info=True) @@ -1106,7 +1107,7 @@ def generate_aniso_open(dem_file, basename, vis_dir, resolution, shared=None): aniso_result = aniso_result / std_val _save_tif(output, aniso_result, transform, crs) - logger.info(f" ✓ Openness anisotropique terminé ({time.time()-t0:.1f}s){gpu_tag}") + logger.info(f" ✓ Openness anisotropique terminé ({time.time()-t0:.1f}s){' [GPU]' if _gpu_mod.HAS_GPU else ''}") return output except Exception as e: logger.error(f" ✗ Erreur openness anisotropique: {e}", exc_info=True)