Tìm hình ảnh trên màn hình (screen.find_image)
Khai báo
x, y = screen.find_image(image [, confidence, left, top, right, bottom ])
results = screen.find_image(image [, options, left, top, right, bottom ])
Tham số
-
image
String: dữ liệu hình ảnh để tìm kiếm, định dạng PNG hoặc JPEG.
Đối tượng hình ảnh: đối tượng hình ảnh (xem Mô-đun hình ảnh (image)).
Văn bản: đường dẫn đến tệp hình ảnh cần tìm. Nếu đường dẫn không hợp lệ, giá trị này sẽ được diễn giải như dữ liệu hình ảnh thô. -
confidence
Số nguyên, tùy chọn. Mặc định 95. Chỉ trả về vị trí có độ tin cậy không nhỏ hơn giá trị này. Phạm vi: 0 ~ 100. -
options
Bảng, tùy chọn.Cấu trúc
{
find_all = false | true, -- Tùy chọn. Khi true, tìm tất cả các kết quả; giá trị trả về là một bảng. Mặc định false
confidence_threshold = number_value(0.0 ~ 100.0), -- Tùy chọn. Kết quả có độ tin cậy >= giá trị này là hợp lệ. Mặc định 95
downscale = number_value(0.1 ~ 1.0), -- Tùy chọn. Giảm kích thước = nhanh hơn nhưng chính xác hơn. Mặc định 1.0 (chính xác trước)
mask = image_object, -- Tùy chọn. Đánh dấu các khu vực hợp lệ của hình ảnh mẫu. Ảnh nhị phân có cùng kích thước như img; trắng = hợp lệ, đen = không hợp lệ. Mặc định: tất cả các khu vực hợp lệ
} -
left, top, right, bottom
Số nguyên, tùy chọn. Khu vực tìm kiếm. Mặc định: toàn màn hình.
Giá trị trả về
-
x, y
Số nguyên. Khioptions.find_allkhông đúng, chỉ trả về tọa độ của kết quả hợp lệ có độ tin cậy cao nhất. Nếu không có kết quả nào đáp ứng ngưỡng, trả về -1, -1. -
results
Bảng.Khi
options.find_alllà true, trả về nhiều kết quả có độ tin cậy>= options.confidence_threshold{
{
x = integer_value,
y = integer_value,
confidence = number_value(0.0 ~ 100.0),
},
...
}
Mô tả
Tìm vị trí của một hình ảnh nhỏ trên màn hình. Hàm này dựa trên mô-đun image.cv.
Các tham số tọa độ và giá trị trả về tuân theo hệ tọa độ được khởi tạo quascreen.init.
Lưu ý: Để tương thích với nhiều độ phân giải, khuyến nghị chụp hình mẫu trên thiết bị có độ phân giải thấp nhất; các màn hình chụp từ thiết bị có độ phân giải cao hơn có thể không được tìm thấy trên màn hình có độ phân giải thấp hơn.
Cải tiến trong phiên bản 1.3.8 và sau đó
- Hỗ trợ tìm tất cả các kết quả trên ngưỡng độ tin cậy thông qua chế độ find_all.
- Hỗ trợ downscale để tăng tốc bằng cách giảm độ chính xác.
- Hỗ trợ mask để đánh dấu các khu vực hợp lệ trong hình mẫu cho việc khớp với hình dạng bất thường.
Ví dụ
-- Ví dụ 1 (Sử dụng XXT Picker: Nhấn Shift + Click trái để框 khu vực; mã như thế này được tạo):
x, y = screen.find_image( -- Vị trí ban đầu TL: 354,274 | BR: 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)
--
-- Ví dụ 2:
img = image.load_file("/var/mobile/1.png")
x, y = screen.find_image(img)
x, y = screen.find_image(img, 95)
--
-- Ví dụ 4:
x, y = screen.find_image("/var/mobile/1.png", 95, 0, 0, 639, 1135)
-- Ví dụ 5 (thêm trong 1.3.8): tìm nhiều mục tiêu trên toàn màn hình
img = image.load_file(XXT_SCRIPTS_PATH..'/1.png')
rets = screen.find_image(img, {
confidence_threshold = 90, -- hợp lệ nếu độ tin cậy >= giá trị này
downscale = 0.5, -- tăng tốc bằng cách giảm độ chính xác
find_all = true, -- tìm tất cả các kết quả; trả về một mảng các mục nhập khớp
}, 0, 0, 0, 0) -- khu vực 0,0,0,0 có nghĩa là toàn màn hình
Lưu ý: Trong chuỗi văn bản Lua, một chuỗi bắt đầu với \x tiếp theo hai chữ số thập lục tiến chỉ định một byte có giá trị đó. Xem tài liệu ASCII cho các ký tự in được.
Ví dụ phức tạp
-- Tải một hình ảnh nhỏ (phần của biểu tượng XXTouch) và sau đó tìm nó trên màn hình và nhấp vào
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("Biểu tượng XXTouch không được tìm thấy trên màn hình")
end
else
sys.alert("Dữ liệu tải xuống không phải là một hình ảnh hợp lệ")
end
else
sys.alert("Tải xuống thất bại")
end
Lưu ý: Sử dụng các hàm ngoài chương này: sys.alert, image.load_data, touch.tap, http.get