Files
lidar_rendu/Dockerfile
Antoine Jacquin d32502b74e Recaler les lignes de balayage des passes et accélérer le rendu
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>
2026-09-27 01:57:04 +02:00

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"]