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 opcionalEstructura 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; cuandoopciones.find_allno 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 tablaCuando
opciones.find_alles true, devuelve varios valores cuya confianza no es inferior aopciones.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 mediantescreen.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_allpara encontrar todos los elementos coincidentes de la imagen que superen el umbral de confianza - Permite usar el campo
downscalepara reducir la precisión de la imagen durante la búsqueda y aumentar su velocidad - Permite usar
maskpara 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.