docs: refresh README and adopt MIT license
This commit is contained in:
parent
d0329bc3db
commit
8434fcd773
2 changed files with 380 additions and 226 deletions
21
LICENSE
Normal file
21
LICENSE
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 LabfyTools
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
585
README.md
585
README.md
|
|
@ -1,198 +1,324 @@
|
||||||
# Lardon3D
|
# Lardon3D
|
||||||
|
|
||||||
Moteur de photogrammétrie générique, persistant, incrémental et sensible aux
|
Lardon3D is a generic, persistent, incremental, resource-aware photogrammetry engine for Linux,
|
||||||
ressources, piloté par une TUI ncursesw.
|
controlled through an ncursesw TUI.
|
||||||
|
|
||||||
## Vision
|
## Vision
|
||||||
|
|
||||||
Lardon3D est un moteur de photogrammétrie Linux qui privilégie :
|
Lardon3D is designed around the following principles:
|
||||||
|
|
||||||
- **Stabilité** : aucune saturation du système hôte
|
- **Scientific traceability**: results, identities, parameters and provenance are explicit.
|
||||||
- **Déterminisme** : résultats reproductibles et traçables
|
- **Determinism**: equivalent inputs and contracts produce reproducible, auditable outputs.
|
||||||
- **Faible consommation mémoire** : traitement par lots adaptatifs
|
- **Persistent progress**: long-running work is checkpointed and restartable.
|
||||||
- **Reprise après interruption** : résultats atomiques et persistants
|
- **Bounded execution**: memory, CPU, GPU, I/O and temporary-storage use are explicitly bounded.
|
||||||
- **Protection de la machine** : budgets bornés et respectueux
|
- **Maximum safe useful throughput**: after preserving the interactive host reserve, available
|
||||||
- **Traçabilité** : historique des opérations et métriques
|
resources should be used whenever they provide useful throughput.
|
||||||
- **Enrichissement progressif** : reconstruction incrémentale
|
- **Incremental reconstruction**: new observations can extend previous results without silently
|
||||||
|
rewriting validated history.
|
||||||
|
- **Atomic publication**: partially produced scientific outputs never masquerade as complete ones.
|
||||||
|
|
||||||
Lardon3D ne vise pas simplement "dossier de photos → objet 3D", mais un ensemble
|
Lardon3D is not simply a "folder of photos -> 3D object" tool. Its target model is:
|
||||||
progressif d'observations et de contraintes donnant une reconstruction géométrique
|
|
||||||
persistante, enrichissable et versionnable.
|
|
||||||
|
|
||||||
## État actuel
|
```text
|
||||||
|
progressive observations and constraints
|
||||||
|
-> persistent geometric reconstruction
|
||||||
|
-> validated incremental enrichment
|
||||||
|
-> dense geometry / mesh / texture / export
|
||||||
|
```
|
||||||
|
|
||||||
### Briques validées
|
## Current repository state
|
||||||
|
|
||||||
- **Project** : cycle de vie persistant, identité stable et Project Database ouverte
|
### Current Project Database
|
||||||
- **Import** : premier task kind de production, exécuté par la file générique en lots bornés et reprenables
|
|
||||||
- **ScanSet / Image Catalog v1** : acquisitions, images logiques, provenance et assets SHA-256 persistants et paginés
|
|
||||||
- **Capture / Asset Provenance v1** : Captures par ScanSet, associations source/dérivé
|
|
||||||
et sélection explicite d'une image logique — PASS / FROZEN
|
|
||||||
- **Découverte et planification de campagne bornées** : racines explicites,
|
|
||||||
plan metadata-only et exécution par groupes via S3-E — PASS / FROZEN ; campagne
|
|
||||||
A6000 réelle validée sur 953 ARW + 953 JPEG MPF
|
|
||||||
- **Feature Store v1/v2** : ORB U8×32, SIFT/RootSIFT F32×128 et lecture typée bornée
|
|
||||||
- **Image View** : vues triées et filtrées pour la TUI
|
|
||||||
- **Task** : moteur de tâches avec pause/reprise, annulation et séquences
|
|
||||||
- **Task Checkpoint v1** : snapshot durable, protocole `.chk.next` → SQLite →
|
|
||||||
`.chk` sous verrou par tâche, et reprise sûre
|
|
||||||
- **Project Database v23** : overlay optique additif au-dessus de la fondation
|
|
||||||
v22 PASS / FROZEN ; profils de boîtier et d'objectif, configurations
|
|
||||||
body+lens+focale, affectations campagne/Capture et calibrations exactement
|
|
||||||
compatibles, sans inférence ni backfill — IMPLEMENTED / VALIDATED / REVIEWED
|
|
||||||
- **[Photo Quality Triage](docs/architecture/photo_quality_triage.md)** : métriques JPEG
|
|
||||||
- **[Calibration Bootstrap v1](docs/architecture/calibration_bootstrap.md)** :
|
|
||||||
import borné d'une calibration optimisée et traçable avant le Sparse SfM à
|
|
||||||
calibration connue — PASS / FROZEN ; ni
|
|
||||||
auto-calibration interne ni EXIF comme source de calibration scientifique
|
|
||||||
- **Exécution durable de campagne d'acquisition** : tâche générique à requête
|
|
||||||
typée immuable, confirmations `CALLER_EXPLICIT`, curseur et correspondance
|
|
||||||
tâche/groupe→Capture persistants ; un groupe S3-E par séquence, reprise par
|
|
||||||
la registry, la Queue et le Resource Governor existants
|
|
||||||
- **Sparse SfM Gates C/D/E** : géométrie calibrée, noyau incrémental et Bundle
|
|
||||||
Adjustment final par composante, tous PASS / FROZEN
|
|
||||||
- **Sparse SfM Gate F** : orchestration durable, runtime gouverné et publication
|
|
||||||
atomique, PASS / FROZEN
|
|
||||||
- **MVS-M1** : frontière externe OpenMVS v2.4.0
|
|
||||||
`InterfaceCOLMAP`/`DensifyPointCloud`, export COLMAP déterministe (OpenCV
|
|
||||||
undistortion, observations transformées et tracks réels), texte exporté en
|
|
||||||
flux et tracks indexés sans rescanner quadratiquement les observations ; espace
|
|
||||||
de travail privé neuf par invocation sous le staging appelant, sans réemploi ;
|
|
||||||
identité dense liée à la reconstruction de base, au jeu source, au
|
|
||||||
`calibration_scope_identity` historique, au binding numérique MVS, au backend
|
|
||||||
et aux paramètres ; `L3DMDID2` v2 (220 octets) et binding `L3DMCAL1` v1 ; PLY
|
|
||||||
OpenMVS binaire little-endian validé (en-tête <= 1 MiB en octets bruts,
|
|
||||||
LF/CRLF acceptés, CR seul malformé rejeté, ligne <= 64 KiB), fusionné en
|
|
||||||
mode 0 — PASS / FROZEN
|
|
||||||
- **Geometric Verification Model** : identité, masque d'inliers et modèle 3×3
|
|
||||||
persistants pour les policies Verifier v1/v2 historiques et v3 courante
|
|
||||||
- **Geometric Verifier v3** : Fundamental USAC/MAGSAC, reprise et lots resource-aware
|
|
||||||
- **Internal Parallelism + Compute Resources v1** : parallélisme interne borné,
|
|
||||||
sorties canoniques et admission Governor — PASS / FROZEN
|
|
||||||
- **Task Kind Registry** : identité métier durable et reconstruction runtime explicite
|
|
||||||
- **Recovery projet** : reprise automatique sélective et bornée des imports récupérables
|
|
||||||
- **Task Queue** : file FIFO avec sélection adaptative et backpressure
|
|
||||||
- **Hardware Profile** : détection des capacités matérielles
|
|
||||||
- **Resource Snapshot** : capture instantanée des ressources
|
|
||||||
- **Resource Governor** : arbitrage centralisé des budgets et réservations
|
|
||||||
- **TUI observatoire / centre de contrôle** : modèle de vue pur et borné,
|
|
||||||
observation coalescée, progression durable/ETA honnête, écrans Tasks,
|
|
||||||
Resources, Optique et SSD, avec ncurses exclusivement sur le thread principal
|
|
||||||
— CURRENT / VALIDATED OPERATIONAL
|
|
||||||
- **Contrôleur SSD externe optionnel** : frontière physique UDisks2/GDBus,
|
|
||||||
identité Drive+labels+UUIDs, drain sûr et capacités de contrôle exactes ; son
|
|
||||||
état physique est enregistré auprès du Governor, seul orchestrateur des
|
|
||||||
leases scratch de production — CURRENT / VALIDATED OPERATIONAL
|
|
||||||
|
|
||||||
### Intégration réelle validée
|
The current Project DB schema is **v25**.
|
||||||
|
|
||||||
Sony A6000 et Samsung S21 FE sont des preuves de validation de la chaîne
|
The current head is additive:
|
||||||
générique. Ils ne définissent ni l'identité produit, ni un profil caméra
|
|
||||||
hardcodé, ni une limite de CPU ou de dataset.
|
|
||||||
|
|
||||||
- **Intégration multi-campagne A6000 + S21 FE Engine Bay** : PASS — les plans
|
```text
|
||||||
réels A6000 (953 paires confirmées `CALLER_EXPLICIT`) et Samsung SM-G990B
|
v22 Selected scientific execution foundation
|
||||||
(3544 JPEG singleton) ont été validés dans deux ScanSets d'un même projet
|
v23 Generic optical-context overlay
|
||||||
temporaire, avec exécution durable, Governor/Queue et reprise sans Capture
|
v24 raw.develop.batch/1 persistence
|
||||||
dupliqué. Les campagnes réelles actuellement évaluées sont
|
v25 features.extract.batch/1 persistence
|
||||||
`CALIBRATION_UNAVAILABLE`, donc le Sparse SfM réel est
|
```
|
||||||
`BLOCKED_BY_KNOWN_CALIBRATION_DATA` : ce n'est ni un échec logiciel, ni un
|
|
||||||
rejet de qualité, ni une autorisation d'importer une pseudo-calibration. La
|
|
||||||
suite reste le pipeline scientifique aval, selon la
|
|
||||||
[roadmap canonique](docs/roadmap/roadmap.md).
|
|
||||||
|
|
||||||
### Plus tard / différé
|
Earlier schema versions remain valid historical contracts where their own documentation says so.
|
||||||
|
No migration silently reinterprets historical scientific identities.
|
||||||
|
|
||||||
- publication durable dense/mesh et consommation Task explicite du scratch
|
### Current production task inventory
|
||||||
SSD optionnel ;
|
|
||||||
- vidéo/keyframes et **Capture Guidance / Live Coverage** : analyse et viewer de
|
The production registry currently contains **16 Task kinds**.
|
||||||
couverture, suggestions de prises de vue puis assistance live, après
|
|
||||||
reconstruction mature ;
|
All production Tasks pass through the existing Task -> Queue -> Resource Governor execution model.
|
||||||
- exports et publication live ;
|
The Queue has one active callback at a time; Tasks may use bounded internal participants when their
|
||||||
- DAG général, pools multiples et parallélisme inter-tâches restent différés.
|
contract and measured scaling justify it.
|
||||||
|
|
||||||
|
### Resource policy
|
||||||
|
|
||||||
|
The canonical operational objective is:
|
||||||
|
|
||||||
|
```text
|
||||||
|
MAXIMUM SAFE USEFUL THROUGHPUT
|
||||||
|
SERIALISM_REQUIRES_PROOF
|
||||||
|
```
|
||||||
|
|
||||||
|
Lardon3D first preserves the interactive host reserve required for the desktop, Firefox, audio and
|
||||||
|
light interactive use. Safe and useful resources beyond that reserve belong to the active workload.
|
||||||
|
|
||||||
|
On the current validation host, the normal observed outcome is approximately:
|
||||||
|
|
||||||
|
```text
|
||||||
|
16 logical CPUs total
|
||||||
|
4 logical CPUs reserved for interactive host use
|
||||||
|
12 logical CPUs available to the compute pool
|
||||||
|
~3 GiB MemAvailable preserved as the hard RAM reserve
|
||||||
|
Radeon 780M UMA available to validated and useful GPU backends
|
||||||
|
```
|
||||||
|
|
||||||
|
These are **reference-host observations, not portable product constants**. The Resource Governor
|
||||||
|
derives usable capacity from the current host, affinity, topology, memory and pressure state.
|
||||||
|
|
||||||
|
A long-running CPU1 or batch1 path is acceptable only when serialism, a measured scaling knee,
|
||||||
|
memory, I/O, GPU execution or another concrete constraint justifies it. Per-item atomicity does not
|
||||||
|
imply cross-item serialization.
|
||||||
|
|
||||||
|
## Validated foundations
|
||||||
|
|
||||||
|
The following major foundations are implemented and validated at their documented boundaries:
|
||||||
|
|
||||||
|
- **Project / persistent lifecycle**
|
||||||
|
- **Import and ScanSet / Image Catalog**
|
||||||
|
- **Capture / Asset Provenance v1 — PASS / FROZEN**
|
||||||
|
- **Bounded acquisition discovery and campaign execution — PASS / FROZEN**
|
||||||
|
- **Photo Quality Triage / Acquisition Selection — PASS / FROZEN**
|
||||||
|
- **Selected Scientific Execution — PASS / FROZEN**
|
||||||
|
- **Feature Store v1/v2**
|
||||||
|
- ORB U8x32
|
||||||
|
- SIFT / RootSIFT F32x128
|
||||||
|
- bounded typed readers
|
||||||
|
- **Visual Index v1**
|
||||||
|
- **Candidate Pair generation**
|
||||||
|
- **Matcher v1**
|
||||||
|
- ORB CPU / validated Vulkan hot path
|
||||||
|
- SIFT / RootSIFT CPU
|
||||||
|
- **Geometric Verification Model**
|
||||||
|
- **Geometric Verifier v3**
|
||||||
|
- **Track Model / Track Builder v1 — PASS / FROZEN**
|
||||||
|
- **Sparse SfM Gates C/D/E/F/G — PASS / FROZEN**
|
||||||
|
- **Phase H v1 incremental reconstruction — PASS / FROZEN**
|
||||||
|
- **MVS-M1 external OpenMVS boundary — PASS / FROZEN**
|
||||||
|
- **Task Runtime / checkpoints / recovery**
|
||||||
|
- **Task Queue**
|
||||||
|
- **Task Kind Registry**
|
||||||
|
- **Resource Governor / Compute Governor v2**
|
||||||
|
- **Bounded internal parallelism — PASS / FROZEN**
|
||||||
|
- **ORB Vulkan asynchronous execution — PASS / FROZEN**
|
||||||
|
- **TUI runtime observatory / control center — CURRENT / VALIDATED OPERATIONAL**
|
||||||
|
- **Optional external SSD controller — CURRENT / VALIDATED OPERATIONAL**
|
||||||
|
- **Calibration Bootstrap v1 — PASS / FROZEN**
|
||||||
|
- **Calibration Science v1 — PASS / FROZEN**
|
||||||
|
- **Calibration Tooling v1 — PASS / FROZEN**
|
||||||
|
- **Calibration Solver Preflight v1 — PASS**
|
||||||
|
- **Project DB v24/v25 operational overlays — IMPLEMENTED / VALIDATED**
|
||||||
|
- raw.develop.batch/1 durable selected-execution path
|
||||||
|
- features.extract.batch/1 durable selected-execution path
|
||||||
|
|
||||||
|
## Real-data validation
|
||||||
|
|
||||||
|
Sony A6000 and Samsung S21 FE campaigns are validation evidence for the generic pipeline. They are
|
||||||
|
not product identities, hardcoded camera profiles, CPU limits or dataset-size limits.
|
||||||
|
|
||||||
|
### Real S21 Tracks
|
||||||
|
|
||||||
|
```text
|
||||||
|
REAL_S21_TRACKS=PASS/FROZEN
|
||||||
|
```
|
||||||
|
|
||||||
|
The retained real S21 proof validated the complete pre-SfM chain through Track Builder with the
|
||||||
|
compact Track memory model and deterministic restart semantics.
|
||||||
|
|
||||||
|
### Real A6000 pre-SfM
|
||||||
|
|
||||||
|
```text
|
||||||
|
REAL_A6000_PRE_SFM=PASS/FROZEN
|
||||||
|
```
|
||||||
|
|
||||||
|
The retained real A6000 proof uses the selected RAW-derived deterministic representation and
|
||||||
|
completed the pipeline through Geometric Verification and Tracks without replaying already acquired
|
||||||
|
upstream work.
|
||||||
|
|
||||||
|
Final retained counts:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Selected images 689
|
||||||
|
Feature Sets 689
|
||||||
|
Candidate Pairs 38,420
|
||||||
|
Match Results 38,420
|
||||||
|
Applicable GVRs 37,805
|
||||||
|
Verified GVRs 10,952
|
||||||
|
Rejected GVRs 26,853
|
||||||
|
Track Sets 1
|
||||||
|
Tracks 130,714
|
||||||
|
Track observations 318,944
|
||||||
|
```
|
||||||
|
|
||||||
|
The restart proof reused the existing Track Set without duplicating GVR mappings, Track observations
|
||||||
|
or Tracks.
|
||||||
|
|
||||||
|
The real A6000 proof intentionally stopped before:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Sparse SfM
|
||||||
|
Sparse reconstruction
|
||||||
|
Dense / MVS
|
||||||
|
multi-campaign fusion
|
||||||
|
```
|
||||||
|
|
||||||
|
### Calibration status of the historical real campaigns
|
||||||
|
|
||||||
|
The historical S21 and A6000 Engine Bay campaigns currently remain `CALIBRATION_UNAVAILABLE` for
|
||||||
|
the known-calibration Sparse SfM contract.
|
||||||
|
|
||||||
|
This is not a source failure, a quality rejection or permission to infer calibration from metadata.
|
||||||
|
No pseudo-calibration, silent interpolation or inferred calibration identity is allowed.
|
||||||
|
|
||||||
|
Therefore real Sparse SfM for those historical campaigns remains:
|
||||||
|
|
||||||
|
```text
|
||||||
|
BLOCKED_BY_KNOWN_CALIBRATION_DATA
|
||||||
|
```
|
||||||
|
|
||||||
|
Calibration Science v1 defines the protocol for future physically controlled calibration
|
||||||
|
acquisitions. Calibration Tooling v1 validates an already acquired Science v1 evidence bundle and
|
||||||
|
produces the bounded L3DCALB1 artifact; Calibration Bootstrap v1 imports that artifact. Neither
|
||||||
|
stage solves calibration internally or turns EXIF into scientific calibration.
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|
||||||
```text
|
```text
|
||||||
TUI / Projet
|
TUI / Project
|
||||||
↓
|
|
|
||||||
Task Queue bornée (un worker, ordre/backpressure)
|
v
|
||||||
↓
|
bounded Task Queue
|
||||||
Resource Governor (admission et réservation)
|
(one active callback)
|
||||||
↓
|
|
|
||||||
Task callback admis (parallélisme interne borné si prouvé)
|
v
|
||||||
↓
|
Resource Governor
|
||||||
Résultats atomiques / persistants
|
(admission and reservation)
|
||||||
↓
|
|
|
||||||
Viewer (consommation passive de snapshots)
|
v
|
||||||
|
admitted Task callback
|
||||||
|
(bounded internal participants when justified)
|
||||||
|
|
|
||||||
|
v
|
||||||
|
atomic / persistent scientific publication
|
||||||
|
|
|
||||||
|
v
|
||||||
|
passive snapshot consumers
|
||||||
|
(viewer remains future work)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Invariants fondamentaux
|
Core invariants:
|
||||||
|
|
||||||
- Aucun callback de tâche sans réservation active validée
|
- no Task callback starts without a valid active reservation;
|
||||||
- La Queue/runtime ne décide jamais des ressources
|
- the Queue does not own resource policy;
|
||||||
- Le Resource Governor est l'unique propriétaire des budgets
|
- the Resource Governor is the sole production resource authority;
|
||||||
- ncurses appartient exclusivement au thread principal
|
- ncurses remains owned by the main thread;
|
||||||
- Les estimations de ressources sont immuables
|
- Task estimates and installed sequence contracts remain immutable for their defined lifetime;
|
||||||
- Les buffers et files sont strictement bornés
|
- buffers, queues, files, threads, participants and temporary work remain bounded;
|
||||||
|
- owner-only durable publication does not imply serial preparation;
|
||||||
|
- swap, zram and external scratch never become admitted RAM;
|
||||||
|
- UMA GPU memory is charged exactly once against host memory.
|
||||||
|
|
||||||
### TUI opérationnelle
|
## Current TUI
|
||||||
|
|
||||||
La TUI sépare le modèle de vue pur du rendu ncurses. Son observateur copie au
|
The TUI is a validated operational observatory and control center.
|
||||||
plus 129 entrées Queue (64 pending, une active, 64 historiques) et coalesce les
|
|
||||||
captures hôte autour d'une seconde ; aucun scan DB ou `/proc` volumineux n'a
|
|
||||||
lieu par frame. La progression scientifique exacte provient seulement des
|
|
||||||
compteurs durables typés. Le taux EWMA et l'ETA restent « calcul » jusqu'à deux
|
|
||||||
intervalles positifs, excluent le préfixe repris et deviennent explicitement
|
|
||||||
indéterminés, stalled ou throttled lorsque l'évidence l'exige.
|
|
||||||
|
|
||||||
Les tailles supportées sont 100×30 et plus en vue complète, 72×20 en compacte
|
It provides bounded observation of:
|
||||||
de référence, et jusqu'au minimum 60×15 ; en dessous, seul « Terminal trop
|
|
||||||
petit » est affiché. Les couleurs ont toujours un équivalent textuel/bold/dim.
|
|
||||||
`F1` à `F7` ouvrent aide, projets, import, viewer futur, tâches, ressources et
|
|
||||||
optique. Le segment littéral `F10 SSD` reste visible à 60 colonnes et déclenche
|
|
||||||
uniquement l'action autorisée par le contrôleur. Pendant une saisie, seules
|
|
||||||
Enter, Échap et F10 sont actives ; pendant un import, seules `X` et F10 le sont,
|
|
||||||
et quitter/retour accueil sont explicitement désactivés.
|
|
||||||
|
|
||||||
Ouvrir, fermer ou changer de projet détruit et joint d'abord l'unique Queue,
|
- Project state;
|
||||||
callbacks terminaux inclus, puis ferme Project DB et recrée une Queue vide. Le
|
- Tasks and durable progress;
|
||||||
workflow optique utilise les alias metadata exacts, accepte normalement les
|
- Resource Governor state;
|
||||||
objectifs manuels sans EXIF, crée des profils/configurations immuables et exige
|
- CPU / RAM / swap / GPU information;
|
||||||
une affectation/sélection de calibration explicite et exactement compatible.
|
- optical profiles and explicit calibration selection;
|
||||||
|
- optional SSD state and safe control actions.
|
||||||
|
|
||||||
## Pipeline cible
|
The ncurses renderer and input handling remain on the main thread. Runtime observation is bounded
|
||||||
|
and coalesced; the renderer does not scan Project DB or `/proc` extensively per frame.
|
||||||
|
|
||||||
|
The validated layout supports:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
Acquisitions
|
full layout >= 100x30
|
||||||
→ catalogue
|
reference compact 72x20
|
||||||
→ features
|
minimum supported 60x15
|
||||||
→ index visuel
|
|
||||||
→ paires candidates
|
|
||||||
→ matching
|
|
||||||
→ vérification géométrique
|
|
||||||
→ tracks / SfM
|
|
||||||
→ dense
|
|
||||||
→ mesh
|
|
||||||
→ consolidation
|
|
||||||
→ export
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Below the minimum, only the bounded terminal-too-small fallback is rendered.
|
||||||
|
|
||||||
|
The optical workflow supports electronic metadata aliases and manual lenses without EXIF. Missing,
|
||||||
|
ambiguous or incompatible calibration remains visible and is never silently guessed.
|
||||||
|
|
||||||
|
## Target pipeline
|
||||||
|
|
||||||
|
```text
|
||||||
|
acquisition
|
||||||
|
-> catalog / Capture / provenance
|
||||||
|
-> quality selection
|
||||||
|
-> selected scientific representation
|
||||||
|
-> features
|
||||||
|
-> visual index
|
||||||
|
-> candidate pairs
|
||||||
|
-> matching
|
||||||
|
-> geometric verification
|
||||||
|
-> tracks
|
||||||
|
-> Sparse SfM
|
||||||
|
-> incremental / multi-campaign reconstruction
|
||||||
|
-> dense / MVS
|
||||||
|
-> mesh
|
||||||
|
-> refinement
|
||||||
|
-> texturing
|
||||||
|
-> consolidation
|
||||||
|
-> export
|
||||||
|
```
|
||||||
|
|
||||||
|
## Planned product areas
|
||||||
|
|
||||||
|
The following areas remain future work and must not be confused with current implementation:
|
||||||
|
|
||||||
|
- durable dense / mesh publication;
|
||||||
|
- full Dense/MVS orchestration;
|
||||||
|
- mesh refinement and texturing;
|
||||||
|
- final export workflow;
|
||||||
|
- viewer;
|
||||||
|
- offline coverage analysis;
|
||||||
|
- suggested supplementary viewpoints;
|
||||||
|
- live camera localization;
|
||||||
|
- live coverage overlay;
|
||||||
|
- A6000 live acquisition integration;
|
||||||
|
- S21 live acquisition integration;
|
||||||
|
- capture guidance;
|
||||||
|
- video ingestion and deterministic keyframe extraction;
|
||||||
|
- explicit Task-owned scratch consumers;
|
||||||
|
- general DAG / dependency scheduling.
|
||||||
|
|
||||||
|
The final product contracts for these areas are being defined separately before implementation.
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
### Architecture
|
### Architecture
|
||||||
- [Vue d'ensemble](docs/architecture/overview.md)
|
|
||||||
|
- [Architecture overview](docs/architecture/overview.md)
|
||||||
- [Runtime](docs/architecture/runtime.md)
|
- [Runtime](docs/architecture/runtime.md)
|
||||||
- [Système de tâches](docs/architecture/task_system.md)
|
- [Task system](docs/architecture/task_system.md)
|
||||||
- [Registry des types de tâches](docs/architecture/task_kind_registry.md)
|
- [Task Kind Registry](docs/architecture/task_kind_registry.md)
|
||||||
- [File de tâches](docs/architecture/task_queue.md)
|
- [Task Queue](docs/architecture/task_queue.md)
|
||||||
- [Resource Governor](docs/architecture/resource_governor.md)
|
- [Resource Governor](docs/architecture/resource_governor.md)
|
||||||
- [Parallélisme interne borné](docs/architecture/internal_parallelism.md)
|
- [Bounded internal parallelism](docs/architecture/internal_parallelism.md)
|
||||||
- [Pipeline sensible aux ressources](docs/architecture/resource_aware_pipeline.md)
|
- [Resource-aware pipeline](docs/architecture/resource_aware_pipeline.md)
|
||||||
- [Intégration Queue/runtime ↔ Governor](docs/architecture/scheduler_resource_integration.md)
|
- [Queue / runtime / Governor integration](docs/architecture/scheduler_resource_integration.md)
|
||||||
- [Pipeline de reconstruction](docs/architecture/reconstruction_pipeline.md)
|
- [Reconstruction pipeline](docs/architecture/reconstruction_pipeline.md)
|
||||||
- [Persistance](docs/architecture/persistence.md)
|
- [Persistence](docs/architecture/persistence.md)
|
||||||
- [Base de données projet](docs/architecture/project_database.md)
|
- [Project Database](docs/architecture/project_database.md)
|
||||||
- [Feature Store](docs/architecture/feature_store.md)
|
- [Feature Store](docs/architecture/feature_store.md)
|
||||||
- [Precision Feature Pipeline v1A](docs/architecture/precision_feature_pipeline.md)
|
- [Precision Feature Pipeline v1A](docs/architecture/precision_feature_pipeline.md)
|
||||||
- [Visual Index](docs/architecture/visual_index.md)
|
- [Visual Index](docs/architecture/visual_index.md)
|
||||||
|
|
@ -202,36 +328,59 @@ Acquisitions
|
||||||
- [Geometric Verification](docs/architecture/geometric_verification.md)
|
- [Geometric Verification](docs/architecture/geometric_verification.md)
|
||||||
- [Geometric Verifier](docs/architecture/geometric_verifier.md)
|
- [Geometric Verifier](docs/architecture/geometric_verifier.md)
|
||||||
- [Track Model](docs/architecture/tracks.md)
|
- [Track Model](docs/architecture/tracks.md)
|
||||||
- [Sparse SfM / Triangulation — Gate A](docs/architecture/sparse_sfm.md)
|
- [Track Builder](docs/architecture/track_builder.md)
|
||||||
- [Backend Vulkan ORB](docs/architecture/vulkan_matcher.md)
|
- [Sparse SfM](docs/architecture/sparse_sfm.md)
|
||||||
|
- [Calibration Bootstrap v1](docs/architecture/calibration_bootstrap.md)
|
||||||
|
- [Calibration Science v1](docs/architecture/calibration_science_v1.md)
|
||||||
|
- [Calibration Solver Preflight v1](docs/architecture/calibration_solver_preflight_v1.md)
|
||||||
|
- [Photo Quality Triage](docs/architecture/photo_quality_triage.md)
|
||||||
|
- [Vulkan ORB Matcher](docs/architecture/vulkan_matcher.md)
|
||||||
- [Viewer](docs/architecture/viewer.md)
|
- [Viewer](docs/architecture/viewer.md)
|
||||||
- [Resource Boundary — No New Resource Subsystem](docs/architecture/resource_boundary.md)
|
- [Resource Boundary](docs/architecture/resource_boundary.md)
|
||||||
- [Audit global de maintenance — état consolidé](docs/architecture/global_maintenance_audit.md)
|
|
||||||
- [Revue historique des fondations](docs/architecture/foundation_review.md)
|
### Historical audit records
|
||||||
|
|
||||||
|
- [Global Maintenance Audit](docs/architecture/global_maintenance_audit.md)
|
||||||
|
- [Foundation Review](docs/architecture/foundation_review.md)
|
||||||
|
|
||||||
|
Historical audit records preserve the state and evidence of their checkpoint. Older schema versions,
|
||||||
|
Task counts or resource measurements inside them must not be mechanically modernized.
|
||||||
|
|
||||||
### Concepts
|
### Concepts
|
||||||
|
|
||||||
- [Scan Sets](docs/concepts/scan_sets.md)
|
- [Scan Sets](docs/concepts/scan_sets.md)
|
||||||
- [Index visuel](docs/concepts/visual_index.md)
|
- [Visual Index](docs/concepts/visual_index.md)
|
||||||
- [Matching et tracks](docs/concepts/matching_and_tracks.md)
|
- [Matching and Tracks](docs/concepts/matching_and_tracks.md)
|
||||||
- [Couches de reconstruction](docs/concepts/reconstruction_layers.md)
|
- [Reconstruction Layers](docs/concepts/reconstruction_layers.md)
|
||||||
- [Contraintes géométriques](docs/concepts/geometric_constraints.md)
|
- [Geometric Constraints](docs/concepts/geometric_constraints.md)
|
||||||
|
|
||||||
|
Some concept documents are explicitly historical or superseded. Their status header determines
|
||||||
|
whether they are current authority.
|
||||||
|
|
||||||
|
### Development
|
||||||
|
|
||||||
### Développement
|
|
||||||
- [Build](docs/development/build.md)
|
- [Build](docs/development/build.md)
|
||||||
- [Tests](docs/development/testing.md)
|
- [Testing](docs/development/testing.md)
|
||||||
- [Concurrence](docs/development/concurrency.md)
|
- [Concurrency](docs/development/concurrency.md)
|
||||||
- [Profil de performance de la machine cible](docs/performance/target_hardware.md)
|
- [Validation-host performance profile](docs/performance/target_hardware.md)
|
||||||
|
|
||||||
|
### Roadmap and audits
|
||||||
|
|
||||||
### Roadmap
|
|
||||||
- [Roadmap](docs/roadmap/roadmap.md)
|
- [Roadmap](docs/roadmap/roadmap.md)
|
||||||
|
- [Documentation Inventory Audit](docs/audits/documentation_inventory.md)
|
||||||
|
|
||||||
## Build rapide
|
## Build
|
||||||
|
|
||||||
|
Meson and Ninja are the canonical build path.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
CC=clang meson setup build --wipe
|
CC=clang meson setup build
|
||||||
meson compile -C build -j8
|
meson compile -C build
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Build parallelism should use safe host capacity. Do not treat a historical `-j8` or the current
|
||||||
|
reference-host result of approximately `-j12` as a portable constant.
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|
@ -239,57 +388,41 @@ meson test -C build --print-errorlogs
|
||||||
git diff --check
|
git diff --check
|
||||||
```
|
```
|
||||||
|
|
||||||
Pour les changements sensibles à la mémoire ou à la concurrence, ajouter ASan/UBSan et TSan.
|
For memory-, lifetime- or concurrency-sensitive changes, use the applicable ASan/UBSan and TSan
|
||||||
|
validation described in [Testing](docs/development/testing.md) and preserve documented third-party
|
||||||
|
sanitizer qualifications.
|
||||||
|
|
||||||
## Statut
|
## Repository language
|
||||||
|
|
||||||
Lardon3D est en développement actif. La persistance des tâches, le catalogue,
|
The canonical language for repository documentation, agent contracts and production source comments
|
||||||
le Feature Store multipasse, le Visual Index ORB, Candidate Pair Generator,
|
is English.
|
||||||
Matcher v1, Geometric Verification Model et Geometric Verifier Fundamental v3
|
|
||||||
sont implémentés. Le runtime Feature + Matcher + Verifier emploie des tâches durables,
|
|
||||||
de petits lots, le Resource Governor interactif et un hot path Vulkan ORB exact avec
|
|
||||||
fallback CPU. La feasibility Vulkan SIFT/RootSIFT a été rejetée ; ces deux matchers
|
|
||||||
restent sur OpenCV L2. Track Model/Builder, les primitives géométriques Gate C,
|
|
||||||
le noyau Sparse SfM incrémental Gate D et le Bundle Adjustment final Gate E sont
|
|
||||||
implémentés et validés. L'orchestration Sparse SfM Gate F est PASS / FROZEN ;
|
|
||||||
l'intégration Governor Gate G est **PASS / FROZEN**. MVS-M1 est **PASS / FROZEN** :
|
|
||||||
une frontière OpenMVS v2.4.0 externe et bornée, sans publication dense durable
|
|
||||||
ni MVS complet. Les sources sont liées par SHA-256
|
|
||||||
complet, borné à 1 GiB par fichier régulier (sans budget agrégé de dataset) ; les
|
|
||||||
octets source restent un binding distinct de l'identité dense. Celle-ci lie la
|
|
||||||
reconstruction de base, le jeu d'images source, le `calibration_scope_identity`
|
|
||||||
historique, le binding numérique de calibration MVS `L3DMCAL1` v1, le backend et
|
|
||||||
les paramètres dans `L3DMDID2` v2 (220 octets). Chaque appel utilise un espace de
|
|
||||||
travail privé neuf sous le staging appelant, sans réemploi d'une scène,
|
|
||||||
profondeur, cache ou sortie antérieure. Le DAG, le viewer et les autres étapes
|
|
||||||
denses restent des tickets séparés planifiés.
|
|
||||||
La fondation Project DB v22, `raw.develop` et Calibration Bootstrap v1 reste
|
|
||||||
**PASS / FROZEN**. La tête courante v23 ajoute seulement le contexte optique
|
|
||||||
générique : neuf tables, migration transactionnelle sans backfill, objectifs
|
|
||||||
manuels sans EXIF, configurations multiples par campagne et sélection de
|
|
||||||
calibration exactement compatible. Les migrations de copies réelles S21/A6000
|
|
||||||
ont conservé leurs lignes scientifiques et laissé l'overlay vide. Les campagnes
|
|
||||||
réelles S21 et A6000 Engine Bay sont
|
|
||||||
`CALIBRATION_UNAVAILABLE` par non-identifiabilité scientifique des données de
|
|
||||||
calibration connues ; le Sparse SfM réel reste
|
|
||||||
`BLOCKED_BY_KNOWN_CALIBRATION_DATA`, sans pseudo-calibration ni import inféré.
|
|
||||||
Le Resource Governor ne constitue pas un Resource System générique : il reste
|
|
||||||
l'unique propriétaire des budgets et le seul orchestrateur des leases scratch
|
|
||||||
de production. Le contrôleur SSD UDisks2 est une frontière physique séparée,
|
|
||||||
jamais un second scheduler ou Governor. Les seize Task kinds actuels ne
|
|
||||||
consomment encore aucun scratch : l'espace disponible est une capacité
|
|
||||||
observable, pas un usage fabriqué, et scratch/swap ne deviennent jamais de la
|
|
||||||
RAM. La TUI/F10 et cette intégration sont validées opérationnellement. L'audit
|
|
||||||
global est désormais `GLOBAL_MAINTENANCE_AUDIT=PASS/FROZEN` : après les builds
|
|
||||||
Clang frais portable/Vulkan, les suites normales 64/64 et 65/65, les sanitizers
|
|
||||||
applicables, TSan et les contrôles ABI, l'unique revue finale indépendante
|
|
||||||
GPT-5.6 SOL/ULTRA a conclu PASS sans finding bloquant. Elle a indépendamment
|
|
||||||
rejoué le build portable, la suite 64/64, une matrice focalisée 15/15 et les
|
|
||||||
76/76 probes strictes C17/C++17 couvrant 19 headers publics modifiés/nouveaux,
|
|
||||||
ainsi que l'ABI, les négatifs de seams production, le SHA du manifest GV et le
|
|
||||||
diff-check. Ce gel clôt la gate de maintenance ; il n'exécute pas à lui seul la
|
|
||||||
tranche scientifique suivante.
|
|
||||||
|
|
||||||
## Licence
|
User-interface language is a separate product/localization concern.
|
||||||
|
|
||||||
Projet privé - Tous droits réservés.
|
## Status
|
||||||
|
|
||||||
|
Lardon3D is under active development.
|
||||||
|
|
||||||
|
The persistent pre-SfM pipeline is implemented through Tracks, the Sparse SfM C-G capability is
|
||||||
|
implemented and frozen at its documented boundaries, Phase H v1 is frozen, and MVS-M1 provides the
|
||||||
|
validated external OpenMVS boundary. Full real known-calibration Sparse SfM, dense publication,
|
||||||
|
mesh, texturing, viewer and live capture guidance remain future work.
|
||||||
|
|
||||||
|
The global maintenance checkpoint remains:
|
||||||
|
|
||||||
|
```text
|
||||||
|
global-maintenance-2026-09-01
|
||||||
|
```
|
||||||
|
|
||||||
|
The later real A6000 pre-SfM checkpoint is:
|
||||||
|
|
||||||
|
```text
|
||||||
|
real-a6000-pre-sfm-2026-09-02
|
||||||
|
```
|
||||||
|
|
||||||
|
Future reviews should preserve historical checkpoint meaning and review only the relevant delta
|
||||||
|
unless concrete evidence requires reopening an unchanged FROZEN boundary.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Lardon3D is licensed under the MIT License.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue