Initial commit

This commit is contained in:
Dom
2026-03-05 00:20:25 +01:00
commit dcd4de9945
1954 changed files with 669380 additions and 0 deletions

View File

@@ -0,0 +1,309 @@
# 🎮 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 ! 🎉**