본문으로 건너뛰기

감지 전략

매크로가 단순한 탭을 넘어서면, 안정성에 있어 가장 중요한 요소는 클릭 자체가 아니라 대상을 어떻게 감지하느냐입니다. 고급 매크로는 자동화하는 UI에 맞는 올바른 감지 전략을 선택할 때 가장 잘 작동합니다.

가장 단순하면서 안정적인 신호로 시작

설정을 조정하기 전에 먼저 가장 안정적인 신호를 선택하세요:

  1. 대상 위치가 절대 변하지 않을 때만 고정 좌표 사용
  2. 시각적 모양이 안정적이고 구별되는 경우 이미지 감지 사용
  3. 아이콘보다 라벨을 인식하기 쉬운 경우 텍스트 감지 사용
  4. 대상이 대략 어디에 나타날지 이미 알고 있을 때 더 작은 Region() 사용

여러 전략이 작동한다면, 검색 영역이 가장 작고 모호함이 가장 적은 것을 선호하세요.

Screen vs Region

가장 흔한 성능 실수는 모든 것을 전체 화면에서 검색하는 것입니다.

다음과 같은 경우 Screen을 사용하세요:

  • 대상이 거의 어디든 나타날 수 있을 때
  • 매크로의 첫 버전을 만들고 있을 때
  • 새로운 앱 흐름을 탐색하고 있을 때

다음과 같은 경우 Region을 사용하세요:

  • 대상이 항상 UI의 알려진 섹션에 나타날 때
  • 화면에 반복되는 아이콘이나 반복되는 텍스트가 있을 때
  • 더 빠르고 안정적인 매칭을 원할 때
local actionArea = Region(900, 1600, 1080, 2200)
actionArea:click("continue-button.jpg")

Fit Region 기법

가장 유용한 고급 기법 중 하나는 fit region입니다.

핵심 아이디어는:

  1. Screen:find()를 사용하여 객체를 한 번 찾기
  2. result:getRegion()을 사용하여 해당 일치 항목을 맞춤 Region으로 변환
  3. 객체 크기가 안정적으로 유지되는 경우 다음 검색에 해당 맞춤 영역 재사용

다음과 같은 경우에 잘 작동합니다:

  • 객체가 항상 동일한 너비와 높이를 가질 때
  • 객체 내용은 변경될 수 있지만 컨테이너 영역은 일관되게 유지될 때
  • 전체 화면 검색이 비용이 많이 들고 자주 반복될 때
local result = Screen:find("inventory-panel.jpg")
if result then
local fitRegion = result:getRegion()
local collectButton = fitRegion:find("collect-button.jpg")
if collectButton then
fitRegion:click("collect-button.jpg")
end
end

이것이 강력한 이유:

  • 첫 번째 전체 화면 검색이 비용이 많이 드는 단계
  • 객체가 한 번 발견되면 이후의 모든 검색은 맞춤 경계로 제한
  • 이것은 반복되는 흐름에서 OCR 및 이미지 매칭 비용을 크게 줄일 수 있음

다음과 같은 경우 fit region을 사용하세요:

  • 안정적인 패널, 카드, 팝업, 슬롯 또는 컨테이너가 있을 때
  • 매크로가 동일하게 일치된 객체 내에서 반복적으로 상호작용할 때
  • 동일한 객체가 다른 위치에 나타나지만 동일한 크기를 유지할 때

다음과 같은 경우 fit region 사용을 피하세요:

  • 객체가 화면이나 기기 간에 크게 크기가 조정될 때
  • 대상 영역이 동적으로 확장되거나 축소될 때
  • 첫 번째 일치 항목이 너무 일반적이어서 잘못된 컨테이너에 바인딩될 수 있을 때

실제로 fit region은 좌표를 하드코딩하지 않고 느린 Screen 매크로를 빠른 Region 매크로로 변환하는 가장 좋은 방법 중 하나입니다.

이미지 감지 vs 텍스트 감지

다음과 같은 경우 이미지 감지를 선호하세요:

  • 대상이 주로 그래픽일 때
  • UI 언어가 변경될 수 있을 때
  • 텍스트가 양식화되어 있거나 버튼 안에 렌더링될 때
  • 텍스트가 너무 작거나 대비가 낮아 OCR이 어려울 때

