# Implémentation des Modèles de Vision

## Modèles Implémentés

### 1. OWL-v2 (Open-World Localization v2)
- **Source**: Google Research / HuggingFace
- **Modèle**: `google/owlv2-base-patch16-ensemble`
- **Capacités**: Détection d'objets open-vocabulary (peut détecter n'importe quel objet décrit en texte)
- **Avantages**: Très flexible, bonne précision
- **Inconvénients**: Plus lent que YOLO

### 2. Grounding DINO
- **Source**: IDEA Research / HuggingFace
- **Modèle**: `IDEA-Research/grounding-dino-tiny`
- **Capacités**: Détection d'objets avec grounding textuel
- **Avantages**: Bon équilibre vitesse/précision
- **Inconvénients**: Nécessite des prompts bien formulés

### 3. YOLO-World
- **Source**: Ultralytics
- **Modèle**: `yolov8s-worldv2.pt`
- **Capacités**: Détection ultra-rapide avec vocabulaire ouvert
- **Avantages**: Très rapide, temps réel
- **Inconvénients**: Moins précis sur des objets UI complexes

## Configuration

Dans `config.py`, le modèle principal est configuré :
```python
"models": {
    "vision": "owl-v2",  # Modèle principal
    ...
}
```

## Fallback Automatique

Le système essaie les modèles dans cet ordre :
1. Modèle principal configuré (owl-v2 par défaut)
2. Grounding DINO
3. YOLO-World

Si un modèle échoue ou ne trouve rien, le suivant est automatiquement essayé.

## Utilisation avec Qwen3-VL

Le système utilise **Qwen3-VL:8b** via Ollama pour :
- Analyser les screenshots
- Générer des descriptions d'actions
- Raisonnement visuel sur les tâches

Configuration dans `config.py` :
```python
"llm": "qwen3-vl:8b"
```

## Installation des Dépendances

```bash
# Transformers pour OWL-v2 et Grounding DINO
pip install transformers torch

# Ultralytics pour YOLO-World
pip install ultralytics

# Ollama doit être installé séparément
# https://ollama.ai/
```

## Téléchargement des Modèles

Les modèles sont téléchargés automatiquement au premier usage :
- OWL-v2 : ~1.5 GB
- Grounding DINO : ~600 MB
- YOLO-World : ~50 MB

## Performance

| Modèle | Vitesse | Précision | Mémoire GPU |
|--------|---------|-----------|-------------|
| OWL-v2 | Lent (~2s) | Excellente | ~4 GB |
| Grounding DINO | Moyen (~1s) | Bonne | ~2 GB |
| YOLO-World | Rapide (~0.1s) | Moyenne | ~1 GB |

## Exemple d'Utilisation

```python
from core.utils.vision_utils import VisionUtils
import numpy as np

# Initialiser
vision = VisionUtils()

# Détecter un bouton
frame = np.array(...)  # Screenshot
detections = vision.detect("button", frame)

# Avec modèle spécifique
detections = vision.detect("icon", frame, model="yolo")
```

## Résolution des Problèmes

### Erreur: "'list' object has no attribute 'dtype'"
✅ **Résolu** : Les arguments de `detect()` étaient inversés. Maintenant corrigé.

### Modèle ne se charge pas
- Vérifier la connexion internet (téléchargement initial)
- Vérifier l'espace disque disponible
- Vérifier que CUDA est disponible si GPU utilisé

### Détections vides
- Essayer avec un prompt plus descriptif
- Le système essaiera automatiquement les autres modèles
- Vérifier que l'élément est visible dans le screenshot
