Problème résolu: - Le workflow cliquait au mauvais endroit (200-500px de distance) - Les seuils de matching étaient trop permissifs Corrections apportées: - CLIP: MAX_DISTANCE=120px, MIN_SCORE=0.55, MIN_COMBINED=0.5 - Template zonée: MAX_DISTANCE=150px - Template global: MAX_DISTANCE=150px (était 500px) - Ajout de logs détaillés pour debug des candidats rejetés - Désactivation de l'overlay debug (polling intensif inutile) Fichiers modifiés: - intelligent_executor.py: Seuils stricts + logs - execute.py: Logique d'exécution modes basic/intelligent/debug - ui_detection_service.py: Backend UI-DETR-1 - App.tsx: Overlay désactivé - ExecutionOverlay.tsx: URLs API corrigées Documentation: - docs/REFERENCE_VISION_RPA.md: Guide complet de référence Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
7.6 KiB
7.6 KiB
VWB Vision RPA - Document de Référence
Session du 24 Janvier 2026
1. RÉSUMÉ DU PROBLÈME INITIAL
Le workflow "Onlyoffice" (12 étapes) cliquait au mauvais endroit :
- Symptôme : Gedit s'ouvrait au lieu de OnlyOffice
- Cause : Les seuils de matching étaient trop permissifs (acceptait des matches à 200+ pixels de distance)
- Impact : Le workflow continuait même après un clic erroné
2. ARCHITECTURE DU SYSTÈME DE VISION
┌─────────────────────────────────────────────────────────────┐
│ PIPELINE DE MATCHING │
├─────────────────────────────────────────────────────────────┤
│ 1. UI-DETR-1 (rfdetr) │
│ → Détecte tous les éléments UI à l'écran │
│ → Retourne des bounding boxes │
│ │
│ 2. CLIP (OpenCLIP) │
│ → Compare l'ancre avec chaque élément détecté │
│ → Score de similarité sémantique (0-1) │
│ → Pondéré par la distance à la position originale │
│ │
│ 3. Template Matching (OpenCV) │
│ → Fallback si CLIP échoue │
│ → Comparaison pixel à pixel │
│ → Zoned (100-200px) puis Global │
│ │
│ 4. Static Fallback │
│ → Dernier recours : coordonnées originales │
└─────────────────────────────────────────────────────────────┘
3. SEUILS CRITIQUES (VALEURS ACTUELLES)
Dans intelligent_executor.py - Méthode CLIP
# === SEUILS ÉQUILIBRÉS ===
MAX_DISTANCE_PX = 120 # Rejeter tout élément > 120px de la position originale
MIN_CLIP_SCORE = 0.55 # Score CLIP minimum requis
MIN_COMBINED_SCORE = 0.5 # Score combiné minimum pour accepter un match
Dans intelligent_executor.py - Template Matching Zoné
MAX_TEMPLATE_DISTANCE = 150 # Dans zoned_template_match()
Dans intelligent_executor.py - Template Matching Global
MAX_GLOBAL_DISTANCE = 150 # Dans find_and_click()
4. FICHIERS MODIFIÉS
| Fichier | Modifications |
|---|---|
services/intelligent_executor.py |
Seuils CLIP, limites de distance, logs détaillés |
api_v3/execute.py |
Logique d'exécution avec modes basic/intelligent/debug |
services/ui_detection_service.py |
Backend UI-DETR-1 |
frontend_v4/src/App.tsx |
Overlay debug désactivé |
frontend_v4/src/components/ExecutionOverlay.tsx |
URLs API corrigées |
catalog_routes_v2_vlm.py |
Intégration VLM Ollama |
5. MODES D'EXÉCUTION
| Mode | Comportement | Vitesse | Utilisation |
|---|---|---|---|
| basic | Coordonnées statiques uniquement | Rapide | Écran identique à l'enregistrement |
| intelligent | Vision (CLIP + Template) | Lent | Interface peut changer |
| debug | Vision + logs détaillés | Lent | Débogage |
6. ORDRE DES STRATÉGIES DE MATCHING
1. CLIP (UI-DETR-1 + embeddings CLIP)
├── Si trouvé avec confiance ≥ 0.5 et distance ≤ 120px → UTILISER
└── Sinon → Fallback
2. Template Matching Zoné (100px)
├── Si trouvé avec confiance ≥ 0.7 et distance ≤ 150px → UTILISER
└── Sinon → Élargir
3. Template Matching Zoné Élargi (200px)
├── Si trouvé avec confiance ≥ 0.6 et distance ≤ 150px → UTILISER
└── Sinon → Global
4. Template Matching Global
├── Si trouvé avec confiance ≥ 0.75 et distance ≤ 150px → UTILISER
└── Sinon → Static Fallback
5. Static Fallback
└── Utiliser les coordonnées originales de l'enregistrement
7. PROBLÈMES COURANTS ET SOLUTIONS
Problème : "Aucun candidat valide (tous rejetés par seuils stricts)"
Cause : Les seuils CLIP sont trop stricts ou UI-DETR-1 ne détecte pas l'élément Solution :
- Baisser
MIN_CLIP_SCORE(ex: 0.50) - Augmenter
MAX_DISTANCE_PX(ex: 150)
Problème : Clic au mauvais endroit
Cause : Template matching trouve un faux positif loin de la cible Solution :
- Réduire
MAX_TEMPLATE_DISTANCEetMAX_GLOBAL_DISTANCE - Vérifier que l'ancre est bien distinctive
Problème : Workflow très lent
Cause :
- Modèles rechargés à chaque étape
- Ollama sur CPU
- Multiples fallbacks Solutions :
- Utiliser mode
basicpour workflows stables - Configurer Ollama pour GPU
- Implémenter un cache des modèles
Problème : Ollama sur CPU au lieu de GPU
Vérification : ollama ps
Solution :
# Vérifier CUDA
nvidia-smi
# Relancer Ollama avec GPU
CUDA_VISIBLE_DEVICES=0 ollama serve
8. MODÈLES UTILISÉS
| Modèle | Utilisation | Emplacement |
|---|---|---|
| UI-DETR-1 (rfdetr) | Détection éléments UI | /home/dom/ai/rpa_vision_v3/models/ui-detr-1/model.pth |
| CLIP (ViT-B-32) | Similarité sémantique | OpenCLIP (téléchargé automatiquement) |
| qwen2.5vl:3b | Analyse IA (vision) | Ollama |
Modèles Ollama recommandés pour meilleure qualité :
qwen2.5vl:7b- Meilleur que 3bllama3.2-vision:11b- Encore meilleurmistral:7b- Pour texte pur (pas de vision)
9. COMMANDES UTILES
# Démarrer le backend VWB
cd /home/dom/ai/rpa_vision_v3/visual_workflow_builder/backend
./venv/bin/python app.py
# Vérifier le port 5001
lsof -i :5001
# Voir les logs d'exécution
tail -f /tmp/vwb_backend.log | grep -E "(Execute|Vision|CLIP)"
# Vérifier le status d'une exécution
curl -s http://localhost:5001/api/v3/execute/status | python3 -m json.tool
# Lister les modèles Ollama
ollama list
# Voir si Ollama utilise le GPU
ollama ps
10. RÉSULTAT FINAL
Le workflow "Onlyoffice" (12 étapes) fonctionne maintenant :
| Étape | Action | Méthode | Status |
|---|---|---|---|
| 1 | Clic menu | CLIP 99.8% | ✅ |
| 2 | Saisie "onlyoffice" | - | ✅ |
| 3 | Clic OnlyOffice | static_fallback | ✅ |
| 4 | Clic docx | CLIP 99.2% | ✅ |
| 5 | Attente 5s | - | ✅ |
| 6 | Saisie texte | - | ✅ |
| 7 | Analyse IA | qwen2.5vl:3b | ✅ |
| 8 | Clic menu | CLIP 98.9% | ✅ |
| 9 | Saisie "gedit" | - | ✅ |
| 10 | Clic gedit | static_fallback | ✅ |
| 11 | Attente 10s | - | ✅ |
| 12 | Coller résultat IA | - | ✅ |
11. PROCHAINES AMÉLIORATIONS SUGGÉRÉES
- Cache des modèles : Charger UI-DETR-1 et CLIP une seule fois au démarrage
- Ollama GPU : Configurer pour utiliser le GPU
- Seuils adaptatifs : Ajuster automatiquement selon le contexte
- Vérification post-action : Confirmer que l'action a eu l'effet attendu
- Mode hybride : Basic par défaut, vision uniquement si échec
12. CONTACT / HISTORIQUE
- Date de résolution : 24 Janvier 2026
- Durée de débogage : ~2 heures
- Fichiers sauvegardés :
/home/dom/ai/rpa_vision_v3/backups_24janv.2026_vision_fix/
Document généré automatiquement - Ne pas modifier manuellement