#!/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 seul fichier LAZ (pour tests) # -h Afficher l'aide complète set -e 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_FILTER="" 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 seul fichier LAZ (pour tests)" echo " -h Afficher cette aide" echo "" echo "Exemples:" echo " $0 # Traitement standard" 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 (pour tests)" exit 0 ;; *) echo "Option invalide. Utilisez -h pour l'aide." >&2; exit 1 ;; esac done # Handle --file option separately (not easily done in getopts) if [[ " $@ " == *" --file "* ]]; then # Extract the argument after --file FILE_FILTER=$(echo "$@" | sed -n 's/.*--file *\([^ ]*\).*/\1/p') 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_FILTER" ]; then echo " Fichier : ${FILE_FILTER}" fi echo "============================================" CMD_ARGS="-o /data/output -r $RESOLUTION -w $WORKERS $VERBOSE_FLAG $FORCE_FLAG" if [ -n "$FILE_FILTER" ]; then CMD_ARGS="$CMD_ARGS --file $FILE_FILTER" 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