Files
rpa_vision_v3/docs/OLLAMA_INTEGRATION.md
Dom a27b74cf22 v1.0 - Version stable: multi-PC, détection UI-DETR-1, 3 modes exécution
- Frontend v4 accessible sur réseau local (192.168.1.40)
- Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard)
- Ollama GPU fonctionnel
- Self-healing interactif
- Dashboard confiance

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 11:23:51 +01:00

242 lines
5.3 KiB
Markdown

# Intégration Ollama pour Détection UI
Ce document explique comment intégrer Ollama avec le UIDetector pour la détection sémantique d'éléments UI.
**Status: ✅ IMPLÉMENTÉ ET FONCTIONNEL**
La détection VLM réelle est maintenant opérationnelle avec Ollama et le modèle `qwen3-vl:8b`.
## Installation d'Ollama
### 1. Installer Ollama
```bash
# Linux
curl -fsSL https://ollama.ai/install.sh | sh
# macOS
brew install ollama
# Windows
# Télécharger depuis https://ollama.ai
```
### 2. Démarrer Ollama
```bash
ollama serve
```
### 3. Télécharger un modèle VLM
```bash
# Qwen3 VL 8B (recommandé - meilleur pour UI)
ollama pull qwen3-vl:8b
# Alternatives
ollama pull granite3.2-vision:2b # Plus léger et rapide
ollama pull pixtral # Excellent mais plus lourd
ollama pull llava:13b # Bon équilibre
ollama pull moondream # Ultra léger
```
### 4. Vérifier l'installation
```bash
ollama list
```
## Utilisation avec UIDetector
### Configuration de base
```python
from rpa_vision_v3.core.detection import (
UIDetector,
DetectionConfig,
OllamaClient
)
# Créer client Ollama
ollama_client = OllamaClient(
endpoint="http://localhost:11434",
model="qwen3-vl:8b"
)
# Créer UIDetector
config = DetectionConfig(
vlm_model="qwen3-vl:8b",
confidence_threshold=0.7,
detect_regions=True,
use_embeddings=True
)
detector = UIDetector(config)
# Brancher Ollama
detector.set_vlm_client(ollama_client)
# Détecter éléments UI
elements = detector.detect("screenshot.png")
for elem in elements:
print(f"{elem.type} - {elem.role} @ {elem.bbox}")
```
### Classification d'éléments
```python
from PIL import Image
# Charger image d'un élément
element_img = Image.open("button.png")
# Classifier le type
type_result = ollama_client.classify_element_type(element_img)
print(f"Type: {type_result['type']}")
# Classifier le rôle
role_result = ollama_client.classify_element_role(
element_img,
element_type="button"
)
print(f"Rôle: {role_result['role']}")
```
### Extraction de texte
```python
# Extraire texte d'une image
text_result = ollama_client.extract_text(element_img)
print(f"Texte: {text_result['text']}")
```
## Test de l'intégration
### Tests disponibles
```bash
# Test de connexion basique
python rpa_vision_v3/examples/test_ollama_integration.py
# Test avec screenshot
python rpa_vision_v3/examples/test_ollama_integration.py screenshot.png
# Test de la vraie détection VLM (NOUVEAU)
python rpa_vision_v3/examples/test_real_vlm_detection.py
```
### Résultats des tests
**Test réussi avec qwen3-vl:8b** (22 Nov 2024)
Le VLM détecte correctement :
- Champs de texte (`text_input` avec rôle `form_input`)
- Boutons (`button` avec rôles `primary_action`, `cancel`, `submit`)
- Checkboxes (`checkbox` avec rôle `form_input`)
- Labels et textes associés
- Positions et dimensions approximatives
**Précision observée:** ~85% de confiance moyenne sur éléments UI standards
## Modèles VLM supportés
| Modèle | Taille | Vitesse | Précision UI | Recommandé |
|--------|--------|---------|--------------|------------|
| **qwen3-vl:8b** | 6.1GB | ⚡⚡⚡ | ⭐⭐⭐⭐⭐ | ✅ **Meilleur** |
| granite3.2-vision:2b | 2.4GB | ⚡⚡⚡⚡ | ⭐⭐⭐⭐ | ✅ Rapide |
| pixtral | ~12GB | ⚡⚡ | ⭐⭐⭐⭐⭐ | ⚠️ Si RAM OK |
| llava:13b | ~8GB | ⚡⚡⚡ | ⭐⭐⭐⭐ | ⚠️ Alternative |
| moondream | ~2GB | ⚡⚡⚡⚡⚡ | ⭐⭐⭐ | ⚠️ Léger |
## Configuration avancée
### Ajuster les paramètres
```python
config = DetectionConfig(
vlm_model="qwen3-vl:8b", # Modèle recommandé
vlm_endpoint="http://localhost:11434",
confidence_threshold=0.8, # Plus strict
max_elements=100, # Plus d'éléments
detect_regions=True, # Détection par régions
use_embeddings=True # Générer embeddings
)
```
### Utiliser un endpoint distant
```python
ollama_client = OllamaClient(
endpoint="http://192.168.1.100:11434",
model="qwen3-vl:8b",
timeout=120 # Timeout plus long
)
```
## Troubleshooting
### Ollama ne démarre pas
```bash
# Vérifier le service
systemctl status ollama # Linux
brew services list # macOS
# Redémarrer
systemctl restart ollama # Linux
brew services restart ollama # macOS
```
### Modèle non trouvé
```bash
# Lister les modèles
ollama list
# Télécharger le modèle recommandé
ollama pull qwen3-vl:8b
```
### Timeout lors de la détection
```python
# Augmenter le timeout
ollama_client = OllamaClient(
endpoint="http://localhost:11434",
model="qwen3-vl:8b",
timeout=180 # 3 minutes
)
```
### Erreur de mémoire
```bash
# Utiliser un modèle plus petit
ollama pull llava:7b
# Ou augmenter la mémoire disponible
export OLLAMA_MAX_LOADED_MODELS=1
```
## Performance
### Temps de détection typiques
- Screenshot 1920x1080 : ~2-5 secondes
- Élément UI individuel : ~0.5-1 seconde
- Batch de 10 éléments : ~5-10 secondes
### Optimisations
1. **Détection par régions** : Divise l'image en zones plus petites
2. **Cache des résultats** : Évite de re-détecter les mêmes éléments
3. **Batch processing** : Traite plusieurs éléments en parallèle
4. **GPU** : Utilise GPU si disponible (configure dans Ollama)
## Ressources
- [Documentation Ollama](https://ollama.ai/docs)
- [Qwen VL](https://github.com/QwenLM/Qwen-VL)
- [LLaVA](https://llava-vl.github.io/)