Files

9.5 KiB

Améliorations Interface Graphique - Recommandations

Date: 2 mars 2026
Fichier: Pseudonymisation_Gui_V5.py

Analyse Actuelle

L'interface est bien conçue avec :

  • Design moderne et épuré
  • Thème système natif (sv_ttk)
  • Vue unique en 2 étapes
  • Feedback visuel (progression, résultats)
  • Support VLM optionnel

Améliorations Recommandées

1. Afficher les Métriques de Qualité 🎯

Problème: L'utilisateur ne voit pas la qualité de l'anonymisation (Precision/Recall).

Solution: Ajouter une carte de métriques dans la section résultats :

# Après les 3 cartes existantes (fichiers, données masquées, erreurs)
self._stat_quality = self._make_stat_card(
    stats_row, "100%", "qualité (F1-Score)", 
    CLR_GREEN, CLR_GREEN_LIGHT, 3
)

Calcul: Utiliser evaluation/quality_evaluator.py si annotations disponibles, sinon afficher "N/A".

2. Indicateur de Fuites 🔒

Problème: Pas de feedback sur les fuites potentielles détectées.

Solution: Ajouter un indicateur de sécurité :

# Badge "0 fuite détectée" ou "⚠️ X fuites potentielles"
self._leak_badge = tk.Label(
    self._results_frame,
    text="🔒 0 fuite détectée",
    font=self._f_body_bold,
    bg=CLR_GREEN_LIGHT, fg=CLR_GREEN,
    padx=12, pady=6
)

Calcul: Utiliser evaluation/leak_scanner.py sur les textes anonymisés.

3. Temps de Traitement et Vitesse ⏱️

Problème: Pas d'info sur les performances.

Solution: Afficher le temps total et la vitesse moyenne :

# Dans la section résultats
self._perf_label = tk.Label(
    self._results_frame,
    text="Traité en 2m 15s (1.2s/document)",
    font=self._f_small,
    bg=CLR_BG, fg=CLR_TEXT_SECONDARY
)

4. Prévisualisation Avant/Après 👁️

Problème: L'utilisateur ne peut pas voir un exemple d'anonymisation.

Solution: Ajouter un bouton "Voir un exemple" qui ouvre une fenêtre avec :

  • Texte original (extrait)
  • Texte anonymisé
  • Liste des PII détectés
self.btn_preview = tk.Button(
    self._results_frame,
    text="Voir un exemple d'anonymisation",
    font=self._f_button,
    bg=CLR_PRIMARY, fg="white",
    command=self._show_preview
)

5. Options Avancées (Optionnel) ⚙️

Problème: Pas de contrôle sur les paramètres d'anonymisation.

Solution: Ajouter un bouton "Options avancées" qui ouvre une fenêtre modale avec :

  • ☑️ Activer/désactiver VLM
  • ☑️ Activer/désactiver filtre hôpital
  • ☑️ Générer PDF vectoriel (en plus du raster)
  • ☑️ Activer validation post-anonymisation
  • 🎚️ Seuil de confiance NER (slider)

6. Rapport d'Audit Téléchargeable 📄

Problème: Pas de rapport consolidé des résultats.

Solution: Générer un rapport HTML/PDF avec :

  • Statistiques globales
  • Liste des fichiers traités
  • Métriques de qualité
  • Temps de traitement
  • Fuites détectées (si applicable)
self.btn_report = tk.Button(
    self._results_frame,
    text="Télécharger le rapport d'audit",
    font=self._f_button,
    bg=CLR_TEXT_SECONDARY, fg="white",
    command=self._generate_report
)

7. Gestion des Erreurs Améliorée ⚠️

Problème: Les erreurs sont juste comptées, pas détaillées.

Solution: Ajouter un bouton "Voir les erreurs" qui liste :

  • Nom du fichier
  • Type d'erreur
  • Message d'erreur
  • Action suggérée

8. Mode Batch avec Pause/Reprise ⏸️

Problème: Impossible de mettre en pause un traitement long.

Solution: Ajouter des boutons :

  • ⏸️ Pause
  • ▶️ Reprendre
  • ⏹️ Arrêter

9. Historique des Traitements 📊

Problème: Pas de trace des traitements précédents.

Solution: Ajouter un onglet "Historique" avec :

  • Date/heure
  • Dossier traité
  • Nombre de fichiers
  • Métriques
  • Bouton "Retraiter"

