Suppression éclairage solaire, GPU accéléré, --file multi, tests unitaires
- Suppression de generate_solar (éclairage solaire) des visualisations - Accélération GPU de hillshade, slope, aspect, curvature, depressions, anomalies, roughness, texture GLCM, flow (sink filling) - Nettoyage mémoire GPU entre visualisations (gpu_cleanup) - Correction OOM texture GLCM: calcul entropie bin par bin au lieu d'un tableau 3D massif sur GPU - Correction bug: xp_minimum_filter manquant dans imports visualizations - Option --file accepte plusieurs noms complets sans extension - run.sh affiche l'aide si appelé sans arguments - Option --test pour exécuter les tests unitaires dans Docker - Filtre ReturnNumber>=1 intégré dans le pipeline PDAL (plus d'erreur SMRF) - 60 tests unitaires: GPU, visualisations, rendering, DTM, pipeline, CLI - Ajout pytest au Dockerfile Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@ -61,7 +61,7 @@ Exemples:
|
||||
python -m lidar_pipeline /data/input -o /data/output --force
|
||||
|
||||
Traiter un seul fichier (pour tests):
|
||||
python -m lidar_pipeline /data/input -o /data/output --file LHD_FXX_1000_6881_PTS_LAMB93_IGN69.copc.laz
|
||||
python -m lidar_pipeline /data/input -o /data/output --file LHD_FXX_1000_6881_PTS_LAMB93_IGN69.copc
|
||||
|
||||
Traitement parallèle (4 workers):
|
||||
python -m lidar_pipeline /data/input -o /data/output -w 4
|
||||
@ -95,9 +95,10 @@ Exemples:
|
||||
)
|
||||
parser.add_argument(
|
||||
"--file",
|
||||
nargs="+",
|
||||
type=str,
|
||||
default=None,
|
||||
help="Traiter un seul fichier LAZ/LAS (pour tests, par nom partiel ou complet)"
|
||||
help="Traiter un ou plusieurs fichiers LAZ/LAS (nom complet sans extension, ex: LHD_FXX_1000_6882_PTS_LAMB93_IGN69.copc)"
|
||||
)
|
||||
parser.add_argument(
|
||||
"-v", "--verbose",
|
||||
@ -130,24 +131,35 @@ Exemples:
|
||||
force=args.force
|
||||
)
|
||||
|
||||
# If --file is specified, process only that single file
|
||||
# If --file is specified, process only matching files
|
||||
if args.file:
|
||||
from pathlib import Path
|
||||
input_dir = Path(args.input)
|
||||
# Find matching file
|
||||
matches = list(input_dir.glob(f"*{args.file}*")) + list(input_dir.glob(f"*{args.file}*.laz")) + list(input_dir.glob(f"*{args.file}*.las"))
|
||||
# Remove duplicates
|
||||
matches = list(dict.fromkeys(matches))
|
||||
if not matches:
|
||||
logger.error(f"Aucun fichier trouvé pour: {args.file}")
|
||||
# Each pattern is the full filename without extension (e.g. LHD_FXX_1000_6882_PTS_LAMB93_IGN69.copc)
|
||||
selected_files = []
|
||||
for pattern in args.file:
|
||||
matches = list(input_dir.glob(f"{pattern}.laz")) + list(input_dir.glob(f"{pattern}.las"))
|
||||
# Remove duplicates
|
||||
matches = list(dict.fromkeys(matches))
|
||||
if not matches:
|
||||
logger.warning(f"Aucun fichier trouvé pour: {pattern}")
|
||||
continue
|
||||
selected_files.extend(matches)
|
||||
# Remove duplicates across patterns
|
||||
seen = set()
|
||||
unique_files = []
|
||||
for f in selected_files:
|
||||
if f not in seen:
|
||||
seen.add(f)
|
||||
unique_files.append(f)
|
||||
if not unique_files:
|
||||
logger.error("Aucun fichier trouvé pour les motifs spécifiés")
|
||||
sys.exit(1)
|
||||
if len(matches) > 1:
|
||||
logger.info(f"Plusieurs fichiers correspondent, utilisation du premier:")
|
||||
for m in matches:
|
||||
logger.info(f" {m.name}")
|
||||
laz_file = matches[0]
|
||||
logger.info(f"Traitement du fichier: {laz_file.name}")
|
||||
pipeline.process_file(laz_file)
|
||||
logger.info(f"Traitement de {len(unique_files)} fichier(s) sélectionné(s)")
|
||||
for laz_file in unique_files:
|
||||
logger.info(f" → {laz_file.name}")
|
||||
for laz_file in unique_files:
|
||||
pipeline.process_file(laz_file)
|
||||
else:
|
||||
pipeline.process_all()
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user