#!/bin/bash # Pipeline LiDAR Archéologique # Utilisation: ./run.sh [options] # # Options: # -r RESOLUTION Résolution en m/px (défaut: 0.5) # -w WORKERS Nombre de workers parallèles (défaut: 1) # -g Activer l'accélération GPU # -v Mode verbeux (timestamps + niveaux) # --debug Mode debug (détails internes fichier:ligne) # -f / --force Régénérer tous les fichiers même si existants # --file NOM... Traiter un ou plusieurs fichiers LAZ spécifiques # --test Exécuter les tests unitaires # -h Afficher l'aide complète set -e # Afficher l'aide si aucun argument if [ $# -eq 0 ]; then echo "Pipeline LiDAR Archéologique" echo "" echo "Usage: $0 [options]" echo "" echo " -r RESOLUTION Résolution en m/px (défaut: 0.5)" echo " -w WORKERS Nombre de workers CPU parallèles (défaut: 1)" echo " -g Activer l'accélération GPU NVIDIA" echo " -v Mode verbeux (timestamps + niveaux)" echo " --debug Mode debug (détails internes fichier:ligne)" echo " -f / --force Régénérer tous les fichiers même si les WebP existent" echo " --file NOM... Traiter un ou plusieurs fichiers LAZ (nom complet sans .laz/.las)" echo " --test Exécuter les tests unitaires" echo " -h Afficher cette aide" echo "" echo "Exemples:" echo " $0 -g # Avec accélération GPU" echo " $0 -g -w 4 # GPU + 4 workers parallèles" echo " $0 -g -v # GPU + mode verbeux" echo " $0 -r 0.2 -g --debug # Haute résolution + GPU + debug" echo " $0 -f # Forcer la régénération de tous les fichiers" echo " $0 --file LHD_FXX_1000_6882_PTS_LAMB93_IGN69.copc # Un fichier" echo " $0 --file LHD_...6881.copc LHD_...6882.copc # Plusieurs fichiers" exit 0 fi SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" INPUT_DIR="${SCRIPT_DIR}/input" OUTPUT_DIR="${SCRIPT_DIR}/output" IMAGE_NAME="lidar-lidar" RESOLUTION=0.5 WORKERS=1 GPU_FLAG="" VERBOSE_FLAG="" FORCE_FLAG="" FILE_ARGS="" while getopts "r:w:gvf-:" opt; do case $opt in r) RESOLUTION="$OPTARG" ;; w) WORKERS="$OPTARG" ;; g) GPU_FLAG="--gpus all" ;; v) VERBOSE_FLAG="-v" ;; f) FORCE_FLAG="--force" ;; -) case "${OPTARG}" in debug) VERBOSE_FLAG="--debug" ;; force) FORCE_FLAG="--force" ;; file) ;; *) echo "Option invalide: --${OPTARG}" >&2; exit 1 ;; esac ;; h) echo "Pipeline LiDAR Archéologique" echo "" echo "Usage: $0 [options]" echo "" echo " -r RESOLUTION Résolution en m/px (défaut: 0.5)" echo " -w WORKERS Nombre de workers CPU parallèles (défaut: 1)" echo " -g Activer l'accélération GPU NVIDIA" echo " -v Mode verbeux (timestamps + niveaux)" echo " --debug Mode debug (détails internes fichier:ligne)" echo " -f / --force Régénérer tous les fichiers même si les WebP existent" echo " --file NOM... Traiter un ou plusieurs fichiers LAZ (nom complet sans .laz/.las)" echo " -h Afficher cette aide" echo "" echo "Exemples:" echo " $0 -g # Avec accélération GPU" echo " $0 -g -w 4 # GPU + 4 workers parallèles" echo " $0 -g -v # GPU + mode verbeux" echo " $0 -r 0.2 -g --debug # Haute résolution + GPU + debug" echo " $0 -f # Forcer la régénération de tous les fichiers" echo " $0 --file 6881 # Traiter un seul fichier" echo " $0 --file 6881 6882 # Traiter deux fichiers spécifiques" exit 0 ;; *) echo "Option invalide. Utilisez -h pour l'aide." >&2; exit 1 ;; esac done # Check for --test flag first if [[ " $* " == *" --test "* ]]; then # Build l'image si elle n'existe pas if ! docker image inspect "$IMAGE_NAME" >/dev/null 2>&1; then echo "Build de l'image Docker..." docker build -t "$IMAGE_NAME" "$SCRIPT_DIR" fi echo "============================================" echo " Tests unitaires LiDAR Pipeline" echo "============================================" docker run --rm $GPU_FLAG \ "$IMAGE_NAME" \ python3 -m pytest -v --pyargs lidar_pipeline.tests exit $? fi # Collect --file arguments (everything after --file until next option) if [[ "$*" == *" --file "* ]] || [[ "$*" == *" --file"* && "$*" == *"--file "* ]]; then # Extract all arguments after --file PAST_FILE=false for arg in "$@"; do if [ "$arg" = "--file" ]; then PAST_FILE=true continue fi if $PAST_FILE; then # Stop if we hit another option if [[ "$arg" == -* ]]; then PAST_FILE=false else FILE_ARGS="$FILE_ARGS $arg" fi fi done FILE_ARGS=$(echo "$FILE_ARGS" | xargs) fi # Build l'image si elle n'existe pas if ! docker image inspect "$IMAGE_NAME" >/dev/null 2>&1; then echo "Build de l'image Docker..." docker build -t "$IMAGE_NAME" "$SCRIPT_DIR" fi # Créer les répertoires s'ils n'existent pas mkdir -p "$INPUT_DIR" "$OUTPUT_DIR" # Lancer le pipeline echo "============================================" echo " Pipeline LiDAR Archéologique" echo "============================================" echo " Résolution : ${RESOLUTION}m/px" echo " Workers : ${WORKERS}" echo " GPU : $([ -n "$GPU_FLAG" ] && echo 'OUI' || echo 'non')" echo " Verbeux : $([ -n "$VERBOSE_FLAG" ] && echo 'OUI' || echo 'non')" echo " Force : $([ -n "$FORCE_FLAG" ] && echo 'OUI' || echo 'non')" if [ -n "$FILE_ARGS" ]; then echo " Fichiers :${FILE_ARGS}" fi echo "============================================" CMD_ARGS="-o /data/output -r $RESOLUTION -w $WORKERS $VERBOSE_FLAG $FORCE_FLAG" if [ -n "$FILE_ARGS" ]; then CMD_ARGS="$CMD_ARGS --file $FILE_ARGS" fi docker run --rm $GPU_FLAG \ --user 1000:1000 \ -v "${INPUT_DIR}:/data/input:ro" \ -v "${OUTPUT_DIR}:/data/output" \ "$IMAGE_NAME" \ python3 -m lidar_pipeline /data/input \ $CMD_ARGS