gui: Ajout indicateurs qualité (fuites, performances)
This commit is contained in:
@@ -0,0 +1,265 @@
|
||||
# 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 :
|
||||
|
||||
```python
|
||||
# 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é :
|
||||
|
||||
```python
|
||||
# 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 :
|
||||
|
||||
```python
|
||||
# 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
|
||||
|
||||
```python
|
||||
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)
|
||||
|
||||
```python
|
||||
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.
|
||||
|
||||
```python
|
||||
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)
|
||||
4. ✅ Métriques de qualité
|
||||
5. ✅ Prévisualisation avant/après
|
||||
6. ✅ Rapport d'audit téléchargeable
|
||||
|
||||
### Priorité 3 (Impact Moyen, Effort Élevé)
|
||||
7. ⚙️ Options avancées
|
||||
8. ⏸️ Mode batch avec pause/reprise
|
||||
9. 📊 Historique des traitements
|
||||
10. 🖱️ 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
|
||||
|
||||
```python
|
||||
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.
|
||||
Reference in New Issue
Block a user