Commit Graph

171 Commits

Author SHA1 Message Date
64eaad751c L'interface webapp ne peut plus rester silencieusement périmée
La webapp légère bâchait app.js/app.css dans l'image au build : après une
évolution de l'interface, le Pi servait l'ancienne carte sans aucun signal
(tuiles invisibles, vieux fichiers). Désormais l'interface embarque sa
version (hash CSS+JS) que le serveur de données publie via /api/tiles : en
cas de divergence, bandeau « interface périmée » dans la carte + log d'alerte
côté webapp. Les assets sont servis en revalidation (jamais immutable) et
une page ouverte depuis plus de 15 min se recharge seule au retour au premier
plan — l'ancienne interface n'est plus jamais affichée après un déploiement.
2026-09-21 23:43:19 +02:00
7c10ae3e18 Rasterisation GPU du DTM (bin_mean_2d) + GPU fallback renforcé et workers mono-thread
Rastérisation des points sol via gpu.bin_mean_2d (bincount 2D CuPy, sémantique
identique au repli scipy binned_statistic_2d) : ~x7 plus rapide sur cette
étape, logs de durée par phase dans create_dtm_fast. safe_gpu_call retente en
CPU sur toute erreur GPU (pas seulement les messages CUDA) : un transfert
échoué en cours de run mélangeait types numpy/cupy et faisait échouer la
visualisation entière. Workers en mono-thread BLAS/OpenMP sur la machine de
traitement (plus de saturation des cœurs pendant les runs).
2026-09-21 23:42:55 +02:00
2d5a9b2a46 Assombrir les tuiles OSM pour supprimer les cadres blancs au dézoom
Les tuiles OpenStreetMap standard ont un fond blanc : au dézoom, les zones
sans données LiDAR laissent apparaître ce blanc à travers l'opacité du pane
(45 %), créant des cadres blancs autour des tuiles. Un filtre CSS
(brightness 0.35 + contrast 1.1 + saturate 0.7) assombrit le fond OSM pour
le fondre dans le thème sombre de la carte.
2026-09-20 17:29:11 +02:00
aa34063b5e Ajouter la commande redeploir à serve-webapp.sh
Récupère les derniers commits (git pull), reconstruit l'image légère et
recrée le conteneur en une seule commande — cycle de mise à jour complet du
Pi après un push vers origin. Le cache de tuiles est conservé.
2026-09-20 16:58:37 +02:00
e0173e0b39 Rendre les tuiles jointives sur la carte et supprimer le cadre blanc au dézoom
Les sous-tuiles voisines ne partageaient pas leurs bords (interpolation
bilinéaire évaluée deux fois sur des fractions différentes), créant une ligne
claire entre images au zoom moyen. Les points de bord sont désormais calculés
une fois par dalle et partagés entre sous-tuiles adjacentes.

Le cadre blanc autour des tuiles au dézoom venait du outline CSS dessiné
par-dessus les bords d'images non jointives : supprimé (le survol garde son
halo). La bascule overview ↔ vignettes oscillait d'un cran de zoom, d'où une
hystérésis. Les seuils de paliers sont revus pour ne jamais étirer la
vignette intermédiaire au-delà de 1:1.
2026-09-20 16:47:26 +02:00
5f03359fc3 Preset « plop » comme configuration par défaut des couches
La config enregistrée (aspect 74 % en bas, openness positive au-dessus,
fond OSM sombre) devient le preset intégré « Défaut » et les défauts du
panneau. DEFAULT_VIZ reste le relief archéologique (positive_openness).
2026-09-20 15:18:28 +02:00
1d722ff10c Ne pas générer d overview locale sur la webapp légère (géométrie divergente du worker) 2026-09-20 01:05:08 +02:00
b622d55720 Résoudre paresseusement la div des mosaïques d overview (icône non posée à l eval) 2026-09-20 00:57:46 +02:00
b5f3faa14d Projeter les coins du bbox de zone (PROJ) au lieu d exiger un rectangle plein 2026-09-20 00:45:45 +02:00
eec8421f23 Une mosaïque d overview par zone géographique, pas une grille globale 2026-09-20 00:40:32 +02:00
4a13cdb3f5 Tolérer les coquilles HTML sans const OVERVIEW (alias gardé dans app.js) 2026-09-20 00:28:59 +02:00
342a0d2213 Vue dézoomée en mosaïque d'overview et cache immutable des images versionnées 2026-09-20 00:26:18 +02:00
3236d56a4b Isoler les dalles voisines de raccord dans input/edge_neighbors/ 2026-09-19 23:43:50 +02:00
5ef0232c80 Workers parallèles adaptatifs : -w auto = cœurs - 2, résolu au lancement de chaque run 2026-09-19 21:58:47 +02:00
900bf5ee89 Réessayer le sous-tuilage quand la dalle source est en cours d'écriture 2026-09-19 21:43:56 +02:00
52f67b8e55 Documenter le wrapper ssh de déploiement distant du Pi 2026-09-19 21:28:37 +02:00
3a374a3ab4 AVIF q60 par défaut et sélecteur de mode de fusion par couche 2026-09-19 21:26:13 +02:00
5f018fe2b6 Raccorder les bords de tuiles voisines et encadrer les rendus en cours
Le MNT de chaque dalle s'étend d'une bande de 100 m remplie avec les
points sol des 8 tuiles voisines (option « Raccord des bords ») : les
rendus à grand noyau (openness, SVF, LRM) deviennent continus d'une
dalle à l'autre, les images restent recadrées sur le kilomètre exact.

