Zum Hauptinhalt springen

Erkennungsstrategien

Sobald Ihr Makro über einfache Tipper hinausgeht, ist der größte Faktor für die Zuverlässigkeit nicht der Klick selbst, sondern wie Sie das Ziel erkennen. Anspruchsvolle Makros funktionieren am besten, wenn sie die richtige Erkennungsstrategie für die Benutzeroberfläche wählen, die sie automatisieren.

Mit dem einfachsten zuverlässigen Signal beginnen

Bevor Sie Einstellungen anpassen, wählen Sie zuerst das stabilste Signal:

  1. Verwenden Sie feste Koordinaten nur, wenn sich die Zielposition nie ändert
  2. Verwenden Sie Bilderkennung, wenn die visuelle Form stabil und unverwechselbar ist
  3. Verwenden Sie Texterkennung, wenn Beschriftungen leichter zu erkennen sind als Symbole
  4. Verwenden Sie einen kleineren Region(), wenn Sie bereits ungefähr wissen, wo das Ziel erscheinen soll

Wenn mehrere Strategien funktionieren, bevorzugen Sie die mit dem kleinsten Suchbereich und der geringsten Mehrdeutigkeit.

Screen vs Region

Der häufigste Leistungsfehler besteht darin, den gesamten Bildschirm nach allem zu durchsuchen.

Verwenden Sie Screen, wenn:

  • das Ziel fast überall erscheinen kann
  • Sie die erste Version eines Makros erstellen
  • Sie einen neuen App-Ablauf erkunden

Verwenden Sie Region, wenn:

  • das Ziel immer in einem bekannten Bereich der Benutzeroberfläche erscheint
  • der Bildschirm wiederholte Symbole oder wiederholten Text enthält
  • Sie schnelleres und stabileres Abgleichen möchten
local actionArea = Region(900, 1600, 1080, 2200)
actionArea:click("continue-button.jpg")

Fit-Region-Technik

Eine der nützlichsten fortgeschrittenen Techniken ist das, was als fit region (angepasste Region) bezeichnet wird.

Die Idee ist:

  1. Das Objekt einmal mit Screen:find() finden
  2. Diese Übereinstimmung mit result:getRegion() in eine angepasste Region umwandeln
  3. Diese angepasste Region für die nächsten Suchen wiederverwenden, wenn die Objektgröße stabil bleibt

Das funktioniert gut, wenn:

  • das Objekt immer dieselbe Breite und Höhe hat
  • sich der Objektinhalt ändern kann, aber sein Container-Bereich konsistent bleibt
  • die Vollbildsuche aufwendig ist und oft wiederholt wird
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

Warum das so mächtig ist:

  • die erste Vollbildsuche ist der aufwendige Schritt
  • sobald das Objekt gefunden wurde, sind alle späteren Suchen auf die angepassten Grenzen beschränkt
  • dies kann die Kosten für OCR und Bildabgleich bei wiederholten Abläufen erheblich senken

Verwenden Sie Fit-Region, wenn:

  • Sie ein stabiles Panel, eine Karte, ein Popup, einen Slot oder einen Container haben
  • das Makro wiederholt innerhalb desselben gefundenen Objekts interagiert
  • dasselbe Objekt an verschiedenen Positionen erscheint, aber dieselben Abmessungen beibehält

Vermeiden Sie Fit-Region, wenn:

  • das Objekt zwischen Bildschirmen oder Geräten stark skaliert wird
  • sich der Zielbereich dynamisch ausdehnt oder zusammenbricht
  • die erste Übereinstimmung zu allgemein ist und an den falschen Container binden könnte

In der Praxis ist Fit-Region eine der besten Möglichkeiten, ein langsames Screen-Makro in ein schnelles Region-Makro umzuwandeln, ohne Koordinaten fest zu codieren.

Bilderkennung vs Texterkennung

Bevorzugen Sie Bilderkennung, wenn:

  • das Ziel größtenteils grafisch ist
  • sich die UI-Sprache ändern kann
  • der Text stilisiert oder innerhalb einer Schaltfläche gerendert ist
  • OCR Probleme hat, weil der Text zu klein oder zu kontrastarm ist

