fix(replay): réactivation pré-check OCR avec calibrage chirurgical
- Flag RPA_ENABLE_TEXT_PRECHECK défaut true (vs false pendant prépa démo) - radius_px 200 → 280 (englobe textes longs type "Synthèse Urgences") - min_token_ratio 0.60 → 0.50 (tolère onglets fragmentés par OCR) - Commentaire historique restructuré avec procédure troubleshooting - Docstring synchronisée avec valeur effective Audit complet : docs/AUDIT_CONTROLES_DEBRANCHES_2026-05-08.md Réactive contrôle #3 sur 5 identifiés (les 4 autres restent désactivés pour aujourd'hui — décision chirurgicale 1 par 1). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2243,10 +2243,10 @@ def _validate_text_at_position(
|
||||
expected_text: str,
|
||||
screen_width: int,
|
||||
screen_height: int,
|
||||
radius_px: int = 200,
|
||||
radius_px: int = 280,
|
||||
) -> tuple:
|
||||
"""Pré-check sémantique : OCR sur une zone autour de (x_pct, y_pct) et
|
||||
vérifie que `expected_text` y est présent (substring ou fuzzy 60%).
|
||||
vérifie que `expected_text` y est présent (substring ou fuzzy 50%).
|
||||
|
||||
Retourne (is_valid: bool, observed_text: str, elapsed_ms: float).
|
||||
|
||||
@@ -2282,7 +2282,7 @@ def _validate_text_at_position(
|
||||
results = reader.readtext(np.array(crop))
|
||||
observed = " ".join(r[1] for r in results if r and len(r) >= 2)
|
||||
elapsed_ms = (time.time() - t0) * 1000
|
||||
is_valid = _text_match_fuzzy(expected_text, observed, min_token_ratio=0.60)
|
||||
is_valid = _text_match_fuzzy(expected_text, observed, min_token_ratio=0.50)
|
||||
return is_valid, observed, elapsed_ms
|
||||
except Exception as e:
|
||||
logger.warning("[REPLAY] _validate_text_at_position erreur (%s) — pas de blocage", e)
|
||||
|
||||
Reference in New Issue
Block a user