본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 19. 08:13

프로젝트 로그 #8: AI 전화 에이전트가 이제 아이콘을 볼 수 있습니다

요약

AI 전화 에이전트가 OCR 실패 시 템플릿 매칭(Template matching)을 사용하여 아이콘을 인식하고 클릭할 수 있도록 구현한 개발 로그입니다. 텍스트 기반 인식의 한계를 이미지 매칭 기술로 보완하여 에이전트의 동작 범위를 확장했습니다.

핵심 포인트

  • OCR 실패 시 템플릿 매칭을 통한 폴백(Fallback) 메커니즘 구축
  • 신뢰도 임계값(80%) 기반의 좌표 탭 방식 도입
  • 템플릿 매칭 도입에 따른 지연 시간 및 라이브러리 관리 이슈 발생
  • 다크/라이트 모드 대응을 위한 참조 이미지 관리 필요성 확인

8일 차. 템플릿 매칭 (Template matching)이 에이전트에 연결되었습니다. 이제 전송 버튼이 더 이상 보이지 않는 상태가 아닙니다.

7일 전, 에이전트는 아이콘을 보지 못하는 상태였습니다. 텍스트를 읽고, 연락처를 찾고, 메시지를 타이핑할 수는 있었지만, 전송 버튼을 누를 수는 없었습니다.

오늘, 그 점이 바뀌었습니다.

구축된 내용

템플릿 매칭 (Template matching)이 이제 에이전트의 의사결정 파이프라인 (decision pipeline)에 통합되었습니다. 에이전트가 무언가를 탭해야 할 때의 새로운 흐름은 다음과 같습니다:

  1. 먼저 OCR을 시도합니다. 대상이 텍스트(연락처 이름 등)인 경우, ML Kit 또는 Tesseract를 통해 찾습니다.
  2. OCR이 실패하면, 템플릿 매칭 (template matching)으로 전환합니다. 에이전트는 자신의 아이콘 라이브러리에서 일치하는 참조 이미지를 검색합니다.
  3. 템플릿 매칭이 신뢰도 임계값(80%)을 초과하여 성공하면, 일치하는 좌표를 탭합니다.
  4. 둘 다 실패하면, 실패를 보고하고 중단합니다. 추측하거나 하드코딩된 좌표를 사용하지 않습니다.

오늘의 진행 상황

작업상태
OCR 실패 시 match_template()를 호출하도록 agent.py 업데이트✅ 완료
...

전체 파이프라인 테스트

에이전트에게 다음과 같은 명령을 내렸습니다: "엄마에게 나중에 전화한다고 WhatsApp 메시지 보내줘."

발생한 과정은 다음과 같습니다:

  1. 에이전트가 ADB를 통해 WhatsApp을 열었습니다. ✅
  2. 에이전트가 OCR + 퍼지 매칭 (fuzzy matching)을 사용하여 "Mom"을 검색했습니다. 찾았습니다. ✅
  3. 에이전트가 연락처를 탭했습니다. 채팅창이 열렸습니다. ✅
  4. 에이전트가 메시지 박스에 "I'll call later"를 입력했습니다. ✅
  5. 에이전트가 전송 버튼을 찾았습니다. OCR은 찾지 못했습니다 (텍스트 없음). ❌
  6. 에이전트가 템플릿 매칭 (template matching)으로 전환했습니다. ✅
  7. 에이전트가 send_button.png를 94%의 신뢰도로 매칭했습니다. ✅
  8. 에이전트가 해당 좌표를 탭했습니다. ✅
  9. 에이전트가 채팅창에 메시지가 나타난 것을 확인했습니다. ✅

작업 완료. 하드코딩된 좌표 없음. 추측 없음. 에이전트는 아이콘을 직접 봄으로써 찾아냈습니다.

현재 아이콘 라이브러리에 있는 것

아이콘파일상태
전송 버튼 (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가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0