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 :
- Utilisez des coordonnées fixes uniquement lorsque la position de la cible ne change jamais
- Utilisez la détection d'image lorsque la forme visuelle est stable et distinctive
- Utilisez la détection de texte lorsque les étiquettes sont plus faciles à reconnaître que les icônes
- 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 :
- Trouver l'objet une fois avec
Screen:find() - Convertir cette correspondance en une
Regionajustée avecresult:getRegion() - 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 :
- Commencez avec le score par défaut
- Si la cible est manquée, baissez légèrement le score
- Si la mauvaise chose est détectée, augmentez légèrement le score
- 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 :
- Attendre un élément d'ancrage stable
- Réduire la zone de recherche
- 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 :
- Attendre un état stable
- Restreindre la zone de recherche
- Choisir intentionnellement la détection d'image ou de texte
- Régler le score uniquement après avoir réduit l'ambiguïté
- Vérifier le résultat avant de continuer