diff --git a/pm2d/web/server.py b/pm2d/web/server.py index 7cf3fcc..4a29468 100644 --- a/pm2d/web/server.py +++ b/pm2d/web/server.py @@ -217,6 +217,7 @@ class MatchResp(BaseModel): find_time: float num_variants: int annotated_id: str + diag: dict | None = None # CC: diagnostica pipeline (drop reasons) class TuneParams(BaseModel): @@ -521,6 +522,7 @@ def match(p: MatchParams): ) for m_ in matches], train_time=t_train, find_time=t_find, num_variants=n, annotated_id=ann_id, + diag=m.get_last_diag() if hasattr(m, "get_last_diag") else None, ) @@ -596,6 +598,7 @@ def match_simple(p: SimpleMatchParams): ) for mt in matches], train_time=t_train, find_time=t_find, num_variants=n, annotated_id=ann_id, + diag=m.get_last_diag() if hasattr(m, "get_last_diag") else None, ) @@ -769,6 +772,7 @@ def match_recipe(p: RecipeMatchParams): ) for mt in matches], train_time=0.0, find_time=t_find, num_variants=len(m.variants), annotated_id=ann_id, + diag=m.get_last_diag() if hasattr(m, "get_last_diag") else None, ) diff --git a/pm2d/web/static/app.js b/pm2d/web/static/app.js index b4bd931..49c76d9 100644 --- a/pm2d/web/static/app.js +++ b/pm2d/web/static/app.js @@ -336,6 +336,7 @@ async function doMatchRecipe() { document.getElementById("t-find").textContent = `${data.find_time.toFixed(2)}s`; document.getElementById("t-var").textContent = data.num_variants; document.getElementById("t-match").textContent = data.matches.length; + renderDiag(data.diag, data.matches.length); setStatus(`${data.matches.length} match trovati (ricetta ${state.active_recipe})`); } @@ -409,6 +410,7 @@ async function doMatch() { document.getElementById("t-find").textContent = `${data.find_time.toFixed(2)}s`; document.getElementById("t-var").textContent = data.num_variants; document.getElementById("t-match").textContent = data.matches.length; + renderDiag(data.diag, data.matches.length); setStatus(`${data.matches.length} match trovati${hasAdv ? " (avanzato)" : ""}`); } @@ -436,6 +438,61 @@ function setStatus(s) { } // ---------- Init ---------- +// ---------- CC: Diagnostica match ---------- +function renderDiag(diag, n_matches) { + const el = document.getElementById("diag-content"); + if (!diag) { + el.innerHTML = 'Diagnostica non disponibile'; + return; + } + const dropTotal = (diag.drop_ncc_low || 0) + (diag.drop_min_score_post_avg || 0) + + (diag.drop_recall_low || 0) + (diag.drop_bbox_out_of_scene || 0) + + (diag.drop_nms_iou || 0); + // Hint contestuali se 0 match + let hint = ""; + if (n_matches === 0) { + if (diag.n_after_pre_nms === 0) { + hint = `