Bevorzugen Sie Texterkennung, wenn:

  • die Beschriftung die Position ändert, aber denselben Wortlaut beibehält
  • dieselbe visuelle Komponente in vielen Themen oder Zuständen erscheint
  • sich die Schaltflächenform ändert, aber die Beschriftung lesbar bleibt
  • Sie mit Text übereinstimmen müssen, der dynamisch von der App erzeugt wird

Wort-für-Wort vs Zeile-für-Zeile OCR

Bei Verwendung der Texterkennung ist die Erkennungsmethode entscheidend:

  • Verwenden Sie setDetectionMethod(1) für ein einzelnes Wort oder eine sehr kurze Beschriftung
  • Verwenden Sie setDetectionMethod(2), wenn das Ziel ein Satz oder eine vollständige Zeile ist
Screen:click("Login", ClickParams():setDetectionType("TEXT"):setDetectionMethod(1))
Screen:wait("Your session has expired", 5000, FinderParams():setDetectionType("TEXT"):setDetectionMethod(2))

Match-Score schrittweise anpassen

Ein zu hoher Match-Score führt zu Fehlernken. Ein zu niedriger Score führt zu falsch-positiven Treffern.

Ein praktischer Anpassungsprozess:

  1. Mit dem Standard-Score beginnen
  2. Wenn das Ziel verfehlt wird, den Score leicht senken
  3. Wenn das Falsche getroffen wird, den Score leicht erhöhen
  4. Wenn beides passiert, den Suchbereich verkleinern, bevor der Score weiter geändert wird

In den meisten Fällen ist das Verringern von Mehrdeutigkeit mit Region() sicherer, als den Match-Score zu aggressiv anzupassen.

Graustufen nur verwenden, wenn es hilft

Graustufen können die Geschwindigkeit verbessern und manchmal die Konsistenz erhöhen, sind aber nicht automatisch besser.

Verwenden Sie Graustufen, wenn:

  • das Ziel eher durch Form als durch Farbe definiert ist
  • Beleuchtungs- oder Farbverschiebungen das Abgleichen instabil machen
  • Sie schnelleres Abgleichen auf leistungsschwächeren Geräten möchten

Vermeiden Sie die Abhängigkeit von Graustufen, wenn:

  • Farbe der Hauptunterschied zwischen ähnlichen Zielen ist
  • Sie versuchen, aktive und inaktive Zustände anhand der Farbe zu unterscheiden

Dynamische Skalierung

Wenn dasselbe Makro auf Geräten mit unterschiedlichen Auflösungen läuft, kann die dynamische Skalierung helfen, die Bilderkennung nutzbar zu halten.

Verwenden Sie dynamische Skalierung, wenn:

  • die Vorlage auf einem Gerät erfasst, aber auf einem anderen ausgeführt wurde
  • dasselbe App-Layout über Telefone oder Tablets hinweg skaliert wird

Aber wenn die Benutzeroberfläche auf einem einzelnen Gerät bereits sehr konsistent ist, ist eine gut zugeschnittene Vorlage plus eine gute Region normalerweise stabiler als eine übermäßige Skalierungsanpassung.

Vorlagen aggressiv zuschneiden

Eine gute Vorlage sollte nur enthalten, was das Ziel einzigartig macht.

Gute Vorlage:

  • das Symbol selbst
  • der einzigartige Beschriftungsbereich
  • das minimale stabile visuelle Muster

Schlechte Vorlage:

  • großer umgebender Leerraum
  • Hintergründe, die animiert sind
  • Inhalte, die sich bei jedem Durchlauf ändern
  • benachbarte Elemente, die nicht zum Ziel gehören

Zwei-Stufen-Erkennung für schwierige Bildschirme

Wenn ein Bildschirm viel Rauschen aufweist, verwenden Sie einen gestuften Ansatz:

  1. Auf ein stabiles Anker-Element warten
  2. Den Suchbereich eingrenzen
  3. Das endgültige Ziel innerhalb dieses Bereichs erkennen
Screen:wait("settings-title.jpg", 5000)

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

Empfohlenes Muster

Für anspruchsvolle Makros ist dies normalerweise die sicherste Reihenfolge:

  1. Auf einen stabilen Zustand warten
  2. Den Suchbereich einschränken
  3. Bild- oder Texterkennung bewusst wählen
  4. Den Score erst nach Reduzierung der Mehrdeutigkeit anpassen
  5. Das Ergebnis überprüfen, bevor Sie fortfahren

Verwandte Seiten