feat: 'Filtro falsi positivi' preset user-friendly (era verify_ncc)

Rinomina il parametro tecnico verify_threshold in un preset semantico
che operatore/cliente capisce senza leggere docs:

  off      -> 0.00 (tutti i match shape-based passano)
  leggero  -> 0.20 (tollera illuminazione/riflessi)
  medio    -> 0.35 (consigliato, default)
  forte    -> 0.50 (massima selettivita, scarta mismatch intensita)

UI: dropdown etichettato 'Filtro falsi positivi (verifica intensita colori)'
accanto a precisione angolare. Override tecnico (numerico) resta in
sezione Avanzate.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-24 10:52:26 +02:00
parent 1671a151da
commit 2bca68d700
3 changed files with 27 additions and 5 deletions
+12 -4
View File
@@ -210,6 +210,15 @@ PRECISION_ANGLE_STEP = {
"preciso": 2.0,
}
# "Filtro falsi positivi" = mapping semantico del verify NCC threshold.
# Un operatore sceglie il livello di rigore, non un numero astratto.
FILTRO_FP_MAP = {
"off": 0.0, # disabilitato: mantieni tutti i match shape-based
"leggero": 0.20, # tollera variazioni intensità/illuminazione forti
"medio": 0.35, # default bilanciato (consigliato)
"forte": 0.50, # scarta match con intensità molto diversa dal template
}
class SimpleMatchParams(BaseModel):
model_id: str
@@ -219,7 +228,8 @@ class SimpleMatchParams(BaseModel):
simmetria: str = "nessuna" # chiave SYMMETRY_TO_ANGLE_MAX
scala: str = "fissa" # chiave SCALE_PRESETS
precisione: str = "normale" # chiave PRECISION_ANGLE_STEP
min_score: float = 0.70
filtro_fp: str = "medio" # chiave FILTRO_FP_MAP
min_score: float = 0.65
max_matches: int = 25
@@ -270,9 +280,7 @@ def _simple_to_technical(
"min_score": p.min_score,
"max_matches": p.max_matches,
"nms_radius": 0,
# Verify NCC più permissivo per match con variazione intensità
# (foro su sfondo variabile, parti di oggetto ecc.)
"verify_threshold": 0.25,
"verify_threshold": FILTRO_FP_MAP.get(p.filtro_fp, 0.35),
}