블로그로 돌아가기
사용법 · · 9 분 소요

이미지 인식으로 GUI 조작을 자동화하는 원리와 사용법

매크로를 녹화하고 재생하다 보면 많은 사람이 “어제는 작동했는데 오늘은 클릭 위치가 어긋난다”는 현상을 겪습니다. 대부분은 녹화된 매크로가 ‘화면상의 고정 좌표’를 기준으로 움직이기 때문입니다. 창이 다른 위치에서 열리거나 화면 해상도가 바뀌거나 다른 모니터에서 재생되는 등 상황이 달라지면 클릭이 원래 의도한 곳과 다른 위치에 실행됩니다. 이러한 근본적인 문제를 해결하는 것이 바로 ‘이미지 인식’을 이용한 자동화입니다.

이미지 인식은 좌표가 아니라 ‘보이는 모양’을 기준으로 화면상의 요소를 찾는 기술입니다. 클릭하려는 버튼의 작은 이미지를 미리 등록해 두면 재생할 때 도구가 전체 화면을 탐색하여 해당 이미지와 일치하는 위치를 찾습니다. 버튼이 어디로 이동하더라도 모양만 같으면 정확히 찾아 클릭할 수 있다는 것이 이미지 인식의 강점입니다.

이미지 인식은 어떻게 요소를 찾는가

원리는 간단합니다. 먼저 표식으로 삼을 요소, 예를 들어 ‘전송’ 버튼이나 특정 아이콘의 작은 이미지(템플릿 이미지)를 캡처해 저장합니다. 매크로를 실행하면 도구가 그 순간의 화면을 캡처하고 화면에서 템플릿 이미지와 일치하는 영역을 찾습니다. 일치하는 위치를 찾으면 그 중심 좌표를 반환하고, 매크로는 그곳으로 마우스를 이동해 클릭합니다.

여기서 중요한 설정이 ‘일치 임곗값(매칭 정확도)’입니다. 100% 완전히 일치하지 않더라도 예를 들어 90% 이상 비슷하면 ‘일치’로 판정하도록 조정할 수 있습니다. 임곗값을 높이면 오탐은 줄지만 아주 작은 외관 차이 때문에 대상을 찾지 못할 수 있습니다. 반대로 낮추면 유연성은 높아지지만 비슷한 다른 요소를 잘못 인식할 위험이 커집니다. 실제 화면에서 테스트하며 적절한 값을 찾는 것이 요령입니다.

FIND_IMAGE와 WAIT_IMAGE의 구분 사용법

makuroku에는 스크립트에서 이미지 인식을 사용하기 위한 대표적인 두 가지 명령이 마련되어 있습니다. FIND_IMAGE는 ‘바로 지금 그 이미지가 화면 어디에 있는지’를 찾는 명령입니다. 찾은 좌표를 변수에 저장할 수 있으므로 ‘어디에 표시될지 모르는 버튼을 클릭하는’ 등의 용도에 적합합니다.

반면 WAIT_IMAGE는 ‘해당 이미지가 표시될 때까지 기다리는’ 명령입니다. 웹 페이지를 불러오거나 앱을 시작하는 데는 시간이 걸리며, 완료되기 전에 다음 조작을 하면 실패합니다. WAIT_IMAGE를 사용하면 ‘로딩 완료를 나타내는 아이콘이 나타날 때까지 기다린 후 다음 단계로 진행하는’ 것처럼 화면 상태에 맞춘 확실한 자동화가 가능합니다. 이 두 명령을 조합하면 실제 업무에서 흔히 발생하는 ‘타이밍 차이’에 강하고 쉽게 망가지지 않는 자동화를 구현할 수 있습니다.

이미지 인식이 특히 유용한 상황

이미지 인식은 다음과 같은 상황에서 특히 유용합니다.

  • 버튼이나 창의 표시 위치가 매번 바뀌는 앱
  • 로딩이나 처리가 완료될 때까지 기다린 후 다음 단계로 진행하고 싶을 때
  • 좌표 지정만으로는 대응하기 어려운 동적 레이아웃 화면
  • 특정 아이콘이나 상태가 나타나는 것을 계기로 처리를 실행하고 싶을 때

반대로 이미지 인식에도 한계는 있습니다. 대상의 모양이 자주 바뀌는 디자인이나 반투명 또는 애니메이션이 적용된 요소는 일치 판정이 불안정해지기 쉽습니다. 또한 화면 전체를 탐색하므로 좌표 지정에 비해 처리 시간이 조금 더 걸립니다. 모든 것을 이미지 인식으로 대체하기보다는 “좌표 지정으로 충분한 곳은 좌표로, 위치가 움직이는 곳만 이미지 인식으로” 구분해 사용하는 것이 실용적이고 빠른 자동화를 구현하는 요령입니다.

