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

5.9 KiB

🔍 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 :

# 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 :

# 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 :

    find /opt/rpa_vision_v3/data/training/sessions -type d -name "sess_*"
    
  2. Si oui, vérifier les screenshots :

    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 :

# 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.