화면에서 이미지 찾기 (screen.find_image)
선언
가로 좌표, 세로 좌표 = screen.find_image(이미지 [, 신뢰도, 왼쪽, 위쪽, 오른쪽, 아래쪽 ])
검색 결과 = screen.find_image(이미지 [, 옵션, 왼쪽, 위쪽, 오른쪽, 아래쪽 ])
매개변수
-
이미지
문자열형. 찾을 이미지이며 png 또는 jpeg 형식의 이미지 데이터일 수 있습니다.
이미지 객체. 이미지 객체를 사용할 수도 있습니다(이미지 객체 모듈 (image) 참고).
문자열형. 찾을 이미지 파일 경로이며 유효한 경로가 아니면 데이터로 해석합니다. -
신뢰도
정수형 선택 매개변수. 기본값은 95이며 찾은 위치의 신뢰도가 95 이상일 때만 반환합니다. 신뢰도 범위는 0 ~ 100입니다. -
옵션
테이블형 선택 매개변수매개변수 구조
{
find_all = false | true, -- 선택 매개변수. true이면 일치하는 모든 항목을 찾고 테이블로 반환합니다. 기본값은 false입니다.
confidence_threshold = number_value(0.0 ~ 100.0), -- 선택 매개변수. 신뢰도가 이 값보다 높은 결과를 유효한 것으로 간주합니다. 기본값은 95입니다.
downscale = number_value(0.1 ~ 1.0), -- 선택 매개변수. 값이 작을수록 빠르지만 정확도가 낮아집니다. 정확도 우선 기본값은 1.0입니다.
mask = image_object, -- 선택 매개변수. 찾을 이미지의 유효 영역을 표시하며 img와 같은 크기의 이진 이미지입니다. 흰색은 유효 영역, 검은색은 무효 영역입니다. 기본적으로 img의 모든 영역이 유효합니다.
} -
왼쪽, 위쪽, 오른쪽, 아래쪽
정수형 선택 매개변수. 검색 영역이며 기본값은 전체 화면입니다.
반환값
-
가로 좌표, 세로 좌표
정수형.옵션.find_all이 true가 아니면 조건을 만족하는 결과 중 가장 신뢰도가 높은 좌표만 반환합니다. 신뢰도 조건을 만족하는 좌표가 없으면 -1, -1을 반환합니다. -
검색 결과
테이블형옵션.find_all이 true이면 신뢰도가 옵션.confidence_threshold 이상인 여러 값을 반환합니다.
{
{
x = integer_value,
y = integer_value,
confidence = number_value(0.0 ~ 100.0),
},
...
}
설명
화면에서 이미지 위치를 찾습니다. 이 함수는 image.cv 모듈을 참조합니다.
이 함수의 좌표 매개변수와 반환값은 모두screen.init함수로 초기화한 좌표계의 영향을 받습니다.
주의: 여러 해상도를 지원해야 한다면 해상도가 가장 낮은 기기에서 화면을 캡처하는 것이 좋습니다. 고해상도 캡처 이미지는 저해상도 기기에서 일치시킬 수 없습니다.
1.3.8 이상 버전의 개선 사항
- find_all 모드로 신뢰도 임계값을 넘는 모든 일치 항목을 찾을 수 있습니다.
- downscale 필드로 이미지 정확도를 낮춰 검색 속도를 높일 수 있습니다.
- mask로 이미지의 유효 영역을 표시하여 불규칙한 형태의 이미지를 찾을 수 있습니다.
예제
-- 예제 1(XXT 색상 추출기에서 Shift + 마우스 왼쪽 버튼으로 이미지 영역을 선택하면 이러한 코드를 바로 생성할 수 있습니다):
x, y = screen.find_image( -- 원본 이미지 위치 왼쪽 위: 354, 274 | 오른쪽 아래: 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)
--
-- 예제 2:
img = image.load_file("/var/mobile/1.png")
x, y = screen.find_image(img)
x, y = screen.find_image(img, 95)
--
-- 예제 4:
x, y = screen.find_image("/var/mobile/1.png", 95, 0, 0, 639, 1135)
-- 예제 5(1.3.8에서 추가): 전체 화면에서 여러 대상을 찾습니다.
img = image.load_file(XXT_SCRIPTS_PATH..'/1.png')
rets = screen.find_image(img, {
confidence_threshold = 90, -- 신뢰도가 이 값보다 높은 결과가 유효합니다.
downscale = 0.5, -- 정확도를 낮춰 속도를 높입니다.
find_all = true, -- 일치하는 모든 항목을 찾아 모든 항목의 좌표 테이블을 반환합니다.
}, 0, 0, 0, 0) -- 0, 0, 0, 0 영역은 전체 화면을 의미합니다.
설명: Lua 소스 코드의 문자열에서 \x로 시작하고 뒤에 두 자리 16진수가 오면 해당 숫자로 인코딩된 단일 바이트를 나타냅니다. 예를 들어 \x58은 X 문자를 의미합니다. 출력 가능한 문자 부분은 ASCII 인코딩을 참고하십시오.
복잡한 예제
-- 인터넷에서 작은 이미지(XXTouch 아이콘 일부)를 다운로드한 뒤 화면에서 찾아 탭합니다.
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
참고: 위 코드에서는 이 장에서 다루지 않는 함수 sys.alert, image.load_data, touch.tap, http.get를 사용했습니다.