7일 차. 텍스트 문제는 해결되었습니다. 하지만 아이콘과 이미지만 있는 버튼은 여전히 보이지 않습니다. 템플릿 매칭 (Template
요약
OCR로 인식할 수 없는 아이콘 기반 버튼 문제를 해결하기 위해 컴퓨터 비전 기술인 템플릿 매칭(Template Matching)을 도입하는 과정을 다룹니다. OpenCV와 NumPy를 활용하여 아이콘 라이브러리를 구축하고, 에이전트가 화면 내 아이콘 좌표를 정확히 찾아 클릭할 수 있도록 구현하는 방법을 설명합니다.
핵심 포인트
- OCR의 한계를 극복하기 위해 템플릿 매칭 기술 도입
- 아이콘 라이브러리를 구축하여 정적 UI 요소 인식
- OpenCV와 순수 Python(NumPy/PIL)의 이중 구현으로 의존성 최적화
- 신뢰도 임계값을 활용한 정확한 좌표 추출 및 동작 수행
이틀 전, 저는 OCR 병목 현상을 해결했습니다. 이제 에이전트(Agent)는 2초 이내에 화면의 텍스트를 읽을 수 있습니다. 중단 상황을 처리하고, 각 단계를 검증합니다.
하지만 1일 차부터 피해왔던 문제가 하나 있으며, 이제는 직면해야 할 때입니다.
에이전트가 여전히 볼 수 없는 것
모든 앱에는 텍스트가 없는 버튼들이 있습니다. WhatsApp의 전송 버튼은 종이비행기 아이콘입니다. 첨부 버튼은 클립 모양입니다. 뒤로 가기 버튼은 화살표입니다. 카메라 버튼은 카메라 모양입니다.
ML Kit는 텍스트를 봅니다. 아이콘은 보지 못합니다. Tesseract 역시 아이콘을 보지 못합니다. 그래서 에이전트가 메시지를 입력한 후 전송 버튼을 눌러야 할 때, 그 버튼이 어디에 있는지 알 방법이 없습니다.
현재 저의 임시방편은 하드코딩된 좌표를 사용하는 것입니다. 제 휴대폰에서 전송 버튼이 대략 특정 위치에 있다는 것을 알고 있습니다. 하지만 이는 다른 기기에서는 작동하지 않습니다. 앱이 업데이트되면 깨집니다. 화면 방향이 바뀌면 깨집니다. 이것은 해결책이 아니라 해킹(Hack)일 뿐입니다.
템플릿 매칭 (Template Matching): 계획
템플릿 매칭 (Template Matching)은 고전적인 컴퓨터 비전 (Computer Vision) 기술입니다. 참조 이미지(전송 아이콘의 작은 크롭 이미지와 같은 것)를 제공하면, 더 큰 이미지(스크린샷)를 스캔하여 일치하는 부분을 찾습니다. 그리고 가장 잘 일치하는 부분의 좌표를 반환합니다.
이것은 AI가 아닙니다. 딥러닝 (Deep Learning)도 아닙니다. 픽셀 수학 (Pixel math)입니다. 하지만 외형이 변하지 않는 아이콘과 같은 정적인 UI 요소에 대해서는 놀라울 정도로 잘 작동합니다.
접근 방식은 다음과 같습니다:
- 아이콘 라이브러리 구축. 에이전트가 지원하는 각 앱(현재는 WhatsApp)에 대해, 주요 아이콘(전송, 첨부, 뒤로 가기, 카메라, 검색)의 참조 이미지를 수동으로 크롭합니다.
- 각 탭 (Tap) 동작 전, OCR을 통해 타겟을 찾지 못할 경우, 에이전트는 아이콘 라이브러리를 대상으로 템플릿 매칭 (Template Matching)을 실행합니다.
- 신뢰도 임계값(Confidence threshold, 80%) 이상으로 일치하는 항목이 발견되면, 에이전트는 일치하는 영역의 중앙을 탭합니다.
- 일치하는 항목을 찾지 못하면, 에이전트는 추측하는 대신 실패를 보고하고 중단합니다.
오늘의 진행 상황
| 작업 | 상태 |
|---|---|
| Python용 템플릿 매칭 라이브러리 조사 | ✅ 완료 |
| ... | |
| 코드 |
새로운 vision.py에는 이제 두 가지 템플릿 매칭 (Template Matching) 함수가 있습니다:
match_template()— 정확하고 빠른 매칭을 위해 OpenCV를 사용합니다. OpenCV가 설치되어 있지 않으면 단순한 버전으로 대체(fallback)됩니다._simple_template_match()— NumPy와 PIL을 사용하는 가벼운 순수 Python 구현체입니다. 에이전트가 이미 사용 중인 라이브러리 외에는 추가 의존성이 없습니다.
이 함수는 스크린샷과 참조 아이콘 이미지를 입력받아, 신뢰도 임계값 (confidence threshold)을 초과하는 최적 매칭 지점의 중심 좌표를 반환합니다.
왜 두 가지 버전인가요?
OpenCV는 무겁습니다. Termux에 설치하려면 소스 코드를 컴파일하거나 미리 빌드된 arm64 휠 (wheel)을 찾아야 합니다. 단순한 대체 수단(fallback)이 있다는 것은 OpenCV가 없더라도 에이전트가 템플릿 매칭을 수행할 수 있음을 의미합니다. 단지 속도가 더 느리고 정확도가 약간 낮을 뿐입니다. 점진적 향상 (Progressive enhancement) 방식이며, 강한 의존성 (hard dependency)을 피한 것입니다.
다음 단계 (8일 차)
- OCR이 실패할 때 에이전트가 실제로 사용할 수 있도록
agent.py에 템플릿 매칭을 연결 - 전체 파이프라인 테스트: 메시지 입력 → 템플릿 매칭을 통한 전송 아이콘 감지 → 탭(tap) → 확인
- WhatsApp용 아이콘 참조 라이브러리 구축 시작
리포지토리 (The Repo)
👉 github.com/Dexter2344/phone-agent
vision.py는 이제 ML Kit, Tesseract, 퍼지 매칭 (fuzzy matching), 중단 처리 (interruption handling), 그리고 템플릿 매칭을 포함한 v3 단계에 도달했습니다. send_button.png는 리포지토리에 포함되어 있습니다. 다음 단계는 에이전트 통합입니다.
이것이 7일 차입니다. 에이전트는 이름이 없는 것들을 식별하기 위한 눈을 갖추어가고 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기