템플릿 이미지를 잘 준비하는 요령

이미지 인식 정확도는 등록하는 템플릿 이미지의 품질에 크게 좌우됩니다. 몇 가지 요령이 있습니다. 먼저 표식으로 사용할 영역은 “작고 특징적으로” 잘라내야 합니다. 버튼 전체가 아니라 해당 버튼만의 고유한 아이콘이나 글자만 잘라내면 다른 요소와 혼동할 가능성이 줄어듭니다. 반대로 범위를 너무 크게 잡으면 주변의 사소한 변화(배경색이나 인접 요소) 때문에 일치하지 않을 수 있습니다.

다음으로 색상이나 상태가 자주 바뀌는 부분은 피해야 합니다. 마우스를 올리면 색이 바뀌는 버튼이나 선택 상태에서 강조 표시되는 부분을 표식으로 사용하면 상황에 따라 일치하지 않을 수 있습니다. 항상 같은 모양을 유지하는 안정적인 부분을 선택하세요. 또한 화면 배율이 바뀌면 이미지 크기도 달라지므로 실제 운영 환경의 해상도와 배율로 템플릿을 캡처하는 것이 가장 확실합니다. 이런 세심한 배려가 쌓이면 이미지 인식 성공률이 크게 향상됩니다.

이미지 인식과 다른 기법 조합하기

이미지 인식은 강력하지만 만능은 아닙니다. 실무에서 견고한 자동화를 만들려면 여러 기법을 적재적소에 조합하는 것이 정답입니다. 위치가 전혀 움직이지 않는 버튼은 빠른 좌표 지정만으로 충분합니다. 위치가 움직이는 버튼이나 표시되는 데 시간이 걸리는 요소만 이미지 인식에 맡깁니다. 또한 화면의 문자 정보를 읽고 싶다면 OCR(문자 인식)을, 외부 서비스와 연동하고 싶다면 HTTP 통신을 사용하는 식으로 목적에 따라 기법을 구분해 사용합니다.

makuroku에서는 이러한 기법들을 하나의 스크립트 안에서 자유롭게 조합할 수 있습니다. “WAIT_IMAGE로 화면이 준비되기를 기다리고, FIND_IMAGE로 버튼을 찾아 클릭한 뒤, OCR로 결과의 숫자를 읽고, 조건 분기로 처리를 나눈다”와 같이 사람의 작업에 가까운 유연한 자동화를 하나의 흐름으로 작성할 수 있습니다. 한 가지 기법만 고집하지 말고 각각의 장점을 살려 조합하는 것. 이러한 발상이 현장에서 실제로 사용할 수 있는 자동화로 가는 지름길입니다.

이미지 인식이 제대로 작동하지 않을 때의 대처법

이미지 인식을 사용하기 시작하면 “분명 등록한 이미지를 찾을 수 없다”는 상황을 마주칠 수 있습니다. 원인은 여러 가지일 수 있습니다. 가장 흔한 경우는 템플릿 이미지를 캡처했을 때와 실제로 검색할 때의 화면 배율이나 해상도가 다른 것입니다. 이 경우 이미지 크기가 달라지므로 일치하지 않습니다. 실제 운영 환경과 동일한 설정에서 템플릿을 다시 캡처하는 것이 가장 확실한 해결책입니다.

그다음으로 흔한 경우는 일치 임계값이 지나치게 엄격한 것입니다. 100% 완전 일치를 요구하면 아주 미세한 색감 차이나 앤티앨리어싱 차이만 있어도 이미지를 찾지 못합니다. 임계값을 조금 낮춰 약 90%의 유사도를 일치로 판정하면 안정되는 경우가 많습니다. 다만 너무 낮추면 오탐지가 늘어나므로 실제 화면에서 시험하면서 적절한 값을 찾는 것이 요령입니다.

그래도 해결되지 않는다면 템플릿으로 선택한 영역 자체를 다시 살펴보세요. 배경이 자주 바뀌는 부분이나 선택 상태에서 강조되는 부분을 표식으로 삼으면 상황에 따라 모양이 달라져 일치하지 않을 수 있습니다. 고유한 아이콘이나 로고처럼 항상 같은 모양을 유지하는 특징적이고 안정적인 부분으로 범위를 좁히면 성공률이 높아집니다. “찾기 쉬운 표식을 선택하는 것”이 이미지 인식을 안정시키는 가장 중요한 요령입니다.

