Files
rpa_vision_v3/docs/archive/misc/DIAGNOSTIC_SCREENSHOTS.md
Dom a27b74cf22 v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution
- Frontend v4 accessible sur réseau local (192.168.1.40)
- Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard)
- Ollama GPU fonctionnel
- Self-healing interactif
- Dashboard confiance

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:23:51 +01:00

196 lines
5.9 KiB
Markdown

# 🔍 Diagnostic - Screenshots Manquants
**Date**: 7 janvier 2026
**Problème**: Les screenshots ne sont pas stockés après l'upload
---
## 📊 Situation Actuelle
### ✅ Ce qui Fonctionne
1. **Upload réussi** : Session uploadée avec succès (HTTP 200)
2. **Déchiffrement OK** : Le mot de passe de chiffrement est synchronisé
3. **JSON sauvegardé** : `/opt/rpa_vision_v3/data/training/sessions/2026-01-07/session_sess_20260107T182507_3a3709d4.json`
4. **Screen states créés** : 8+ fichiers dans `/opt/rpa_vision_v3/data/training/screen_states/2026-01-07/`
### ❌ Le Problème
**Screenshots manquants** :
- Le JSON référence 16 screenshots : `"relative_path": "shots/shot_0001.png"` à `shot_0016.png`
- Le répertoire `/opt/rpa_vision_v3/data/screenshots/` existe mais est **VIDE**
- Aucun fichier `.png` trouvé dans `/opt/rpa_vision_v3/data/`
---
## 🔍 Analyse du Flux
### Flux Actuel (api_upload.py)
```
1. Réception ZIP chiffré → /data/training/uploads/sess_*.enc
2. Déchiffrement → /data/training/uploads/sess_*.zip
3. Extraction ZIP → /data/training/sessions/sess_*/
├── sess_*/sess_*.json
└── sess_*/shots/shot_*.png ← Screenshots ici temporairement
4. Chargement RawSession depuis JSON
5. StorageManager.save_raw_session() → /data/training/sessions/2026-01-07/session_*.json
⚠️ Ne copie QUE le JSON, PAS les screenshots
6. Nettoyage ? → Répertoire d'extraction supprimé ?
```
### Résultat
- Le JSON est sauvegardé avec organisation par date ✅
- Les screenshots restent dans le répertoire d'extraction temporaire ❌
- Le répertoire d'extraction est probablement nettoyé après ❌
- **Perte des screenshots** ❌
---
## 🔧 Solutions Possibles
### Solution 1 : Modifier StorageManager pour Copier les Screenshots
**Avantage** : Solution propre, centralisée
**Inconvénient** : Nécessite modification du code core
**Implémentation** :
```python
# Dans StorageManager.save_raw_session()
def save_raw_session(self, session: RawSession, session_id: str, screenshots_dir: Optional[Path] = None):
# Sauvegarder JSON (existant)
date_path = self._get_date_path("sessions")
json_path = date_path / f"session_{session_id}.json"
# ... save JSON ...
# NOUVEAU : Copier les screenshots
if screenshots_dir and screenshots_dir.exists():
screenshots_dest = self.base_path / "screenshots" / session_id
screenshots_dest.mkdir(parents=True, exist_ok=True)
for screenshot in session.screenshots:
src = screenshots_dir / screenshot.relative_path
if src.exists():
dest = screenshots_dest / src.name
shutil.copy2(src, dest)
# Mettre à jour le chemin relatif dans session
screenshot.relative_path = f"{session_id}/{src.name}"
```
### Solution 2 : Modifier api_upload.py pour Copier Avant StorageManager
**Avantage** : Pas de modification du core
**Inconvénient** : Logique dupliquée
**Implémentation** :
```python
# Dans api_upload.py après extraction
extract_dir = SESSIONS_DIR / session_id
with zipfile.ZipFile(zip_path, 'r') as zf:
zf.extractall(extract_dir)
# NOUVEAU : Copier screenshots vers /data/screenshots
screenshots_src = extract_dir / session_id / "shots"
if screenshots_src.exists():
screenshots_dest = Path("data/screenshots") / session_id
screenshots_dest.mkdir(parents=True, exist_ok=True)
shutil.copytree(screenshots_src, screenshots_dest, dirs_exist_ok=True)
```
### Solution 3 : Ne PAS Supprimer le Répertoire d'Extraction
**Avantage** : Simple, pas de code à changer
**Inconvénient** : Duplication des données, espace disque
**Implémentation** :
- Conserver le répertoire `/data/training/sessions/sess_*/`
- Les screen_states référencent déjà le bon chemin relatif
- Mettre à jour les chemins dans le JSON si nécessaire
---
## 🎯 Recommandation pour le POC/MVP
**Pour la démo investisseurs (court terme)** :
**Solution 3** : Ne pas nettoyer le répertoire d'extraction
**Avantages** :
- Aucune modification de code nécessaire
- Rapide à implémenter
- Screenshots accessibles immédiatement
- Réversible
**Actions** :
1. Vérifier si le nettoyage est déjà désactivé
2. Si actif, commenter le code de nettoyage dans api_upload.py
3. Tester avec une nouvelle session
**Pour la production (moyen terme)** :
**Solution 1** : Modifier StorageManager proprement
---
## 📝 Vérifications à Faire
1. **Vérifier si le répertoire d'extraction existe** :
```bash
find /opt/rpa_vision_v3/data/training/sessions -type d -name "sess_*"
```
2. **Si oui, vérifier les screenshots** :
```bash
find /opt/rpa_vision_v3/data/training/sessions/sess_* -name "*.png"
```
3. **Si non, modifier le code pour les préserver**
---
## 🔍 Tests de Validation
Après correction, vérifier :
```bash
# 1. Lancer l'agent et capturer une session
cd /home/dom/ai/rpa_vision_v3/agent_v0 && ./run.sh
# 2. Vérifier que les screenshots sont sauvegardés
ls -lh /opt/rpa_vision_v3/data/screenshots/sess_*/shots/
# OU (selon solution choisie)
ls -lh /opt/rpa_vision_v3/data/training/sessions/sess_*/shots/
# 3. Vérifier la cohérence JSON <> fichiers
python3 -c "
import json
with open('/opt/rpa_vision_v3/data/training/sessions/2026-01-07/session_*.json') as f:
session = json.load(f)
print(f\"Screenshots dans JSON: {len(session['screenshots'])}\")
"
# Compter les fichiers PNG réels
find /opt/rpa_vision_v3/data -name 'shot_*.png' | wc -l
```
---
## 💡 Impact pour la Démo
**Critique pour** :
- ✅ Démonstration visuelle du système
- ✅ Validation de la capture complète
- ✅ Analyse UI/UX par les investisseurs
- ✅ Preuve de fonctionnement end-to-end
**Sans screenshots** :
- ❌ Impossible de montrer ce que l'agent a capturé
- ❌ Pas de validation visuelle des workflows
- ❌ Moins convaincant pour les investisseurs
---
## 🚀 Prochaine Étape
Choisir une solution et l'implémenter avant la démo.