310 lines
7.8 KiB
Markdown
310 lines
7.8 KiB
Markdown
# đź SystĂšme de Rejeu de TĂąches - ImplĂ©mentation ComplĂšte
|
|
|
|
## đŻ Objectif
|
|
|
|
Permettre de **rejouer automatiquement des tĂąches apprises** en utilisant la reconnaissance visuelle pour localiser les Ă©lĂ©ments, mĂȘme si l'interface a changĂ©.
|
|
|
|
## â
Ce qui a été implémenté
|
|
|
|
### 1. Moteur de Rejeu Intelligent (`TaskReplayEngine`)
|
|
|
|
**Fichier**: `geniusia2/core/task_replay.py`
|
|
|
|
#### Fonctionnalités principales :
|
|
|
|
- â
**Chargement de tùches** depuis les profils sauvegardés
|
|
- â
**Recherche visuelle** d'éléments avec embeddings CLIP
|
|
- â
**Exécution d'actions** adaptées à la position trouvée
|
|
- â
**Monitoring en temps réel** avec callbacks
|
|
- â
**Gestion des erreurs** avec retry automatique
|
|
|
|
#### Architecture :
|
|
|
|
```python
|
|
TaskReplayEngine
|
|
âââ replay_task() # Rejeu basique
|
|
âââ replay_task_with_monitoring() # Rejeu avec callbacks
|
|
âââ list_available_tasks() # Liste des tĂąches
|
|
âââ _find_element_visually() # Recherche par vision
|
|
âââ _search_similar_regions() # Recherche par grille
|
|
âââ _execute_action_at_location() # ExĂ©cution d'action
|
|
```
|
|
|
|
### 2. Recherche Visuelle par Grille
|
|
|
|
Le systÚme divise l'écran en grille (4x4 par défaut) et :
|
|
|
|
1. **Capture** chaque région
|
|
2. **GénÚre** un embedding CLIP pour chaque région
|
|
3. **Compare** avec l'embedding cible
|
|
4. **Retourne** les meilleures correspondances
|
|
|
|
```python
|
|
# Exemple de recherche
|
|
regions = await _search_similar_regions(
|
|
screenshot,
|
|
target_embedding,
|
|
grid_size=4
|
|
)
|
|
|
|
# Résultat : liste triée par similarité
|
|
[
|
|
{"x": 640, "y": 360, "similarity": 0.89, "bbox": [...]},
|
|
{"x": 320, "y": 180, "similarity": 0.72, "bbox": [...]},
|
|
...
|
|
]
|
|
```
|
|
|
|
### 3. Adaptation aux Variations d'Interface
|
|
|
|
Le systĂšme s'adapte automatiquement :
|
|
|
|
| Variation | Solution |
|
|
|-----------|----------|
|
|
| **Position différente** | Recherche visuelle localise l'élément |
|
|
| **Taille différente** | Utilise le centre de la région trouvée |
|
|
| **Style différent** | L'embedding CLIP capture la sémantique |
|
|
| **ĂlĂ©ment non trouvĂ©** | Retry avec dĂ©lai (3 tentatives max) |
|
|
|
|
### 4. Types d'Actions Supportées
|
|
|
|
```python
|
|
# Click
|
|
{"action_type": "click", "x": 640, "y": 360}
|
|
|
|
# Type
|
|
{"action_type": "type", "text": "Hello World"}
|
|
|
|
# Scroll
|
|
{"action_type": "scroll", "direction": "down", "amount": 3}
|
|
|
|
# Drag
|
|
{"action_type": "drag", "start_x": 100, "start_y": 100, "end_x": 200, "end_y": 200}
|
|
```
|
|
|
|
### 5. Script de Test Interactif
|
|
|
|
**Fichier**: `test_task_replay.py`
|
|
|
|
Permet de :
|
|
- â
Lister toutes les tĂąches disponibles
|
|
- â
Choisir une tĂąche Ă rejouer
|
|
- â
Voir le rejeu en temps réel avec monitoring
|
|
- â
Afficher les résultats détaillés
|
|
|
|
```bash
|
|
python3 test_task_replay.py
|
|
```
|
|
|
|
### 6. Documentation ComplĂšte
|
|
|
|
**Fichier**: `geniusia2/core/TASK_REPLAY_README.md`
|
|
|
|
Contient :
|
|
- Architecture détaillée
|
|
- Exemples d'utilisation
|
|
- Configuration
|
|
- Gestion des erreurs
|
|
- Limitations et améliorations futures
|
|
|
|
## đ Flux de Rejeu
|
|
|
|
```
|
|
1. Charger la tĂąche
|
|
âââ Lire metadata.json
|
|
âââ Charger signatures.pkl
|
|
|
|
2. Pour chaque action :
|
|
âââ Capturer l'Ă©cran actuel
|
|
âââ Rechercher l'Ă©lĂ©ment visuellement
|
|
â âââ Diviser en grille
|
|
â âââ GĂ©nĂ©rer embeddings
|
|
â âââ Trouver meilleure correspondance
|
|
âââ VĂ©rifier seuil de similaritĂ© (0.75)
|
|
âââ ExĂ©cuter l'action Ă la position trouvĂ©e
|
|
âââ Attendre dĂ©lai (0.5s)
|
|
|
|
3. Retourner résultats
|
|
âââ SuccĂšs global
|
|
âââ Actions exĂ©cutĂ©es
|
|
âââ DĂ©tails par Ă©tape
|
|
```
|
|
|
|
## đ Format des RĂ©sultats
|
|
|
|
```json
|
|
{
|
|
"task_id": "task_fc1d3e52",
|
|
"success": true,
|
|
"total_actions": 3,
|
|
"executed_actions": 3,
|
|
"failed_actions": 0,
|
|
"actions": [
|
|
{
|
|
"step": 1,
|
|
"success": true,
|
|
"location": {
|
|
"x": 640,
|
|
"y": 360,
|
|
"confidence": 0.89,
|
|
"bbox": [600, 340, 680, 380]
|
|
},
|
|
"action_type": "click"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## đïž Configuration
|
|
|
|
Dans `config.yaml` :
|
|
|
|
```yaml
|
|
replay:
|
|
similarity_threshold: 0.75 # Seuil minimum de similarité
|
|
max_search_attempts: 3 # Nombre de tentatives
|
|
delay_between_actions: 0.5 # Délai entre actions (secondes)
|
|
```
|
|
|
|
## đ§Ș Utilisation
|
|
|
|
### Exemple 1 : Rejeu Simple
|
|
|
|
```python
|
|
import asyncio
|
|
from core.task_replay import TaskReplayEngine
|
|
|
|
async def replay_simple():
|
|
# Initialiser le moteur
|
|
replay_engine = TaskReplayEngine(...)
|
|
|
|
# Rejouer une tĂąche
|
|
results = await replay_engine.replay_task("task_fc1d3e52")
|
|
|
|
print(f"SuccĂšs: {results['success']}")
|
|
print(f"Actions: {results['executed_actions']}/{results['total_actions']}")
|
|
|
|
asyncio.run(replay_simple())
|
|
```
|
|
|
|
### Exemple 2 : Rejeu avec Monitoring
|
|
|
|
```python
|
|
async def replay_with_monitoring():
|
|
def on_step(step_result):
|
|
print(f"Ătape {step_result['step']}: {step_result['status']}")
|
|
|
|
results = await replay_engine.replay_task_with_monitoring(
|
|
"task_fc1d3e52",
|
|
on_step_completed=on_step
|
|
)
|
|
|
|
asyncio.run(replay_with_monitoring())
|
|
```
|
|
|
|
### Exemple 3 : Lister les TĂąches
|
|
|
|
```python
|
|
tasks = replay_engine.list_available_tasks()
|
|
|
|
for task in tasks:
|
|
print(f"đ {task['task_name']}")
|
|
print(f" Observations: {task['observation_count']}")
|
|
print(f" Confiance: {task['confidence']:.2%}")
|
|
```
|
|
|
|
## đ IntĂ©gration avec le SystĂšme Existant
|
|
|
|
Le systĂšme de rejeu s'intĂšgre avec :
|
|
|
|
1. **LearningManager** : Charge les tĂąches apprises
|
|
2. **EmbeddingsManager** : Recherche par similarité
|
|
3. **VisionUtils** : Génération d'embeddings CLIP
|
|
4. **InputUtils** : Exécution des actions
|
|
5. **Logger** : Journalisation des événements
|
|
|
|
## đ MĂ©triques et Logging
|
|
|
|
Tous les événements sont loggés :
|
|
|
|
```python
|
|
# Démarrage
|
|
{"action": "task_replay_started", "task_id": "...", "interactive": false}
|
|
|
|
# ĂlĂ©ment trouvĂ©
|
|
{"action": "element_found", "similarity": 0.89, "attempt": 1}
|
|
|
|
# ĂlĂ©ment non trouvĂ©
|
|
{"action": "element_not_found", "step": 2}
|
|
|
|
# Fin
|
|
{"action": "task_replay_completed", "success": true, "executed": 3}
|
|
```
|
|
|
|
## đ Prochaines Ătapes
|
|
|
|
### Améliorations Prioritaires
|
|
|
|
1. **Recherche multi-échelle**
|
|
- Grilles de différentes tailles (2x2, 4x4, 8x8)
|
|
- Recherche hiĂ©rarchique (grossier â fin)
|
|
|
|
2. **Intégration OWL-v2**
|
|
- Détection précise d'objets
|
|
- Meilleure localisation des petits éléments
|
|
|
|
3. **Interface graphique**
|
|
- Visualisation du rejeu en temps réel
|
|
- Confirmation visuelle en mode interactif
|
|
|
|
4. **Gestion avancée des erreurs**
|
|
- Rollback automatique en cas d'échec
|
|
- Stratégies de récupération
|
|
|
|
5. **Actions conditionnelles**
|
|
- If/else basé sur l'état de l'interface
|
|
- Boucles pour actions répétitives
|
|
|
|
## đŻ Tests Ă Effectuer
|
|
|
|
### Test 1 : Rejeu Basique
|
|
```bash
|
|
python3 test_task_replay.py
|
|
# Choisir une tùche et vérifier qu'elle se rejoue correctement
|
|
```
|
|
|
|
### Test 2 : Adaptation aux Variations
|
|
```bash
|
|
# 1. Apprendre une tĂąche avec une fenĂȘtre Ă une position
|
|
# 2. DĂ©placer la fenĂȘtre
|
|
# 3. Rejouer la tĂąche
|
|
# â
Devrait trouver les éléments à leur nouvelle position
|
|
```
|
|
|
|
### Test 3 : Gestion des Erreurs
|
|
```bash
|
|
# 1. Rejouer une tĂąche
|
|
# 2. Fermer la fenĂȘtre pendant le rejeu
|
|
# â
Devrait logger l'erreur et continuer ou échouer proprement
|
|
```
|
|
|
|
## đ RĂ©sumĂ©
|
|
|
|
Le systĂšme de rejeu est maintenant **fonctionnel et complet** :
|
|
|
|
â
**Chargement** de tĂąches apprises
|
|
â
**Recherche visuelle** avec CLIP
|
|
â
**Exécution** adaptative d'actions
|
|
â
**Monitoring** en temps réel
|
|
â
**Gestion d'erreurs** avec retry
|
|
â
**Documentation** complĂšte
|
|
â
**Tests** interactifs
|
|
|
|
Le MVP peut maintenant :
|
|
1. **Capturer** des événements utilisateur
|
|
2. **Détecter** des patterns répétitifs
|
|
3. **Apprendre** des tĂąches avec signatures visuelles
|
|
4. **Rejouer** ces tĂąches de maniĂšre intelligente
|
|
|
|
**Le systĂšme RPA Vision V2 est maintenant complet ! đ**
|