make building results authority-first after V74 evaluation
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s

This commit is contained in:
Jens
2026-08-10 04:44:29 +02:00
parent 98188e0a44
commit 4b0cab3ce5
27 changed files with 13067 additions and 6 deletions
+1
View File
@@ -580,6 +580,7 @@ function WorkbenchApp({ username, accessMode, loggingOut, onLogout }: WorkbenchA
prepareAndRunDetection: (datasetId) => prepareAndRunDetection(datasetId, 'yolo-configured'),
compareDetectionRunWithReference: (analysisRunId, referenceDatasetId, iouThreshold) =>
compareDetectionRunWithReference(analysisRunId, referenceDatasetId, false, iouThreshold),
loadQualityEvidence: (qualityCheckId) => loadQualityEvidenceGeoJson(qualityCheckId),
onAnalysisReady: () => {
setMapContentMode('analysis')
setMapLayerVisible(true)
+9 -5
View File
@@ -2759,13 +2759,17 @@ export function MapWorkspace({
{orthophotoAnalysisQuality ? (
<>
<div className="geo-image-quality-metrics" aria-label="Gemeten kwaliteit van de beeldanalyse">
<div><span>Kandidaten</span><strong>{orthophotoAnalysisDetectionCount?.toLocaleString('nl-BE') ?? 'n.v.t.'}</strong></div>
<div><span>Strikte matches</span><strong>{orthophotoAnalysisQuality.matches.toLocaleString('nl-BE')}</strong></div>
<div><span>Precision</span><strong>{formatPercentage(orthophotoAnalysisQuality.precision)}</strong></div>
<div><span>Herkenningsgraad</span><strong>{formatPercentage(orthophotoAnalysisQuality.recall)}</strong></div>
<div><span>AI-kandidaten</span><strong>{orthophotoAnalysisDetectionCount?.toLocaleString('nl-BE') ?? 'n.v.t.'}</strong></div>
<div><span>GRB-bevestigd</span><strong>{orthophotoAnalysisQuality.matches.toLocaleString('nl-BE')}</strong></div>
<div><span>AI-only, onbevestigd</span><strong>{orthophotoAnalysisQuality.false_positives.toLocaleString('nl-BE')}</strong></div>
<div><span>GRB, gemist door AI</span><strong>{orthophotoAnalysisQuality.false_negatives.toLocaleString('nl-BE')}</strong></div>
<div><span>AI-precision</span><strong>{formatPercentage(orthophotoAnalysisQuality.precision)}</strong></div>
<div><span>AI-herkenningsgraad</span><strong>{formatPercentage(orthophotoAnalysisQuality.recall)}</strong></div>
<div><span>F1</span><strong>{formatPercentage(orthophotoAnalysisQuality.f1_score)}</strong></div>
<div><span>Fout / gemist</span><strong>{orthophotoAnalysisQuality.false_positives.toLocaleString('nl-BE')} / {orthophotoAnalysisQuality.false_negatives.toLocaleString('nl-BE')}</strong></div>
</div>
<p className="geo-image-quality-context">
GRB is hier de gezagsbron voor geregistreerde gebouwen. AI-only vormen zijn onderzoeksvoorstellen en worden niet als officieel resultaat voorgesteld. De bewijslaag op de kaart toont elke categorie afzonderlijk.
</p>
{orthophotoAnalysisQuality.box_to_footprint_diagnostics ? (
<p className="geo-image-quality-context">
Rechthoekcontrole: {orthophotoAnalysisQuality.box_to_footprint_diagnostics.envelope_matches.toLocaleString('nl-BE')} matches,
@@ -32,6 +32,7 @@ interface MapOrthophotoAnalysisOptions {
referenceDatasetId: string,
iouThreshold: number,
) => Promise<DetectionQaResult | null>
loadQualityEvidence: (qualityCheckId: string) => Promise<unknown>
onAnalysisReady: () => void
}
@@ -79,6 +80,7 @@ export function useMapOrthophotoAnalysis({
loadProjectData,
prepareAndRunDetection,
compareDetectionRunWithReference,
loadQualityEvidence,
onAnalysisReady,
}: MapOrthophotoAnalysisOptions) {
const [stage, setStage] = useState<MapOrthophotoAnalysisStage>('idle')
@@ -180,9 +182,12 @@ export function useMapOrthophotoAnalysis({
MAP_BUILDING_QA_IOU_THRESHOLD,
)
setLastQuality(quality)
if (quality) {
await loadQualityEvidence(quality.quality_check_id)
}
setStatus(
quality
? `Analyse klaar: ${detection.detection_count.toLocaleString('nl-BE')} kandidaten, ${quality.matches.toLocaleString('nl-BE')} gekoppeld aan GRB. Precision ${formatQualityPercentage(quality.precision)}, recall ${formatQualityPercentage(quality.recall)}.`
? `Controle klaar: ${quality.matches.toLocaleString('nl-BE')} door GRB bevestigde AI-kandidaten, ${quality.false_positives.toLocaleString('nl-BE')} onbevestigde AI-kandidaten en ${quality.false_negatives.toLocaleString('nl-BE')} officiële GRB-gebouwen gemist door AI. AI-precision ${formatQualityPercentage(quality.precision)}, herkenningsgraad ${formatQualityPercentage(quality.recall)}.`
: `Analyse klaar: ${detection.detection_count.toLocaleString('nl-BE')} kandidaten; kwaliteitscontrole kon niet afronden.`,
)
} else {