Zum Hauptinhalt springen

Bild auf dem Bildschirm suchen (screen.find_image)

Deklaration

x, y = screen.find_image(Bild [, Konfidenz, links, oben, rechts, unten])
suchergebnis = screen.find_image(Bild [, Optionen, links, oben, rechts, unten])

Parameter

  • Bild
    Zeichenkette; zu suchendes Bild, kann Bilddaten im PNG- oder JPEG-Format enthalten
    Bildobjekt oder ein Bildobjekt (siehe Bildobjektmodul (image))
    Text; Pfad zur zu suchenden Bilddatei. Ist der Pfad ungültig, wird er als Daten interpretiert.

  • Konfidenz
    Ganzzahl; optional, standardmäßig 95. Nur Positionen mit einer Konfidenz von mindestens 95 werden zurückgegeben, Bereich 0 ~ 100

  • Optionen
    Tabelle; optional

    Parameterstruktur
    {
    find_all = false | true, -- optional; bei true werden alle Treffer in einer Tabelle zurückgegeben, standardmäßig false
    confidence_threshold = number_value(0.0 ~ 100.0), -- optional; Ergebnisse über diesem Konfidenzwert gelten als gültig, standardmäßig 95
    downscale = number_value(0.1 ~ 1.0), -- optional; je kleiner der Wert, desto höher die Geschwindigkeit und desto geringer die Genauigkeit, standardmäßig 1.0 (Genauigkeit priorisiert)
    mask = image_object, -- optional; markiert den gültigen Bereich des zu suchenden Bildes. Binärisiertes Bild mit denselben Abmessungen wie img, Weiß gültig und Schwarz ungültig. Standardmäßig ist der gesamte Bereich von img gültig.
    }
  • Links, oben, rechts, unten
    Ganzzahlen; optional, Suchbereich, standardmäßig der gesamte Bildschirm

Rückgabewerte

  • X- und Y-Koordinate
    Ganzzahlen; wenn Optionen.find_all nicht true ist, werden nur die Koordinaten des zuverlässigsten passenden Ergebnisses zurückgegeben. Wenn keine Koordinate die erforderliche Konfidenz erfüllt, wird -1, -1 zurückgegeben.

  • Suchergebnis
    Tabelle

    Wenn Optionen.find_all true ist, werden mehrere Werte mit einer Konfidenz von mindestens Optionen.confidence_threshold zurückgegeben.
    {
    {
    x = integer_value,
    y = integer_value,
    confidence = number_value(0.0 ~ 100.0),
    },
    ...
    }

Beschreibung

Sucht die Position eines Bildes auf dem Bildschirm. Diese Funktion verwendet das Modul image.cv.
Die Koordinatenparameter und Rückgabewerte dieser Funktion werden vom durch screen.init initialisierten Koordinatensystem beeinflusst.
Hinweis: Für Kompatibilität mit mehreren Auflösungen sollte der Screenshot auf dem Gerät mit der kleinsten Auflösung erstellt werden; Screenshots mit hoher Auflösung können auf Geräten mit niedriger Auflösung nicht gefunden werden.

Verbesserungen ab Version 1.3.8

  • Der find_all-Modus findet alle Treffer im Bild, die den Konfidenzschwellenwert überschreiten.
  • Mit dem Feld downscale kann die Bildgenauigkeit für eine schnellere Bildsuche reduziert werden.
  • Mit mask können gültige Bereiche im Bild markiert werden, um Bilder unregelmäßiger Formen zu suchen.

Beispiel

XXT-Farbwähler für Windows.zip

-- Beispiel 1 (mit dem XXT-Farbwähler per Shift + linker Maustaste einen Bildbereich auswählen, um diesen Code direkt zu erzeugen):
x, y = screen.find_image( -- Position im Originalbild oben links: 354, 274 | unten rechts: 358, 284
"\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\x00\x00\x04\x00\x00\x00\x0a\x08\x02\x00\x00\x00\x1c\x99\x68\x59\x00\x00\x00\x61\x49\x44\x41\x54\x78\xda\x63\x78\xfd\xf4\xda\xff\xff\xff\xff\xfd\xfb\xf7\xed\xcb\x5b\x86\xf7\xaf\x1f\xfc\x87\x01\x86\x2f\x1f\x5f\x02\xa9\xef\xa7\xce\x7c\xdd\xb1\x9b\xe1\xe7\xf7\xcf\x40\xce\xeb\xb2\xea\x7b\xb2\x6a\x0c\x7f\xff\xfe\x01\x72\x9e\x78\x06\x82\x38\x20\xdd\xbf\x7e\xdd\x57\xd4\x82\x72\x7e\xdd\xba\x0d\x64\x41\x39\x08\xd3\x80\x38\x6b\xe3\x7f\x86\x2a\x30\x02\x72\x8c\xa6\x40\x39\x00\xd5\x7b\x5f\x2e\xfd\xba\xd5\x32\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82"
, 95, 0, 0, 639, 1135)
--
-- Beispiel 2:
img = image.load_file("/var/mobile/1.png")
x, y = screen.find_image(img)
x, y = screen.find_image(img, 95)
--
-- Beispiel 4:
x, y = screen.find_image("/var/mobile/1.png", 95, 0, 0, 639, 1135)

-- Beispiel 5 (neu ab 1.3.8): mehrere Ziele auf dem gesamten Bildschirm suchen
img = image.load_file(XXT_SCRIPTS_PATH..'/1.png')
rets = screen.find_image(img, {
confidence_threshold = 90, -- Ergebnisse über diesem Konfidenzwert sind gültig
downscale = 0.5, -- Genauigkeit reduzieren und Geschwindigkeit erhöhen
find_all = true, -- alle Treffer suchen und eine Koordinatentabelle aller Treffer zurückgeben
}, 0, 0, 0, 0) -- Der Bereich 0, 0, 0, 0 steht für den gesamten Bildschirm

Hinweis: Im Lua-Quelltext steht in einer Zeichenkette \x gefolgt von zwei Hexadezimalziffern für ein einzelnes mit dieser Zahl codiertes Byte. Beispielsweise steht \x58 für das Zeichen X; siehe den druckbaren Teil der ASCII-Codierung.

Komplexes Beispiel

-- Ein kleines Bild (einen Teil des XXTouch-Symbols) aus dem Internet herunterladen, auf dem Bildschirm suchen und antippen
local c, h, r = http.get("https://www.xxtouch.app/img/find_image_test.png", 10)
if (c == 200) then
local img = image.load_data(r)
if img then
x, y = screen.find_image(img, 95)
if x~=-1 then
touch.tap(x, y)
else
sys.alert("没有在屏幕上找到 XXTouch 图标")
end
else
sys.alert("下载的数据不是有效的图片")
end
else
sys.alert("下载失败")
end

Hinweis: Der obige Code verwendet die Funktionen sys.alert, image.load_data, touch.tap und http.get, die nicht zu diesem Kapitel gehören.