프로젝트 로그 #8: AI 전화 에이전트가 이제 아이콘을 볼 수 있습니다
요약
AI 전화 에이전트가 OCR 실패 시 템플릿 매칭(Template matching)을 사용하여 아이콘을 인식하고 클릭할 수 있도록 구현한 개발 로그입니다. 텍스트 기반 인식의 한계를 이미지 매칭 기술로 보완하여 에이전트의 동작 범위를 확장했습니다.
핵심 포인트
- OCR 실패 시 템플릿 매칭을 통한 폴백(Fallback) 메커니즘 구축
- 신뢰도 임계값(80%) 기반의 좌표 탭 방식 도입
- 템플릿 매칭 도입에 따른 지연 시간 및 라이브러리 관리 이슈 발생
- 다크/라이트 모드 대응을 위한 참조 이미지 관리 필요성 확인
8일 차. 템플릿 매칭 (Template matching)이 에이전트에 연결되었습니다. 이제 전송 버튼이 더 이상 보이지 않는 상태가 아닙니다.
7일 전, 에이전트는 아이콘을 보지 못하는 상태였습니다. 텍스트를 읽고, 연락처를 찾고, 메시지를 타이핑할 수는 있었지만, 전송 버튼을 누를 수는 없었습니다.
오늘, 그 점이 바뀌었습니다.
구축된 내용
템플릿 매칭 (Template matching)이 이제 에이전트의 의사결정 파이프라인 (decision pipeline)에 통합되었습니다. 에이전트가 무언가를 탭해야 할 때의 새로운 흐름은 다음과 같습니다:
- 먼저 OCR을 시도합니다. 대상이 텍스트(연락처 이름 등)인 경우, ML Kit 또는 Tesseract를 통해 찾습니다.
- OCR이 실패하면, 템플릿 매칭 (template matching)으로 전환합니다. 에이전트는 자신의 아이콘 라이브러리에서 일치하는 참조 이미지를 검색합니다.
- 템플릿 매칭이 신뢰도 임계값(80%)을 초과하여 성공하면, 일치하는 좌표를 탭합니다.
- 둘 다 실패하면, 실패를 보고하고 중단합니다. 추측하거나 하드코딩된 좌표를 사용하지 않습니다.
오늘의 진행 상황
| 작업 | 상태 |
|---|---|
OCR 실패 시 match_template()를 호출하도록 agent.py 업데이트 | ✅ 완료 |
| ... |
전체 파이프라인 테스트
에이전트에게 다음과 같은 명령을 내렸습니다: "엄마에게 나중에 전화한다고 WhatsApp 메시지 보내줘."
발생한 과정은 다음과 같습니다:
- 에이전트가 ADB를 통해 WhatsApp을 열었습니다. ✅
- 에이전트가 OCR + 퍼지 매칭 (fuzzy matching)을 사용하여 "Mom"을 검색했습니다. 찾았습니다. ✅
- 에이전트가 연락처를 탭했습니다. 채팅창이 열렸습니다. ✅
- 에이전트가 메시지 박스에 "I'll call later"를 입력했습니다. ✅
- 에이전트가 전송 버튼을 찾았습니다. OCR은 찾지 못했습니다 (텍스트 없음). ❌
- 에이전트가 템플릿 매칭 (template matching)으로 전환했습니다. ✅
- 에이전트가
send_button.png를 94%의 신뢰도로 매칭했습니다. ✅ - 에이전트가 해당 좌표를 탭했습니다. ✅
- 에이전트가 채팅창에 메시지가 나타난 것을 확인했습니다. ✅
작업 완료. 하드코딩된 좌표 없음. 추측 없음. 에이전트는 아이콘을 직접 봄으로써 찾아냈습니다.
현재 아이콘 라이브러리에 있는 것
| 아이콘 | 파일 | 상태 |
|---|---|---|
| 전송 버튼 (WhatsApp) | send_button.png | ✅ 작동 중 |
| ... |
여전히 어려운 점
템플릿 매칭 (Template matching)은 OCR보다 느립니다. 제 기기에서는 매칭 한 번당 2~4초가 소요됩니다. 단일 아이콘이라면 괜찮지만, 세 개의 서로 다른 아이콘을 찾아야 하는 작업의 경우 지연 시간이 누적됩니다.
간단한 NumPy 폴백 (fallback) 방식은 OpenCV보다 약 3배 느립니다. OpenCV가 설치되지 않은 기기에서는 템플릿 매칭이 새로운 병목 현상 (bottleneck)이 됩니다.
또한 테마(다크 모드 vs 라이트 모드)에 따라 외형이 변하는 아이콘은 별도의 참조 이미지 (reference images)가 필요합니다. 아이콘 하나당 두 개의 변형이 생기는 셈입니다. 라이브러리가 점점 커질 것입니다.
다음 단계 (Day 9)
- 더 많은 참조 아이콘 추가: 첨부 (attach), 카메라, 이모지 등 더 많은 옵션
- 두 번째 기기에서 테스트하여 다양한 화면 크기에서도 아이콘 매칭이 작동하는지 확인
- 파이프라인 (pipeline)이 작동하는 전체 데모 영상 녹화
리포지토리 (The Repo)
👉 github.com/Dexter2344/phone-agent
이제 agent.py는 OCR이 대상을 찾지 못할 때 폴백 (fallback)으로 match_template()을 호출합니다. vision.py는 OpenCV를 기본으로 사용하고 NumPy를 폴백으로 사용하여 매칭을 처리합니다. 아이콘 라이브러리가 확장되고 있습니다.
이것이 Day 8입니다. 에이전트가 마침내 자신이 무엇을 하고 있는지 볼 수 있게 되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기