diff --git a/README.md b/README.md index a8b6c947..2e5a78f2 100644 --- a/README.md +++ b/README.md @@ -1 +1,267 @@ -noop \ No newline at end of file +# GeoIntel + +GeoIntel ondersteunt een gesynchroniseerde tweeschermwerkruimte: de kaart blijft +maximaal zichtbaar op het hoofdscherm terwijl analyses, kwaliteitsbewijs en +resultaten live in een tweede venster staan. Zie +[`docs/DUAL_DISPLAY_WORKFLOW.md`](docs/DUAL_DISPLAY_WORKFLOW.md). + +
+
+
Evidence-first GeoAI voor België en de Belgische Noordzee.
+ +GeoIntel is een kaartgerichte GeoAI-workbench waarin officiële databronnen, +ruimtelijke analyse, PyTorch-computervisie, QA/QC en export samenkomen. Het +platform bewaart niet alleen een resultaat, maar ook de bron, ruimtelijke +context, modelversie en het bewijs waarmee dat resultaat gecontroleerd kan +worden. + +De release ondersteunt heel België en de juridisch onderscheiden Belgische +Noordzeezones. Regionale bronnen blijven herkenbaar: GRB, PICC, UrbIS en +maritieme datasets worden niet voorgesteld alsof ze dezelfde semantiek, +resolutie of actualiteit hebben. + +> **Data → ruimtelijke verwerking → AI-resultaat → kwaliteitsbewijs → export** + + + +## Waarom GeoIntel? + +Veel geoportalen tonen lagen. GeoIntel ondersteunt een volledige, +controleerbare analyseketen: + +- selecteer een officiële grens of teken een eigen Area of Interest; +- combineer vector-, raster- en historische bronnen met expliciete dekking; +- voer GIS- en CUDA-versnelde beeldanalyse uit; +- vergelijk kandidaatresultaten met referentiedata; +- inspecteer false positives, false negatives, overlap en provenance; +- exporteer alleen wat als reproduceerbaar resultaat is vastgelegd. + +Mol en de Kempen blijven de gouden regressiegebieden. De productgrens is heel +België plus de juridisch benoemde Belgische maritieme zones. + +## Product in beeld + +De onderstaande screenshots zijn rechtstreeks vastgelegd op de actuele +Unraid-productieomgeving. De gastmodus toont een beperkte, alleen-lezen +demowerkruimte; operatorfuncties en nieuwe analyses blijven afgeschermd. + +### Interactieve projectketen + +De landingspagina vertaalt de technische keten naar vier interactieve +schakels. De illustratie reageert op selectie, bronnen, analyse en bewijs en +respecteert automatisch `prefers-reduced-motion`. + + + + + +### Kaart als werkruimte + +De kaart blijft het primaire werkblad. Thema, broncontext, selectie en +resultaten zijn vanuit dezelfde ruimtelijke context bereikbaar. + + + +### Kwaliteit vóór resultaat + +QA/QC is een eerste-klas workflow. Bewaarde controles koppelen scores aan +objectbewijs, kandidaat- en referentielagen en technische provenance. + + + +### Mobiele werkruimte + +Dezelfde kaartgerichte workflow blijft bruikbaar op een smal scherm. Thema's, +selectieacties en de kaart worden gestapeld zonder de actieve werkcontext te +verbergen. + + + +## Kernmogelijkheden + +| Domein | Mogelijkheden | +| --- | --- | +| Werkgebieden | Officiële grenzen, vrije AOI-selectie, clipping en buffering | +| Bronnen | GeoJSON, vector, raster, orthofoto, historische en regionale catalogi | +| GIS | CRS-normalisatie, spatial joins, rasterstatistiek, tile- en selectieanalyse | +| GeoAI | PyTorch, Ultralytics YOLO en SAM-compatibele abstrahering | +| Tijd | Immutable DatasetVersions en vergelijking van ruimtelijke snapshots | +| QA/QC | Precision, recall, F1, IoU, false-positive/-negative evidence en reviews | +| Export | Reproduceerbare GeoJSON- en artefactexports met provenance | +| Runtime | DockerMan-native Unraid-container met PostGIS, backend en frontend | + +## Architectuur + +```mermaid +flowchart LR + UI["React + MapLibre workbench"] --> API["FastAPI contracts"] + API --> GIS["GeoPandas / Shapely / Rasterio"] + API --> JOBS["Job-queue in PostgreSQL"] + JOBS --> AI["PyTorch / YOLO / SAM"] + GIS --> DB[("PostgreSQL + PostGIS")] + AI --> DB + DB --> QA["QA/QC + provenance"] + QA --> UI + QA --> EXPORT["GeoJSON / artifacts"] +``` + +De publieke endpoints volgen [docs/API_CONTRACTS.md](docs/API_CONTRACTS.md). +PostGIS en de persistentieregels volgen +[docs/DATABASE_IMPLEMENTATION_PLAN.md](docs/DATABASE_IMPLEMENTATION_PLAN.md). + +## Stack + +- **Frontend:** React 18, TypeScript, MapLibre GL, Lucide en Vite +- **Backend:** FastAPI en Python +- **Spatial:** GeoPandas, Shapely, Rasterio, PyProj en GDAL +- **AI:** PyTorch, Ultralytics YOLO en SAM-compatibele segmentatie +- **Data:** PostgreSQL/PostGIS, lokale artefactopslag en immutable versions +- **Jobs:** job-tabel in PostgreSQL met achtergrondworkers in het API-proces +- **Deployment:** één DockerMan-native Unraid-container + +## Lokaal starten + +Vereisten: Python 3.11+, Node 20.19+ of 22.12+ en PostgreSQL/PostGIS. + +```bash +python -m pip install -e backend/.[dev] +cd frontend +npm install +npm run start +``` + +Voor de volledige lokale stack: + +```bash +docker compose up --build +``` + +Open daarna `http://localhost:1202`. + +### Gastdemo + +Met `GEOINTEL_GUEST_ACCESS_ENABLED=true` biedt de toegangspagina een +kortlevende, alleen-lezen demosessie. Die toont uitsluitend het ingestelde +demoproject en bewaard kwaliteitsbewijs; dit is geen multi-user- of +tenantisolatie. + +## NVIDIA/CUDA + +Productie-AI gebruikt de NVIDIA GPU van de server. De runtime faalt gesloten +wanneer CUDA vereist maar niet beschikbaar is; ontbrekende modelconfiguratie +wordt als `not_configured` getoond en nooit als geslaagde inferentie. + +De actuele productieproef draait met een CUDA-build van PyTorch op een NVIDIA +GeForce RTX 4080 SUPER. Corpus-, kalibratie-, test- en pure-background-gates +blijven gescheiden: een experimentele label- of modelvariant wordt pas actief +nadat alle toepasselijke kwaliteitscontroles slagen. + +Controleer GPU-zichtbaarheid in de container met: + +```bash +docker exec geointel nvidia-smi +``` + + + +## Training en labelkwaliteit + +GeoIntel behandelt officiële gebouwgrondvlakken niet automatisch als perfecte +daklabels. Voor trainingsdata worden temporele geldigheid, ruimtelijke leakage, +bronklasse, zichtbaarheid en pure-background-gedrag afzonderlijk gecontroleerd. +Een directe polygon-overlay maakt bovendien zichtbaar of de officiële geometrie +op het bijbehorende luchtbeeld aansluit vóór omzetting naar YOLO-boxen. + +De huidige V66 Vlaamse uitbreiding blijft kandidaatdata. Automatische SAM2- en +edge-alignmentproeven zijn afgewezen omdat ze nog vegetatie, wegen of schaduwen +als dak konden selecteren. Die resultaten zijn dus niet getraind of gepromoveerd. + +## Portfolio case study + +De presentatieklare case study combineert productvraag, interface, PyTorch- en +NVIDIA-keten, architectuur en resultaten in één visueel document: + +- [GeoIntel case study PDF](output/pdf/geointel-case-study.pdf) +- [Donkere cover in hoge resolutie](frontend/public/portfolio/geointel-dark-case-study-cover.png) +- [Architectuurvisual](docs/assets/portfolio/geointel-architecture.png) + +De PDF kan reproduceerbaar opnieuw worden opgebouwd met: + +```bash +python scripts/create_portfolio_case_study.py +``` + +## Kwaliteitscontrole + +```bash +# Backend +python -m compileall backend/app +cd backend && python -m pytest + +# Frontend +cd frontend +npm run typecheck +npm run test:unit +npm run build +``` + +Een wijziging is pas afgerond wanneer de toepasselijke criteria uit +[docs/DEFINITION_OF_DONE.md](docs/DEFINITION_OF_DONE.md) aantoonbaar zijn +afgevinkt. + +## Tower / Unraid deploy + +De canonieke checkout op Tower staat in `/mnt/user/appdata/geointel`. Gebruik +de releasewrapper; de productiecontainer wordt niet met een alternatieve +Compose-checkout vervangen. + +```powershell +powershell -ExecutionPolicy Bypass -File scripts/deploy_tower.ps1 ` + -RemoteHost root@