# 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/)