Aller au contenu principal

Stratégies de détection

Une fois que votre macro va au-delà de simples tapotements, le facteur le plus important pour la fiabilité n'est pas le clic lui-même, mais la façon dont vous détectez la cible. Les macros avancées fonctionnent mieux lorsqu'elles choisissent la bonne stratégie de détection pour l'interface qu'elles automatisent.

Commencez par le signal le plus simple et fiable

Avant de régler les paramètres, choisissez d'abord le signal le plus stable :

  1. Utilisez des coordonnées fixes uniquement lorsque la position de la cible ne change jamais
  2. Utilisez la détection d'image lorsque la forme visuelle est stable et distinctive
  3. Utilisez la détection de texte lorsque les étiquettes sont plus faciles à reconnaître que les icônes
  4. Utilisez une Region() plus petite lorsque vous savez déjà approximativement où la cible devrait apparaître

Si plusieurs stratégies fonctionnent, préférez celle avec la plus petite zone de recherche et le moins d'ambiguïté.

Écran (Screen) vs Région (Region)

L'erreur de performance la plus courante est de rechercher sur tout l'écran pour tout.

Utilisez Screen lorsque :

  • la cible peut apparaître presque n'importe où
  • vous créez la première version d'une macro
  • vous explorez un nouveau flux d'application

Utilisez Region lorsque :

  • la cible apparaît toujours dans une section connue de l'interface
  • l'écran contient des icônes répétées ou du texte répété
  • vous voulez une correspondance plus rapide et plus stable
local actionArea = Region(900, 1600, 1080, 2200)
actionArea:click("continue-button.jpg")

Technique de région ajustée (fit region)

L'une des techniques avancées les plus utiles est ce que vous avez décrit comme la région ajustée (fit region).

L'idée est :

  1. Trouver l'objet une fois avec Screen:find()
  2. Convertir cette correspondance en une Region ajustée avec result:getRegion()
  3. Réutiliser cette région ajustée pour les recherches suivantes si la taille de l'objet reste stable

Cela fonctionne bien lorsque :

  • l'objet a toujours la même largeur et hauteur
  • le contenu de l'objet peut changer, mais sa zone conteneur reste cohérente
  • la recherche sur tout l'écran est coûteuse et répétée souvent
local result = Screen:find("inventory-panel.jpg")
if result then
local fitRegion = result:getRegion()
local collectButton = fitRegion:find("collect-button.jpg")
if collectButton then
fitRegion:click("collect-button.jpg")
end
end

Pourquoi c'est puissant :

  • la première recherche sur tout l'écran est l'étape coûteuse
  • une fois l'objet trouvé, toutes les recherches ultérieures sont limitées aux limites ajustées
  • cela peut réduire considérablement le coût d'OCR et de correspondance d'images dans les flux répétés

Utilisez la région ajustée lorsque :

  • vous avez un panneau, une carte, une fenêtre pop-up, un emplacement ou un conteneur stable
  • la macro interagit de manière répétée à l'intérieur du même objet correspondant
  • le même objet apparaît à différentes positions mais garde les mêmes dimensions

Évitez d'utiliser la région ajustée lorsque :

  • l'objet est fortement redimensionné entre les écrans ou les appareils
  • la zone cible s'étend ou se réduit dynamiquement
  • la première correspondance est trop générique et peut se lier au mauvais conteneur

En pratique, la région ajustée est l'un des meilleurs moyens de convertir une macro Screen lente en une macro Region rapide sans coder en dur les coordonnées.

Détection d'image vs détection de texte

Préférez la détection d'image lorsque :

  • la cible est principalement graphique
  • la langue de l'interface peut changer
  • le texte est stylisé ou affiché dans un bouton
  • l'OCR peine parce que le texte est trop petit ou à faible contraste

Préférez la détection de texte lorsque :

  • l'étiquette change de position mais garde le même libellé
  • le même composant visuel apparaît dans de nombreux thèmes ou états
  • la forme du bouton change mais l'étiquette reste lisible
  • vous devez faire correspondre du texte généré dynamiquement par l'application

OCR mot par mot vs ligne par ligne

Lors de l'utilisation de la détection de texte, la méthode de détection est importante :

  • Utilisez setDetectionMethod(1) pour un mot unique ou une étiquette très courte
  • Utilisez setDetectionMethod(2) lorsque la cible est une phrase ou une ligne complète
Screen:click("Login", ClickParams():setDetectionType("TEXT"):setDetectionMethod(1))
Screen:wait("Your session has expired", 5000, FinderParams():setDetectionType("TEXT"):setDetectionMethod(2))

Réglez le score de correspondance progressivement

Un score de correspondance trop élevé provoque des manquements. Un score trop bas provoque des faux positifs.

Un processus de réglage pratique :

  1. Commencez avec le score par défaut
  2. Si la cible est manquée, baissez légèrement le score
  3. Si la mauvaise chose est détectée, augmentez légèrement le score
  4. Si les deux se produisent, réduisez la zone de recherche avant de modifier davantage le score

Dans la plupart des cas, réduire l'ambiguïté avec Region() est plus sûr que de pousser le score de correspondance trop agressivement.

Utilisez le niveaux de gris uniquement quand cela aide

Le niveaux de gris peut améliorer la vitesse et parfois la cohérence, mais il n'est pas automatiquement meilleur.

Utilisez le niveaux de gris lorsque :

  • la cible est définie davantage par sa forme que par sa couleur
  • les variations d'éclairage ou de couleur rendent la correspondance instable
  • vous voulez une correspondance plus rapide sur les appareils bas de gamme

Évitez de dépendre du niveaux de gris lorsque :

  • la couleur est la principale différence entre des cibles similaires
  • vous essayez de distinguer des états actifs et inactifs par la couleur

Mise à l'échelle dynamique

Si la même macro s'exécute sur des appareils avec des résolutions différentes, la mise à l'échelle dynamique peut aider la détection d'image à rester utilisable.

Utilisez la mise à l'échelle dynamique lorsque :

  • le modèle a été capturé sur un appareil mais exécuté sur un autre
  • la même mise en page d'application est redimensionnée entre téléphones et tablettes

Mais si l'interface est déjà très cohérente sur un seul appareil, un modèle bien recadré plus une bonne région est généralement plus stable qu'un réglage excessif de la mise à l'échelle.

Recadrez les modèles de manière agressive

Un bon modèle ne devrait contenir que ce qui rend la cible unique.

Bon modèle :

  • l'icône elle-même
  • la zone d'étiquette unique
  • le modèle visuel stable minimal

Mauvais modèle :

  • un grand espace blanc environnant
  • des arrière-plans animés
  • du contenu qui change à chaque exécution
  • des éléments à proximité qui ne font pas partie de la cible

Utilisez la détection en deux étapes pour les écrans difficiles

Lorsqu'un écran est bruyant, utilisez une approche par étapes :

  1. Attendre un élément d'ancrage stable
  2. Réduire la zone de recherche
  3. Détecter la cible finale à l'intérieur de cette zone
Screen:wait("settings-title.jpg", 5000)

local footerArea = Region(0, 1700, 1080, 2400)
footerArea:click("save-button.jpg")

Modèle recommandé

Pour les macros avancées, c'est généralement l'ordre le plus sûr :

  1. Attendre un état stable
  2. Restreindre la zone de recherche
  3. Choisir intentionnellement la détection d'image ou de texte
  4. Régler le score uniquement après avoir réduit l'ambiguïté
  5. Vérifier le résultat avant de continuer

Pages associées