Troisième passe du calage vertical : chaque ligne de balayage (décalage et inclinaison due au roulis) est recalée contre le consensus des autres faisceaux, à toutes les échelles, avec un profil d'étalonnage par faisceau et par degré d'angle qui retire les écarts non linéaires en travers de la fauchée. Les lignes sans recouvrement sont corrigées contre leur propre faisceau. Efface les lignes en creux et la marche au bord de fauchée mesurées sur LHD_FXX_0999_6882 (validé sur des blocs jamais vus). Calcul vectorisé, CuPy si GPU ; la gigue par fenêtres de temps devient inutile quand scan_angle existe. Rendu plus rapide : encodage AVIF speed 9 (0,6 s au lieu de 4 s par dalle), classification IGN par extraction directe laspy au lieu de PDAL (4,9 s au lieu de 13,5 s), comblement des trous et gradients sur GPU, cache numba persistant dans l'image. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
67 lines
2.6 KiB
Docker
67 lines
2.6 KiB
Docker
FROM nvidia/cuda:12.9.2-devel-ubuntu22.04
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
ENV TZ=Europe/Paris
|
|
|
|
# Install system packages + Miniforge for PDAL >= 2.5 (Ubuntu 22.04 ships PDAL 2.3 which can't read COPC v1.1)
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
gdal-bin \
|
|
python3-gdal \
|
|
python3-pip \
|
|
python3-dev \
|
|
build-essential \
|
|
wget \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& wget -q https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh -O /tmp/miniforge.sh \
|
|
&& bash /tmp/miniforge.sh -b -p /opt/conda \
|
|
&& rm /tmp/miniforge.sh \
|
|
&& /opt/conda/bin/conda install -y -c conda-forge pdal \
|
|
&& ln -sf /opt/conda/bin/pdal /usr/local/bin/pdal \
|
|
&& /opt/conda/bin/conda clean -afy
|
|
|
|
WORKDIR /app
|
|
|
|
# Install Python packages via pip (liste unique : requirements.txt)
|
|
COPY requirements.txt .
|
|
RUN pip3 install --no-cache-dir -r requirements.txt
|
|
|
|
# CuPy on CUDA 12.9 with JIT compilation (CUPY_CUDA_COMPILE_WITH_CACHE=1).
|
|
# JIT allows CuPy to compile kernels at runtime for GPU architectures not in
|
|
# the pre-built wheel (sm_89 = RTX 4060 Ti, sm_120 = RTX 5060 Ti).
|
|
# nvcc must be in PATH at runtime for JIT compilation.
|
|
ENV CUPY_CUDA_COMPILE_WITH_CACHE=1
|
|
# Cache des noyaux numba (relief orienté, accumulation) : sans lui, chaque
|
|
# worker (processus spawn par dalle) recompile ses noyaux (~1 s par dalle).
|
|
ENV NUMBA_CACHE_DIR=/tmp/numba-cache
|
|
ENV PATH=/usr/local/cuda/bin:${PATH}
|
|
RUN pip3 install --no-cache-dir cupy-cuda12x
|
|
|
|
# Copy and install the pipeline package
|
|
COPY setup.py .
|
|
COPY lidar_pipeline/ ./lidar_pipeline/
|
|
RUN pip3 install --no-cache-dir .
|
|
|
|
# CSS/JS de l'interface de la carte (app.js/app.css + Leaflet) bâchés dans
|
|
# l'image : mapserve les sert depuis mapserve_assets/ du paquet installé.
|
|
# cd /tmp : sans lui, python3 -c met le répertoire courant (/app, copie
|
|
# source) sur sys.path et le bake atterrirait dans la copie au lieu du
|
|
# paquet installé (dist-packages) qu'utilise le conteneur au runtime.
|
|
RUN cd /tmp && python3 -c "import pathlib, lidar_pipeline.mapui as m; m.write_map_assets(pathlib.Path(m.__file__).resolve().parent / m.ASSETS_DIRNAME)"
|
|
|
|
# Copy backward-compatible entry point
|
|
COPY process_lidar.py /usr/local/bin/
|
|
RUN chmod +x /usr/local/bin/process_lidar.py
|
|
|
|
# Create user with uid/gid 1000:1000 and run as that user
|
|
RUN groupadd -g 1000 lidar && \
|
|
useradd -u 1000 -g lidar -m lidar && \
|
|
mkdir -p /data/output /data/input && \
|
|
chown -R lidar:lidar /data /data/output /data/input
|
|
|
|
WORKDIR /data
|
|
|
|
USER lidar
|
|
|
|
VOLUME ["/data"]
|
|
|
|
CMD ["python3", "-m", "lidar_pipeline", "/data/input", "-o", "/data/output"] |