Files
rpa_vision_v3/docs/REFERENCE_VISION_RPA.md
Dom f04f156144 fix(vision): Corriger les seuils CLIP/Template pour éviter les clics erronés
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>
2026-01-24 02:15:04 +01:00

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_DISTANCE et MAX_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 basic pour 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 3b
  • llama3.2-vision:11b - Encore meilleur
  • mistral: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

  1. Cache des modèles : Charger UI-DETR-1 et CLIP une seule fois au démarrage
  2. Ollama GPU : Configurer pour utiliser le GPU
  3. Seuils adaptatifs : Ajuster automatiquement selon le contexte
  4. Vérification post-action : Confirmer que l'action a eu l'effet attendu
  5. 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