10. Drag & Drop 🖱️

Problème: L'utilisateur doit cliquer pour choisir un dossier.

Solution: Permettre le glisser-déposer d'un dossier sur la zone de sélection.

self._folder_zone.drop_target_register(DND_FILES)
self._folder_zone.dnd_bind('<<Drop>>', self._on_drop)

Priorités d'Implémentation

Priorité 1 (Impact Élevé, Effort Faible)

  1. Temps de traitement et vitesse
  2. Indicateur de fuites
  3. Gestion des erreurs améliorée

Priorité 2 (Impact Élevé, Effort Moyen)

  1. Métriques de qualité
  2. Prévisualisation avant/après
  3. Rapport d'audit téléchargeable

Priorité 3 (Impact Moyen, Effort Élevé)

  1. ⚙️ Options avancées
  2. ⏸️ Mode batch avec pause/reprise
  3. 📊 Historique des traitements
  4. 🖱️ Drag & drop

Mockup Proposé (Section Résultats)

┌─────────────────────────────────────────────────────────────┐
│ Résultats                                                    │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │   125    │  │  12,450  │  │    2     │  │   100%   │   │
│  │ fichiers │  │  données │  │ erreurs  │  │ qualité  │   │
│  │ traités  │  │ masquées │  │          │  │(F1-Score)│   │
│  └──────────┘  └──────────┘  └──────────┘  └──────────┘   │
│                                                              │
│  🔒 0 fuite détectée                                        │
│  ⏱️ Traité en 3m 45s (1.8s/document)                       │
│                                                              │
│  ┌────────────────────────────────────────────────────┐    │
│  │ Ouvrir le dossier de résultats                     │    │
│  └────────────────────────────────────────────────────┘    │
│                                                              │
│  ┌────────────────────────────────────────────────────┐    │
│  │ Voir un exemple d'anonymisation                    │    │
│  └────────────────────────────────────────────────────┘    │
│                                                              │
│  ┌────────────────────────────────────────────────────┐    │
│  │ Télécharger le rapport d'audit                     │    │
│  └────────────────────────────────────────────────────┘    │
│                                                              │
│  Voir le journal détaillé ▼                                 │
│                                                              │
└─────────────────────────────────────────────────────────────┘

Code Exemple : Indicateur de Fuites

def _check_leaks(self, output_dir: Path) -> int:
    """Vérifie les fuites dans les textes anonymisés."""
    from evaluation.leak_scanner import LeakScanner
    
    scanner = LeakScanner()
    leak_count = 0
    
    for txt_file in output_dir.glob("*.pseudonymise.txt"):
        with open(txt_file, 'r', encoding='utf-8') as f:
            content = f.read()
        report = scanner.scan_text(content)
        leak_count += len(report.leaks)
    
    return leak_count

def _update_leak_indicator(self, leak_count: int):
    """Met à jour l'indicateur de fuites."""
    if leak_count == 0:
        self._leak_badge.configure(
            text="🔒 0 fuite détectée",
            bg=CLR_GREEN_LIGHT, fg=CLR_GREEN
        )
    else:
        self._leak_badge.configure(
            text=f"⚠️ {leak_count} fuite{'s' if leak_count > 1 else ''} potentielle{'s' if leak_count > 1 else ''}",
            bg=CLR_RED_LIGHT, fg=CLR_RED
        )

Accessibilité

  • Contraste des couleurs conforme WCAG AA
  • Tailles de police lisibles
  • ⚠️ Ajouter des labels ARIA pour les lecteurs d'écran
  • ⚠️ Support navigation clavier (Tab, Enter, Espace)
  • ⚠️ Tooltips informatifs sur tous les boutons

Tests Utilisateur Suggérés

  1. Tester avec un utilisateur non-technique
  2. Mesurer le temps pour comprendre l'interface
  3. Vérifier la compréhension des métriques
  4. Valider l'utilité des fonctionnalités proposées

Conclusion

L'interface actuelle est solide. Les améliorations prioritaires sont :

  1. Indicateur de fuites (sécurité)
  2. Temps de traitement (feedback)
  3. Métriques de qualité (confiance)

Ces 3 ajouts simples augmenteraient significativement la valeur perçue et la confiance de l'utilisateur.