본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 16. 13:27

프로젝트 로그 #6: AI 에이전트를 망치던 OCR 문제를 해결하다

요약

AI 에이전트의 성능 병목이었던 OCR 문제를 Tesseract에서 Google ML Kit으로 교체하여 해결한 개발 로그입니다. 이를 통해 스캔 속도를 5배 이상 개선하고 온디바이스 환경에서의 효율성을 높였습니다.

핵심 포인트

  • Tesseract를 ML Kit으로 교체하여 스캔 시간을 8~12초에서 2초 이내로 단축
  • 온디바이스 OCR 도입으로 오프라인 에이전트 목적 달성 및 성능 최적화
  • 전화나 알림 등 외부 방해 요소를 감지하고 처리하는 중단 처리 로직 구현
  • 발열로 인한 쓰로틀링 문제와 텍스트 없는 UI 요소 인식 문제는 향후 과제로 남음

Day 6. Tesseract를 ML Kit으로 교체했습니다. 이제 에이전트는 5배 빨라졌고 중단 상황도 처리할 수 있습니다.

지난 글에서는 벽에 대해 이야기했었습니다. OCR이 느렸습니다. 중단 상황은 모든 것을 망가뜨렸습니다. 휴대폰이 과열되었습니다.

오늘은 해결책에 관한 것입니다. 그 세 개의 벽 중 두 개가 무너졌습니다.

OCR 문제점

Tesseract는 화면 스캔당 8~12초가 걸렸습니다. 단일 동작에는 괜찮습니다. 하지만 5단계 작업이라면, 텍스트 인식을 위해 1분 동안 기다려야 합니다. 이미 열 관리(thermal throttling)에 시달리는 장치에서는 용납할 수 없는 수준입니다.

주말을 이용해 대안들을 조사했습니다. 커스텀 학습 모델도 고려했지만 (휴대폰에는 너무 무거렸습니다). 클라우드 API도 고려했지만 (전체 '오프라인 에이전트' 목적에 위배됩니다). 결국 더 나은 것을 찾았습니다.

ML Kit 등장

Google의 ML Kit은 인터넷 연결 없이 실행되는 온디바이스(on-device) 텍스트 인식을 제공합니다. 모바일 CPU에 최적화되어 있습니다. 그리고 무료입니다. 게다가 빠릅니다.

저는 Tesseract를 ML Kit의 텍스트 인식 API로 교체했습니다. 그 결과는 다음과 같습니다:

MetricTesseract (Old)ML Kit (New)
Screen scan time8-12 seconds1.5-2 seconds
...

The 에이전트는 이제 2초 이내에 화면을 스캔합니다. 예전에는 60초 이상 걸리던 전체 5단계 작업이 이제는 20~25초 만에 완료됩니다. 여전히 즉각적이지는 않지만, 사용 가능한 수준입니다. 더 이상 병목 현상이 아닙니다.

구현 방식

ML Kit은 Termux에서 별도의 서비스로 실행됩니다. Python 에이전트는 스크린샷과 함께 localhost:8080으로 HTTP 요청을 보내고, ML Kit은 바운딩 박스(bounding boxes)가 포함된 구조화된 텍스트를 반환합니다. 이제 vision.py 모듈에는 기존 Tesseract 기능 외에 mlkit_extract() 함수가 추가되었으며, 폴백(fallback)이 적용되었습니다: 만약 ML Kit이 실패하면 에이전트는 Tesseract로 되돌아갑니다.

중단 처리기 (첫 번째 시도)

지난주에는 작업 도중에 WhatsApp 전화가 와서 모든 것이 망가졌습니다. 에이전트가 목표 버튼 대신 알림을 탭했습니다. 그러고는 길을 잃었습니다.

저는 간단한 사전 동작 확인(pre-action check)을 작성했습니다:

  1. 모든 탭(tap)을 수행하기 전에, 에이전트는 알려진 방해 패턴(수신 전화 UI, 알림 헤더, "업데이트 가능" 대화 상자 등)이 있는지 화면을 스캔합니다.
  2. 만약 발견하면, 작업을 계속하기 전에 먼저 이를 해제합니다 (ADB를 통한 뒤로 가기 버튼 사용).
  3. 화면이 잠겨 있다면, 깨우기(wake) 명령을 보내고 잠금이 해제될 때까지 기다립니다.

완벽하지는 않습니다. 정말 무작위적인 방해 요소는 여전히 실행 흐름을 끊을 수 있습니다. 하지만 전화, 알림, 시스템 대화 상자와 같은 가장 흔한 문제들은 이제 처리됩니다. 에이전트가 충돌하는 대신 복구(recover)를 수행합니다.

여전히 해결되지 않은 문제들

  • 쓰로틀링 (Thermal throttling) 문제는 여전히 해결되지 않았습니다. 15분간 연속 사용하면 휴대폰의 속도가 느려집니다. 작업 사이에 30초간의 쿨다운(cooldown) 휴식 시간을 추가하는 실험을 하고 있지만, 이는 사용자 경험(user experience)을 해칩니다.
  • 이미지만 있는 UI 요소 (텍스트가 없는 아이콘)는 여전히 보이지 않습니다. ML Kit가 텍스트 인식에는 도움이 되지만, 라벨이 없는 카메라 아이콘이나 전송 버튼은 에이전트에게 그저 하나의 도형일 뿐입니다. 다음 단계로 템플릿 매칭 (template matching)을 탐색하고 있습니다.

다음 단계 (7일 차)

  • 아이콘 기반 버튼을 위한 템플릿 매칭 추가
  • 성능 차이가 있는지 확인하기 위해 두 번째 기기에서 에이전트 테스트
  • 첫 번째 전체 데모 영상 녹화 및 업로드

리포지토리 (The Repo)

👉 github.com/Dexter2344/phone-agent

vision.py는 이제 Tesseract와 ML Kit를 모두 지원합니다. agent.py에는 방해 요소 처리기(interruption handler)가 포함되었습니다. README는 6일 차 상태로 업데이트되었습니다.

이것이 6일 차입니다. 장벽이 무너지고 있습니다. 빌드는 계속됩니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0