이미지 인식은 처음에는 조정에 약간의 수고가 들지만, 한 번 제대로 설정하면 좌표 지정으로는 구현할 수 없는 유연성을 발휘합니다. 창이 움직이거나 레이아웃이 바뀌어도 “보이는 모습”만 같다면 정확히 반응합니다. 이러한 견고함은 실제 업무에서 자동화를 오랫동안 계속 사용하는 데 큰 안심을 줍니다.

이미지 인식을 활용한 실용적인 시나리오

구체적인 시나리오를 통해 이미지 인식의 성능을 살펴보겠습니다. 예를 들어 어떤 Web 앱에서 정기적으로 데이터를 다운로드하는 작업을 자동화한다고 가정해 보겠습니다. 이 앱은 로그인할 때마다 화면 레이아웃이 조금씩 달라지고 다운로드 버튼의 위치도 일정하지 않습니다. 좌표를 지정하는 매크로는 이러한 변화에 대응하지 못해 금세 작동하지 않게 됩니다.

이때 이미지 인식이 진가를 발휘합니다. 먼저 다운로드 버튼의 아이콘을 템플릿 이미지로 등록합니다. 매크로는 WAIT_IMAGE로 페이지 로딩이 완료되기를 기다린 다음 FIND_IMAGE로 화면에서 다운로드 버튼을 찾아 해당 위치를 클릭합니다. 버튼이 어디에 표시되든 모양만 같다면 정확히 찾아 클릭할 수 있으므로 레이아웃 변화에 좌우되지 않는 안정적인 자동화가 됩니다.

또한 다운로드 완료를 알리는 메시지가 표시될 때까지 WAIT_IMAGE로 기다린 후 다음 처리로 넘어가면 통신이 느린 날에도 누락이 없습니다. 이처럼 이미지 인식은 “화면 상태를 보고 적절한 시점에 적절한 위치를 조작한다”라는, 사람이라면 당연하게 하는 판단을 자동화에 도입합니다. 그렇기 때문에 실제 업무 환경이라는 “변화로 가득한 곳”에서도 쉽게 망가지지 않는 자동화를 만들 수 있습니다.

이러한 시나리오는 Web 앱뿐 아니라 데스크톱 앱이나 업무 시스템 등 모든 상황에 적용할 수 있습니다. “위치가 움직인다”, “타이밍을 예측할 수 없다”는 이유로 지금까지 자동화를 포기했던 작업도 이미지 인식을 사용하면 자동화할 수 있습니다. 먼저 “매번 위치가 어긋나 곤란했던” 작업을 떠올리고 이미지 인식으로 안정시키는 것부터 시작해 보세요.

쉽게 망가지지 않는 자동화를 만들기 위해

자동화가 현장에서 “쓸모 있게” 작동하는지는 예상치 못한 상황을 얼마나 견딜 수 있는지에 달려 있습니다. 기록한 좌표에만 의존하는 자동화는 처음 한 번은 잘 작동하더라도 환경이 조금만 바뀌면 멈추기 쉽습니다. 여기에 이미지 인식을 결합하면 “보이는 모습을 기준으로 클릭하기”, “화면이 준비될 때까지 기다리기”와 같이 사람이 무의식적으로 하는 판단을 자동화에 통합할 수 있습니다.

makuroku는 GUI 녹화뿐만 아니라 FIND_IMAGE, WAIT_IMAGE 같은 이미지 인식 명령을 기본으로 제공합니다. 먼저 작업을 녹화해 뼈대를 만든 다음, 위치가 바뀌는 부분이나 타이밍을 기다려야 하는 부분만 이미지 인식으로 바꾸면 됩니다. 이 조합을 활용하면 처음 발생한 예상 밖의 상황에 곧바로 무너지는 것이 아니라, 실제 환경의 복잡함을 견딜 수 있는 자동화를 만들 수 있습니다. 모든 기능을 무료로 체험할 수 있으니, 우선 “매번 위치가 어긋나 곤란했던 작업”을 이미지 인식으로 안정화해 보세요.

무료로 사용해 보기

makuroku로 자동화하세요

makuroku는 마우스와 키보드 동작을 기록해 자동으로 재생합니다. 더 필요하면 SCR 스크립트와 AI(MCP) 연동도. 모든 기능을 Windows에서 무료로 사용하세요.