Saltar al contenido principal

Buscar una imagen en la pantalla (screen.find_image)

Declaración

coordenada_x, coordenada_y = screen.find_image(imagen [, confianza, izquierda, arriba, derecha, abajo ])
resultado_de_búsqueda = screen.find_image(imagen [, opciones, izquierda, arriba, derecha, abajo ])

Parámetros

  • imagen
    Tipo cadena, imagen que se buscará; puede ser una imagen png o jpeg expresada como datos de imagen
    Objeto de imagen, o un objeto de imagen (consulta el módulo de objetos de imagen (image))
    Tipo texto, ruta del archivo de imagen que se buscará; si no es una ruta válida, se interpreta como datos

  • confianza
    Tipo entero, parámetro opcional; el valor predeterminado es 95. Solo devuelve posiciones con una confianza de al menos 95. El intervalo de confianza es 0 ~ 100

  • opciones
    Tipo tabla, parámetro opcional

    Estructura de los parámetros
    {
    find_all = false | true, -- Parámetro opcional; si es true, devuelve todos los elementos coincidentes en una tabla. El valor predeterminado es false
    confidence_threshold = number_value(0.0 ~ 100.0), -- Parámetro opcional; los resultados cuya confianza supere este valor se consideran válidos. El valor predeterminado es 95
    downscale = number_value(0.1 ~ 1.0), -- Parámetro opcional; cuanto menor sea el valor, mayor será la velocidad y menor la precisión. El valor predeterminado es 1.0, con prioridad para la precisión
    mask = image_object, -- Parámetro opcional; marca la región válida de la imagen que se buscará. Es una imagen binaria del mismo tamaño que img: el blanco es válido y el negro no es válido. De forma predeterminada, toda la región de img es válida
    }
  • izquierda, arriba, derecha, abajo
    Tipo entero, parámetros opcionales que representan el área de búsqueda; el valor predeterminado es pantalla completa

Valores devueltos

  • coordenada x, coordenada y
    Tipo entero; cuando opciones.find_all no es true, solo devuelve las coordenadas del resultado válido con mayor confianza. Si no se encuentra ninguna coordenada que alcance la confianza requerida, devuelve -1, -1

  • resultado de búsqueda
    Tipo tabla

    Cuando opciones.find_all es true, devuelve varios valores cuya confianza no es inferior a opciones.confidence_threshold
    {
    {
    x = integer_value,
    y = integer_value,
    confidence = number_value(0.0 ~ 100.0),
    },
    ...
    }

Descripción

Busca la posición de una imagen en la pantalla; esta función utiliza el módulo image.cv
Los parámetros de coordenadas y los valores devueltos de esta función están condicionados por el sistema de coordenadas inicializado mediante screen.init
Nota: para admitir varias resoluciones, se recomienda tomar la captura en el dispositivo con menor resolución; una captura de alta resolución no se puede encontrar en un dispositivo de menor resolución

Mejoras desde la versión 1.3.8

  • Permite usar el modo find_all para encontrar todos los elementos coincidentes de la imagen que superen el umbral de confianza
  • Permite usar el campo downscale para reducir la precisión de la imagen durante la búsqueda y aumentar su velocidad
  • Permite usar mask para marcar la región válida de la imagen y buscar imágenes de formas irregulares

Ejemplo

XXT: herramienta de selección de color para Windows.zip

-- Ejemplo 1 (usa la herramienta de selección de color de XXT: mantén pulsada la tecla Shift y arrastra con el botón izquierdo del ratón para seleccionar un área de la imagen; el código se genera directamente):
x, y = screen.find_image( -- Posición en la imagen original; esquina superior izquierda: 354, 274 | esquina inferior derecha: 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)
--
-- Ejemplo 2:
img = image.load_file("/var/mobile/1.png")
x, y = screen.find_image(img)
x, y = screen.find_image(img, 95)
--
-- Ejemplo 4:
x, y = screen.find_image("/var/mobile/1.png", 95, 0, 0, 639, 1135)

-- Ejemplo 5 (añadido en la versión 1.3.8): buscar varios objetivos en toda la pantalla
img = image.load_file(XXT_SCRIPTS_PATH..'/1.png')
rets = screen.find_image(img, {
confidence_threshold = 90, -- Los resultados cuya confianza supere este valor son válidos
downscale = 0.5, -- Reduce la precisión para acelerar la búsqueda
find_all = true, -- Indica que se deben buscar todos los elementos coincidentes y devolver su tabla de coordenadas
}, 0, 0, 0, 0) -- El área 0, 0, 0, 0 representa toda la pantalla

Nota: en el código fuente Lua, cuando una cadena comienza por \x y le siguen dos dígitos hexadecimales, representa un byte individual codificado con ese valor. Por ejemplo, \x58 representa el carácter X; consulta «Codificación ASCII» para ver la parte de caracteres imprimibles.

Ejemplo complejo

-- Descarga una imagen pequeña de Internet (parte del icono de XXTouch), la busca en la pantalla y hace clic en ella
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

Nota: el código anterior usa las funciones sys.alert, image.load_data, touch.tap y http.get, que no pertenecen a este capítulo.