Rechercher une image sur l’écran (screen.find_image)
Déclaration
coordonnée horizontale, coordonnée verticale = screen.find_image(image [, confiance, gauche, haut, droite, bas ])
résultat de recherche = screen.find_image(image [, options, gauche, haut, droite, bas ])
Paramètres
-
image
Chaîne, image à rechercher, au format png ou jpeg
Objet image, ou objet image (voir le module d’objet image (image))
Chaîne, chemin du fichier image à rechercher ; si le chemin n’est pas valide, l’analyse est effectuée comme pour des données -
confiance
Entier, paramètre facultatif, 95 par défaut ; la position trouvée n’est renvoyée que si sa confiance est au moins égale à 95. Valeur comprise entre 0 et 100 -
options
Type table, paramètre facultatifStructure des paramètres
{
find_all = false | true, -- Paramètre facultatif ; true renvoie tous les résultats correspondants, sous forme de table. false par défaut
confidence_threshold = number_value(0.0 ~ 100.0), -- Paramètre facultatif ; un résultat dont la confiance dépasse cette valeur est considéré comme valide. 95 par défaut
downscale = number_value(0.1 ~ 1.0), -- Paramètre facultatif ; plus la valeur est petite, plus la recherche est rapide et moins elle est précise. 1.0 par défaut, priorité à la précision
mask = image_object, -- Paramètre facultatif ; indique la zone valide de l’image à rechercher. Il s’agit d’une image binaire de même taille que img, où le blanc est la zone valide et le noir la zone invalide. Par défaut, toute la zone de img est valide
} -
gauche, haut, droite, bas
Entiers, paramètres facultatifs, zone de recherche, plein écran par défaut
Valeur de retour
-
coordonnée horizontale, coordonnée verticale
Entiers ; lorsqueoptions.find_alln’est pas true, renvoie uniquement les coordonnées du résultat le plus fiable répondant aux critères. Renvoie -1, -1 si aucune coordonnée n’atteint la confiance requise -
résultat de recherche
Type tableLorsque options.find_all vaut true, renvoie plusieurs valeurs dont la confiance est au moins égale à options.confidence_threshold
{
{
x = integer_value,
y = integer_value,
confidence = number_value(0.0 ~ 100.0),
},
...
}
Description
Recherche la position d’une image sur l’écran ; cette fonction utilise le module image.cv
Les paramètres et valeurs de retour des coordonnées de cette fonction dépendent du système de coordonnées initialisé parscreen.init
Remarque : pour prendre en charge plusieurs résolutions, il est recommandé de capturer l’écran sur l’appareil doté de la plus petite résolution ; une capture haute résolution ne peut pas être mise en correspondance sur un appareil de petite résolution
Améliorations à partir de la version 1.3.8
- Permet d’utiliser le mode find_all pour trouver toutes les correspondances de l’image qui dépassent le seuil de confiance
- Permet d’utiliser le champ downscale pour réduire la précision de l’image et accélérer la recherche
- Permet d’utiliser mask pour marquer les zones valides de l’image et rechercher des images de forme irrégulière
Exemple
XXT Color Picker pour Windows.zip
-- Exemple 1 (la sélection d’une zone avec Shift + clic gauche dans l’outil de couleur XXT pour Windows génère directement ce code) :
x, y = screen.find_image( -- Position dans l’image d’origine, coin supérieur gauche : 354, 274 | coin inférieur droit : 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)
--
-- Exemple 2 :
img = image.load_file("/var/mobile/1.png")
x, y = screen.find_image(img)
x, y = screen.find_image(img, 95)
--
-- Exemple 4 :
x, y = screen.find_image("/var/mobile/1.png", 95, 0, 0, 639, 1135)
-- Exemple 5 (ajouté en 1.3.8) : recherche de plusieurs cibles sur tout l’écran
img = image.load_file(XXT_SCRIPTS_PATH..'/1.png')
rets = screen.find_image(img, {
confidence_threshold = 90, -- Résultats dont la confiance est supérieure à cette valeur
downscale = 0.5, -- Réduit la précision pour accélérer la recherche
find_all = true, -- Trouve tous les résultats correspondants et renvoie leurs coordonnées dans une table
}, 0, 0, 0, 0) -- Une zone 0, 0, 0, 0 représente tout l’écran
Description : dans le code source Lua, une chaîne commençant par \x, suivie de deux chiffres hexadécimaux, représente un octet encodé par ce nombre. Par exemple, \x58 représente le caractère X ; pour la partie imprimable, consultez « Codage ASCII »
Exemple complexe
-- Télécharge une petite image sur Internet (une partie de l’icône XXTouch), puis la recherche sur l’écran et clique dessus
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
Remarque : le code ci-dessus utilise les fonctions hors de ce chapitre sys.alert, image.load_data, touch.tap et http.get