Pendant une génération, la carte encadre les dalles du run : orange
pulsant en cours de rendu, rouge en échec — les coins WGS84 sont portés
par /api/status pour toutes les dalles non terminées.

La file de génération trie les dalles du nord au sud et passe à 10
workers GPU.
2026-09-19 20:44:44 +02:00
204b2ad111 Preset Défaut : masquer la pente (openness + aspect 50 % + fond OSM 30 %) 2026-09-19 19:08:45 +02:00
2310676886 Preset Défaut : fond OSM visible à 30 % sous la pile de couches 2026-09-19 19:07:21 +02:00
4c189834c6 Inverser la pile du preset Défaut : openness en base, aspect 50 %, pente au sommet 2026-09-19 19:06:43 +02:00
2751d0fea1 Préconfiguration intégrée unique (pente 0, aspect 50, openness 100) 2026-09-19 19:03:56 +02:00
9546173c07 Préréglage carte par défaut et serve-webapp.sh compatible Traefik 2026-09-19 11:05:16 +02:00
e8a9b0187c Porter la carte au zoom 20 et passer le worker à 5 workers 2026-09-19 10:55:44 +02:00
41206f65de Caler les faisceaux de vol, décimer l'openness et cibler les couches affichées
Trois chantiers liés à la qualité et au coût des rendus :

- Calage vertical des faisceaux : les passes d'une tuile peuvent être biaisées
  de quelques cm (±2,5 cm mesurés sur 1000_6882), créant des marches aux
  recouvrements. Les offsets par PointSourceId sont mesurés sur les points
  sol de la tuile (réf. médiane itérée) et retranchés ≥ 0,5 cm avant
  rastérisation, avec sidecar de cache et application au plancher bare-earth.
- Openness décimée ×2 : lancé de rayons sur grille par blocs (max/min) puis
  rééchantillonnage bilinéaire — 532 s → 40 s par tuile à 0,2 m sur CPU,
  signal archéologique préservé. Réglable --openness-downsample.
- Génération webapp concentrée sur les couches affichées : les défauts
  /api/generate, /api/preview et le sélecteur génèrent le panneau complet
  (slope, aspect, pos_open) au lieu d'aspect seul.
2026-09-19 00:53:22 +02:00
796e68c870 Supprimer le code mort (imports inutilisés, variable _xp, conseil GPU inatteignable) 2026-09-18 21:31:19 +02:00
7e2dcfe656 Aligner le CIDR par défaut de run.sh sur la webapp et nettoyer le parsing GPU 2026-09-18 21:29:17 +02:00
e5895df7b8 Installer depuis requirements.txt et retirer les paquets jamais importés 2026-09-18 21:28:14 +02:00
d2d8e4d85d Retirer l'entry point lidar-server pointant vers un module inexistant 2026-09-18 21:25:31 +02:00
91d31bcdf9 Numéroter les zones après tri, lire le journal par la fin et corriger l'aide -g 2026-09-18 21:24:57 +02:00
f3708f8449 Journaliser les replis CPU du GPU et retirer une copie VRAM inutile 2026-09-18 21:23:39 +02:00
93d1656d9f Coller les dalles directement dans le canevas habillé (pic mémoire divisé par 2) 2026-09-18 21:22:53 +02:00
5e13151998 Fermer les images PIL et borner le cache de cartes de localisation 2026-09-18 21:20:14 +02:00
394dd27375 Rendre robustes les tuiles WMTS IGN : retry, urlencode, User-Agent, latitude bornée 2026-09-18 21:19:28 +02:00
777b0c3f98 Téléchargement IGN atomique (.part + rename) et pagination du catalogue STAC 2026-09-18 21:18:06 +02:00
0dc485d0bf Rendre le montage de la clé SSH désactivable (LIDAR_MOUNT_SSH=0) 2026-09-18 21:17:05 +02:00
fd5ad283f7 Comparer le token d'API à temps constant 2026-09-18 21:16:23 +02:00
de8d84b94b Échapper les noms de dalles injectés dans l'interface (HTML et <script> inline) 2026-09-18 21:16:01 +02:00
93ac46393f Durcir Jupyter : utilisateur non root, token généré, input en lecture seule 2026-09-18 21:14:09 +02:00
1eed1f2029 Toujours supprimer le LAS temporaire du repli PDAL, même en échec 2026-09-18 21:13:22 +02:00
340743abe0 Poser le processus du job avant son fil de veille (double lancement possible) 2026-09-18 21:12:51 +02:00
c8c9f64db1 Plafonner la passe globale de complétion comme dans /api/preview 2026-09-18 21:12:18 +02:00
fbb56936f8 Étiqueter les événements de progression par run pour filtrer les retardataires 2026-09-18 21:11:47 +02:00
ecd21d5b46 Borner le nettoyage PDAL à notre run et supprimer le pkill à chaque sortie 2026-09-18 21:09:32 +02:00
bb086e308a Rendre effectif le délai de sécurité de 2 h des workers parallèles 2026-09-18 21:08:25 +02:00
4cdbf5a0e4 Rejeter proprement les tuiles 100 % nodata en détection d'anomalies 2026-09-18 21:07:32 +02:00
4c8fa68f71 Sol nu : ramener aussi les cellules sans mesure au retour le plus bas 2026-09-18 21:07:01 +02:00
c8e3b6abd9 Diviser le gradient par la résolution hors chemin partagé (pentes fausses) 2026-09-18 21:06:25 +02:00
476f246fe7 Masquer le nodata avant étalonnage colormap et colorbar en unités réelles 2026-09-18 21:05:55 +02:00
3c19dc4226 Blinder la normalisation terrain contre les tuiles d'altitude constante 2026-09-18 21:04:13 +02:00