21 KiB
AXE A5 — Tokenisation d'écran (OmniParser, Set-of-Marks, modèles natifs)
Date : 2026-05-23 Auteur : Claude (agent dispatché par session principale) Statut : lecture seule, recherche pour arbitrage post-démo. Pas d'action proposée. Axes liés : A1 (modèles VLM grounding), A4 (OCR/docTR/RapidOCR), CLAUDE.md §asymétrie record/replay.
1. TL;DR
Recommandation : Scénario B (log implicite, no risk) maintenant, Scénario A (OmniParser V2 dans la cascade replay) à instruire post-démo, Scénario C (OS-Atlas / GUI-Actor) à benchmarker en R&D mais hors trajectoire courte.
Top finding : core/detection/som_engine.py est déjà câblé sur les weights OmniParser (/home/dom/ai/OmniParser/weights/icon_detect/model.pt, YOLOv8) côté serveur. Utilisé en recording (stream_processor.py:607-638) ET déclaré dans une voie _resolve_set_of_marks du resolve_engine.py:1083-1325. L'asymétrie pointée par CLAUDE.md n'est donc pas "UI-DETR-1 vs rien", elle est "SomEngine activé selon les paths". À vérifier au runtime si _resolve_set_of_marks est effectivement appelé en replay — possible code orphelin (cf. champs de mines CLAUDE.md).
Trois faits 2025 qui changent l'arbitrage :
- OmniParser V2 (publié 12 février 2025, MIT pour le code + Florence-2, AGPL-3.0 pour les poids YOLOv8 icon_detect) — 0.6 s/frame A100, 0.8 s/frame RTX 4090, état de l'art ScreenSpot-Pro 39.6 % combiné GPT-4o. Notre RTX 5070 ≈ 12 GB VRAM tient le pipeline complet (icon_detect ~150 MB + Florence-2 base ~750 MB).
- Set-of-Mark (Yang et al., arXiv 2310.11441, NeurIPS 2023) — pattern qui sous-tend OmniParser, Magma, ShowUI. Devenu vocabulaire standard du domaine en 2025.
- Coordinate-free grounding émerge : GUI-Actor (Microsoft, NeurIPS 2025) et Aguvis (ICML 2025) bypassent le besoin d'un étage de tokenisation séparé. GUI-Actor-7B sur Qwen2.5-VL = 44.6 % ScreenSpot-Pro, > UI-TARS-72B. Tendance : la tokenisation explicite OmniParser-style devient un raccourci d'aujourd'hui que les VLM "GUI-natifs" intégreront demain.
Verdict honnête pour rpa_vision_v3 : la cause des bugs récents (cf. REPLAY_BLOCAGE_NOTES_MEDICALES_2026-05-08.md) est transport HTTP + OCR-DIRECT center-of-line, pas la cascade vision. Ajouter OmniParser V2 en replay ne réparera rien des bugs P0 ouverts. Mais c'est la brique manquante pour le Validator (Skyvern-style) et pour un log de candidats parsés côté replay (suggestion §4.1 de INSPIRATION_FRAMEWORKS).
2. OmniParser V2 — fiche détaillée
2.1. Identité
- Auteur : Microsoft Research
- Repo : https://github.com/microsoft/OmniParser
- Modèle HF : https://huggingface.co/microsoft/OmniParser-v2.0
- Release V2 : 12 février 2025
- Stars GitHub mai 2026 : ~22k (cité dans
INSPIRATION_FRAMEWORKS_2026-05-10.md) - Article officiel : https://www.microsoft.com/en-us/research/articles/omniparser-v2-turning-any-llm-into-a-computer-use-agent/
2.2. Architecture interne (2 modèles)
| Sous-modèle | Rôle | Taille | Backend | Licence |
|---|---|---|---|---|
| icon_detect | YOLOv8 fine-tuné sur dataset Microsoft d'éléments interactifs (boutons, icônes, champs) | ~150 MB | Ultralytics YOLO |
AGPL-3.0 ⚠ |
| icon_caption | Florence-2 base fine-tuné sur 7K paires icon-description annotées GPT-4o | ~750 MB | Transformers | MIT |
OCR : OmniParser embarque aussi un OCR (PaddleOCR ou EasyOCR selon config). Notre som_engine.py actuel a remplacé par docTR (cf. lignes 117-127).
2.3. Format de sortie ("interactable elements")
Liste de dicts avec :
bbox(coordonnées normalisées 0-1)interactivity(true / false)content(caption Florence-2 : "close button", "search field", "OK")source("box_yolo_content_ocr" / "box_yolo_content_yolo" / "icon")
Cette sortie est conçue pour être insérée dans le prompt du VLM principal (GPT-4o, Claude) sous forme de tableau numéroté → c'est du Set-of-Marks appliqué automatiquement.
2.4. Performance benchmarks
| Métrique | Valeur | Source |
|---|---|---|
| ScreenSpot-Pro + GPT-4o | 39.6 % | Microsoft Research article 2026-02-12 |
| ScreenSpot-Pro GPT-4o seul (sans OmniParser) | 0.8 % | idem |
| Latence A100 (1 frame) | 0.6 s | idem |
| Latence RTX 4090 (1 frame) | 0.8 s | idem |
| VRAM mini | 4 GB (inference) / 8 GB (recommandé loop agent) | GitHub Issue #31 |
| Résolution supportée | 640 → 1920 px côté long (icon_detect) | doc HF V2.0 |
Implication directe rpa_vision_v3 : nos screenshots Léa sont 2560×1600 (RTX 5070). Il faudra resize à 1920 px côté long → ratio ~0.75. Toutes les coordonnées YOLO de retour doivent être re-scalées. Risque : c'est le même piège que smart_resize Qwen2.5-VL bbox_2d (DETTE-006/010/014, MIGRATION_VLM_PLAN_2026-05-09.md §2). À traiter explicitement.
2.5. Licence — point sensible commercial
Combinaison AGPL-3.0 (icon_detect) + MIT (icon_caption + code) :
- AGPL-3.0 sur icon_detect = interdit en produit commercial fermé sans rachat de licence YOLOv8 commercial (Ultralytics, ~5 000 $/an estimé), ou remplacement par un détecteur alternatif (Florence-2 task
<OD>, ou détecteur custom). - Pour rpa_vision_v3 en POC interne / GHT / Anoust : usage actuel défendable. Pour vente externe : showstopper sur icon_detect tel quel.
Le code de notre som_engine.py charge directement /home/dom/ai/OmniParser/weights/icon_detect/model.pt (AGPL-3.0) → audit licence à reprendre.
2.6. État interne du projet — code existant
core/detection/som_engine.py(316 lignes, complet) — singleton thread-safe, YOLO + docTR + annotation. Device par défautcpu(cf.get_shared_engine).core/detection/omniparser_adapter.py— wrapper plus complet citant Florence-2 caption. Sépare dusom_engine.pysimplifié.agent_v0/server_v1/stream_processor.py:607-700— appel SoM au recording pour enrichir chaque event click avec l'élément cliqué (cf. UI-DETR-1 dansINSPIRATION_FRAMEWORKS_2026-05-10.md§4 — c'est en fait SoM, pas un détecteur tiers).agent_v0/server_v1/resolve_engine.py:1083-1325— voie_resolve_set_of_marksau replay. Lance SomEngine, fallback template matching anchor↔éléments YOLO. À tracer au runtime pour confirmer qu'elle est invoquée.
→ L'asymétrie record/replay décrite dans CLAUDE.md n'est peut-être pas l'asymétrie réelle. À valider explicitement avec Dom au prochain run.
3. Set-of-Marks original
3.1. Identité
- Papier : Yang et al., "Set-of-Mark Prompting Unleashes Extraordinary Visual Grounding in GPT-4V", arXiv 2310.11441 (oct 2023, dernière révision nov 2023)
- Code : https://github.com/microsoft/SoM
- Lien : https://arxiv.org/abs/2310.11441
- 124 citations (mai 2026)
3.2. Approche
- Segmenter l'image en régions sémantiques (SEEM ou SAM, off-the-shelf)
- Overlayer chaque région avec un mark (numéro, lettre, masque coloré, bbox)
- Demander au VLM : "click on mark 7" plutôt que "click at (x=420, y=380)"
Bénéfice : le VLM raisonne en identifiants discrets et non en coordonnées continues. Évite le bug des coords mal calibrées (cf. notre DETTE-006 bbox_2d Qwen2.5-VL).
3.3. Résultats clés (papier 2023)
GPT-4V + SoM en zero-shot bat le SOTA fine-tuned sur RefCOCOg (referring expression comprehension). Pour la première fois, un modèle généraliste prompted dépasse les modèles spécialisés sur ce benchmark.
3.4. Complémentarité avec OmniParser
- SoM = méthode de prompting (overlay sur l'image, le VLM répond un ID)
- OmniParser = pipeline complet (détection + caption + format prompt)
- OmniParser = "SoM industrialisé pour les UIs". OmniParser fournit les régions ET les marks ET les captions, contre SoM original qui fournit seulement les marks à partir d'une segmentation SEEM/SAM générique.
- Magma (Microsoft, CVPR 2025) entraîne explicitement le modèle sur des images SoM-labellisées → SoM passe de "trick de prompting" à "supervision de pré-entraînement".
4. Modèles VLM qui tokenisent nativement
4.1. OS-Atlas-Base (ICLR 2025)
- Repo : https://github.com/OS-Copilot/OS-Atlas
- Modèles : OS-Atlas-Base-4B (sur InternVL2-4B) et OS-Atlas-Base-7B (sur Qwen2-VL-7B-Instruct)
- Approche : entraînement sur 13 M éléments GUI cross-platform (Windows, Linux, macOS, Android, web). Tokens spéciaux
<|box_start|>(x1,y1),(x2,y2)<|box_end|>. Coordonnées normalisées 0-1000. - Tokenise nativement ? Pas au sens "produit une liste d'éléments en sortie", mais internalise la grammaire bbox comme tokens spéciaux. Le modèle apprend que "(124, 380) → (228, 412)" est une bbox, pas une séquence d'entiers libres.
- Coût : OS-Atlas-Base-7B = ~14 GB FP16, ~7 GB en 4-bit. Compatible RTX 5070 12 GB en 4-bit ou avec Flash-Attn.
4.2. ShowUI-2B (CVPR 2025, Outstanding Paper NeurIPS 2024 workshop)
- Repo : https://github.com/showlab/ShowUI
- HF : https://huggingface.co/showlab/ShowUI-2B
- Innovation clé : UI-Guided Visual Token Selection — construit un graphe UI au sein du modèle, élimine 33 % des tokens visuels redondants. 5× plus rapide, 2× plus précis que les VLM généralistes en localisation.
- Perf : 75.1 % accuracy zero-shot ScreenSpot grounding avec seulement 2B params + 256K échantillons de training.
- Tokenise nativement ? Oui, c'est sa nature : la sélection des tokens visuels EST une forme de tokenisation. Pas de pipeline externe.
- Coût : 2B params → ~4 GB FP16, ~2 GB en 4-bit. Léger pour notre RTX 5070.
4.3. Aguvis (ICML 2025)
- Repo : https://aguvis-project.github.io/
- Approche : framework "pure vision" multi-plateforme avec inner monologue structuré. Pipeline 2 étapes (grounding séparé de planification).
- Caractéristique : premier agent GUI pure-vision entièrement open-source (sans dépendance closed-source).
4.4. GUI-Actor (Microsoft, NeurIPS 2025) — le plus pertinent
- Repo : https://github.com/microsoft/GUI-Actor
- HF : https://huggingface.co/microsoft/GUI-Actor-7B-Qwen2.5-VL
- Innovation : coordinate-free. Au lieu de produire "(420, 380)", produit un token
<ACTOR>qui s'attache via attention aux patches visuels pertinents. Génère plusieurs régions candidates en 1 forward. - Perf : GUI-Actor-7B sur Qwen2.5-VL = 44.6 % ScreenSpot-Pro (> UI-TARS-72B).
- Implication directe : tue le bug d'échelle bbox_2d (DETTE-006/010/014) à la racine. Pas de smart_resize à débugger. Pas de mismatch de résolution.
- Coût : 7B + Qwen2.5-VL → ~14 GB FP16, ~7 GB 4-bit. Compatible RTX 5070 en 4-bit.
4.5. Magma (Microsoft, CVPR 2025)
- Repo : https://github.com/microsoft/Magma
- Approche : pré-entraînement multimodal avec Set-of-Mark labellisation automatique des éléments cliquables + Trace-of-Mark pour la planification d'actions (videos). Premier modèle multi-domaine (GUI + robotique).
- Tokenise nativement ? Oui, SoM est dans la supervision de pré-entraînement, pas une étape inférence externe.
5. Comparaison latence / perf / robustesse
5.1. Tableau synthèse
| Approche | Latence / écran 2560×1600 | VRAM | Sortie | Licence | Tokenise nativement ? |
|---|---|---|---|---|---|
| UI-DETR-1 record-only (actuel) | n/a (recording offline) | n/a | événements VWB enrichis | propriétaire MS | non, étape séparée |
| SomEngine actuel (YOLO icon_detect + docTR) | ~150-300 ms estimé (docTR seul ~100 ms, YOLO ~15 ms, +overhead annotation) | ~1 GB | liste SomElement |
AGPL-3.0 (YOLO) | non |
| OmniParser V2 complet (YOLO + Florence-2 caption) | 0.8 s (RTX 4090) → ~1.0 s (RTX 5070 estimé) après resize 1920 | ~2 GB | liste interactable_element + caption sémantique |
AGPL-3.0 + MIT | non |
| YOLOv8-UI fine-tuned custom (sans caption) | ~50-100 ms | ~200 MB | bbox seules | AGPL-3.0 par défaut, MIT possible si from scratch | non |
| ShowUI-2B | grounding direct, ~1-2 s estimé | ~2-4 GB | coord ou région | code MIT | oui (UI-guided token selection) |
| GUI-Actor-7B | grounding direct, ~2-3 s estimé | ~7-14 GB | régions multiples via attention | code MIT | oui (attention head dédiée) |
| OS-Atlas-Base-7B | grounding direct, ~2-3 s estimé | ~7-14 GB | bbox tokens spéciaux | code MIT (modèle Qwen2-VL Apache 2.0) | partiellement |
| InfiGUI-G1-3B (actuel) | déjà mesuré ~1-2 s | 3.9 GB | bbox | Apache 2.0 (Qwen) | partiellement |
5.2. Robustesse — ce que dit la littérature 2025
- GUI-Robust (arXiv 2506.14477) : tous les MLLM (y compris GUI-spécialisés) se dégradent significativement sur 7 types d'anomalies (popups, modifications de layout, désactivation). OmniParser ne corrige PAS ces anomalies à lui seul — il aide à voir les éléments, pas à comprendre les bugs UI.
- Magma + SoM (CVPR 2025) : SoM en supervision > SoM en prompting inference-only. Confirme que la prochaine génération est "SoM natif", pas "OmniParser externe".
5.3. Comparaison concrète avec notre cascade actuelle
Notre cascade _resolve_target (cf. cartography_execution_flow.md) :
OCR docTR (~200 ms) → template cv2 (~50 ms) → YOLO/SoM optionnel → VLM (1-15 s)
Avec SomEngine déjà existant et OmniParser V2 disponible localement (/home/dom/ai/OmniParser/), le coût marginal d'ajouter le caption Florence-2 = ~500-700 ms (Florence-2 base). Total cascade enrichie : ~2 s vs actuel ~1-15 s suivant l'étage qui réussit. Latence pas un blocker.
6. Recommandation pour rpa_vision_v3 — 3 scénarios
Scénario A — Intégrer OmniParser V2 complet dans la cascade replay
Description : activer _resolve_set_of_marks en replay, brancher icon_caption Florence-2 pour enrichir les éléments YOLO avec des descriptions sémantiques, exposer cette "vue parsée" à VWB UI et au VLM principal en prompt.
Pour :
- Asymétrie record/replay corrigée explicitement.
- Vue parsée disponible pour debug (UI VWB pourrait overlayer les éléments détectés sur captures Léa).
- Caption Florence-2 = donnée d'entrée pour un Validator sémantique post-clic (compare "j'attendais Notes médicales" vs "j'ai cliqué sur élément captioned 'Imagerie tab'").
- Coût latence ~1 s — compatible démo.
Contre :
- Licence AGPL-3.0 sur icon_detect → audit légal avant déploiement commercial Anoust / GHT vente.
- N'efface AUCUN des 5 bugs P0 post-démo (transport HTTP, Stop VWB, mss monitors, échelle pixel, skip ord 13).
- Ajoute une dépendance lourde (
/home/dom/ai/OmniParser/) au runtime. - Le bug primaire diagnostiqué 8 mai est OCR-DIRECT center-of-line, pas un manque de candidats détectés.
Effort : 1-2 j (le code SomEngine existe, manque le câblage Florence-2 caption + UI debug).
Risque : moyen-faible. Tout est déjà en place côté code.
Scénario B — Log implicite des candidats (no risk, à faire dès stabilisation post-démo)
Description : à chaque appel _resolve_target, logger systématiquement dans logs/audit/ la liste des candidats produits par CHAQUE étage de la cascade (docTR lignes/spans, template matches > seuil, sorties YOLO si SomEngine actif, sorties VLM). JSON structuré, 1 ligne par résolution.
Pour :
- Zéro nouveau modèle, zéro nouvelle dépendance. Pure instrumentation.
- Vue parsée gratuite, exploitable hors-bande (analyse, dashboard).
- Comble l'asymétrie record/replay au sens "trace équivalente".
- Préalable indispensable à tout Validator sémantique futur.
- Aligné avec la suggestion §4.1 de
INSPIRATION_FRAMEWORKS_2026-05-10.md("logger systématiquement la liste des candidats détectés par chaque étage de la cascade").
Contre :
- N'apporte aucune nouvelle robustesse en propre — juste de l'observabilité.
Effort : 0.5 j.
Risque : très bas.
→ À faire en priorité, indépendamment des autres scénarios.
Scénario C — Remplacer la cascade par un modèle VLM qui tokenise nativement
Description : remplacer _resolve_target par un appel direct à GUI-Actor-7B (ou ShowUI-2B en option légère) qui produit la zone-cible en coordinate-free. Peut coexister avec OCR docTR pour validation post-action.
Pour :
- Tue le bug d'échelle bbox_2d (DETTE-006/010/014) — plus de smart_resize à débugger.
- État de l'art ScreenSpot-Pro (44.6 % GUI-Actor > UI-TARS-72B).
- Architecture plus simple long-terme : 1 modèle = 1 grounder.
- ShowUI-2B = 2× moins gourmand que notre InfiGUI-G1-3B actuel.
Contre :
- Décision structurelle, pas réversible facilement. Réécrit la moitié de
resolve_engine.py. - Aucun bench interne pour valider sur nos écrans Easily / Citrix réels.
- Pas de caption sémantique = pas de Validator sémantique post-action.
- Effort production-grade : 1-2 semaines.
Effort : 5-10 j.
Risque : élevé tant que pas benché sur nos workflows.
7. Recommandation finale
Maintenant (post-démo, semaine du 26 mai) :
- Scénario B obligatoirement — log des candidats. Coût minimal, valeur immense pour debug futur.
- Vérifier au runtime si
_resolve_set_of_marksest appelé en replay. Si non = code orphelin (CLAUDE.md §champs de mines). Si oui = on est déjà mi-Scénario A sans le savoir. - Audit licence AGPL-3.0 sur icon_detect avant tout pitch commercial.
Sprint suivant (juin si bande passante) : 4. Scénario A partiel — activer Florence-2 icon_caption sur l'événement de recording VWB ET sur les résolutions en échec replay (sentinelle, pas systématique). Caption disponible pour un Validator sémantique futur. 5. Bench GUI-Actor-7B et ShowUI-2B sur 10-20 captures Easily Assure réelles. Décision Scénario C uniquement sur preuves.
À ne PAS faire :
- Activer OmniParser V2 systématiquement en runtime tant que les 5 bugs P0 (
LESSONS_LEARNED_GHT_2026-05.md) ne sont pas refermés. Latence supplémentaire sur démo fragile. - Remplacer InfiGUI-G1-3B sans bench comparatif documenté.
8. Sources
OmniParser V2
- Microsoft Research — OmniParser V2: Turning Any LLM into a Computer Use Agent (2025-02-12)
- GitHub microsoft/OmniParser
- HF microsoft/OmniParser-v2.0
- MarkTechPost — Microsoft AI Releases OmniParser V2 (2025-02-18)
- LearnOpenCV — OmniParser Vision-Based GUI Agent
- DeepWiki — OmniParser Icon Detection and Captioning Models
Set-of-Marks
Modèles GUI natifs 2025
- arXiv 2410.23218 — OS-ATLAS Foundation Action Model (ICLR 2025)
- OS-Atlas Homepage
- GitHub showlab/ShowUI (CVPR 2025)
- arXiv 2411.17465 — ShowUI Vision-Language-Action GUI Visual Agent
- Aguvis Project — ICML 2025
- arXiv 2412.04454 — Aguvis Unified Pure Vision Agents
- GitHub microsoft/GUI-Actor (NeurIPS 2025)
- arXiv 2506.03143 — GUI-Actor Coordinate-Free Grounding
- GitHub microsoft/Magma (CVPR 2025)
- arXiv 2502.13130 — Magma Foundation Model
Florence-2 (sous-jacent OmniParser icon_caption)
Robustesse GUI agents
Computer use / pure vision
- Skyvern — Browser Automation with LLM and Computer Vision
- Claude Computer Use — Anthropic Docs
- Tech Insider — Claude Computer Use Citrix Legacy Apps 2026
Référence interne
core/detection/som_engine.py(316 lignes) — SomEngine YOLO + docTR déjà câblécore/detection/omniparser_adapter.py— wrapper Florence-2 captionagent_v0/server_v1/resolve_engine.py:1083-1325— voie_resolve_set_of_marksau replayagent_v0/server_v1/stream_processor.py:607-700— SoM au recordingdocs/INSPIRATION_FRAMEWORKS_2026-05-10.md§4 — vague d'inspirations frameworks RPA visuelsdocs/SYNTHESE_TECHNOS_REPLAY_2026-05-23.md§5.3 — note sur l'asymétrie OmniParser ↔ cascadedocs/MIGRATION_VLM_PLAN_2026-05-09.md§2 — bug d'échelle bbox_2d (lien Scénario C)docs/LESSONS_LEARNED_GHT_2026-05.md§🔴 — 5 bugs P0 qui restent prioritaires sur tout ajout d'étage