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)
- ✅ Temps de traitement et vitesse
- ✅ Indicateur de fuites
- ✅ Gestion des erreurs améliorée
Priorité 2 (Impact Élevé, Effort Moyen)
- ✅ Métriques de qualité
- ✅ Prévisualisation avant/après
- ✅ Rapport d'audit téléchargeable
Priorité 3 (Impact Moyen, Effort Élevé)
- ⚙️ Options avancées
- ⏸️ Mode batch avec pause/reprise
- 📊 Historique des traitements
- 🖱️ 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
- Tester avec un utilisateur non-technique
- Mesurer le temps pour comprendre l'interface
- Vérifier la compréhension des métriques
- Valider l'utilité des fonctionnalités proposées
Conclusion
L'interface actuelle est solide. Les améliorations prioritaires sont :
- Indicateur de fuites (sécurité)
- Temps de traitement (feedback)
- Métriques de qualité (confiance)
Ces 3 ajouts simples augmenteraient significativement la valeur perçue et la confiance de l'utilisateur.