다음과 같은 경우 텍스트 감지를 선호하세요:

  • 라벨이 위치는 변경되지만 동일한 문구를 유지할 때
  • 동일한 시각적 컴포넌트가 여러 테마나 상태로 나타날 때
  • 버튼 모양은 변경되지만 라벨은 읽을 수 있게 유지될 때
  • 앱에 의해 동적으로 생성된 텍스트를 매칭해야 할 때

단어별 vs 줄별 OCR

텍스트 감지를 사용할 때 감지 방법이 중요합니다:

  • 단일 단어나 매우 짧은 라벨에는 setDetectionMethod(1) 사용
  • 대상이 구문이나 전체 줄인 경우 setDetectionMethod(2) 사용
Screen:click("Login", ClickParams():setDetectionType("TEXT"):setDetectionMethod(1))
Screen:wait("Your session has expired", 5000, FinderParams():setDetectionType("TEXT"):setDetectionMethod(2))

일치 점수를 점진적으로 조정

일치 점수가 너무 높으면 누락이 발생합니다. 점수가 너무 낮으면 오탐이 발생합니다.

실용적인 조정 과정:

  1. 기본 점수로 시작
  2. 대상이 누락되면 점수를 약간 낮추기
  3. 잘못된 것이 매칭되면 점수를 약간 높이기
  4. 둘 다 발생하면 점수를 더 변경하기 전에 검색 영역을 줄이기

대부분의 경우 Region()으로 모호성을 줄이는 것이 일치 점수를 너무 공격적으로 올리는 것보다 안전합니다.

도움이 될 때만 그레이스케일 사용

그레이스케일은 속도를 향상시킬 수 있고 때로는 일관성을 개선할 수도 있지만, 무조건 더 좋은 것은 아닙니다.

다음과 같은 경우 그레이스케일을 사용하세요:

  • 대상이 색상보다 모양으로 더 정의될 때
  • 조명이나 색상 변화로 인해 매칭이 불안정할 때
  • 저사양 기기에서 더 빠른 매칭을 원할 때

다음과 같은 경우 그레이스케일에 의존하는 것을 피하세요:

  • 색상이 유사한 대상 간의 주요 차이점일 때
  • 색상으로 활성 및 비활성 상태를 구분하려 할 때

동적 스케일링

동일한 매크로가 해상도가 다른 기기에서 실행되는 경우, 동적 스케일링은 이미지 감지가 계속 사용 가능하도록 유지하는 데 도움이 될 수 있습니다.

다음과 같은 경우 동적 스케일링을 사용하세요:

  • 템플릿이 한 기기에서 캡처되었지만 다른 기기에서 실행될 때
  • 동일한 앱 레이아웃이 폰이나 태블릿에서 크기가 조정될 때

하지만 UI가 이미 단일 기기에서 매우 일관적이라면, 잘 다듬어진 템플릿과 좋은 영역이 스케일링을 과도하게 조정하는 것보다 일반적으로 더 안정적입니다.

템플릿 적극적으로 자르기

좋은 템플릿은 대상을 고유하게 만드는 요소만 포함해야 합니다.

좋은 템플릿:

  • 아이콘 자체
  • 고유한 라벨 영역
  • 최소한의 안정적인 시각적 패턴

나쁜 템플릿:

  • 주변의 큰 여백
  • 애니메이션되는 배경
  • 실행할 때마다 변경되는 콘텐츠
  • 대상의 일부가 아닌 주변 요소

어려운 화면을 위한 2단계 감지 사용

화면이 복잡한 경우 단계적 접근 방식을 사용하세요:

  1. 안정적인 앵커 요소 대기
  2. 검색 영역 좁히기
  3. 해당 영역 내에서 최종 대상 감지
Screen:wait("settings-title.jpg", 5000)

local footerArea = Region(0, 1700, 1080, 2400)
footerArea:click("save-button.jpg")

권장 패턴

고급 매크로의 경우 일반적으로 가장 안전한 순서는 다음과 같습니다:

  1. 안정적인 상태 대기
  2. 검색 영역 제한
  3. 의도적으로 이미지 또는 텍스트 감지 선택
  4. 모호성을 줄인 후에만 점수 조정
  5. 계속하기 전에 결과 확인

관련 페이지