🖼️ 카카오톡 AI 이미지 분석 시스템

BlueStacks 에뮬레이터를 활용한 카카오톡 이미지 자동 분석 아키텍처

🤖 AI Vision 📱 BlueStacks 🔗 Bridge Server ⚡ Real-time

시스템 아키텍처

클릭하여 각 구성요소의 상세 정보를 확인하세요

👤 사용자
이미지 전송
💬 카카오톡
BlueStacks에서 이미지 수신 및 저장
🤖 MessengerBotR
"사진을 보냈습니다" 알림 감지 → "분석 중..." 응답
동시 진행
👁️ ADB Watcher
새 이미지 감지 → 로컬로 다운로드
🌉 Bridge Server
이미지 수신 (POST /webhook/image)
Gemini API
AI 비전으로 이미지 분석
🌉 Bridge Server
분석 결과 저장 및 캐싱
🔄 결과 폴링
MessengerBotR이 GET /check-image-result 호출
💬 결과 전달
카카오톡으로 분석 결과 전송!
👤
사용자
이미지 전송
⬇️
📱
BlueStacks
Android 에뮬레이터
⬇️
💬
KakaoTalk
이미지 수신/저장
↔️
🤖
MessengerBotR
알림 감지 & 응답
⬇️
⬇️
👁️
ADB Watcher
이미지 폴더 모니터링
➡️
🌉
Bridge Server
HTTP 중계 서버
⬅️
폴링 요청
/check-image-result
⬇️
Gemini API
이미지 분석 (Vision)

데이터 흐름

이미지 전송부터 분석 결과 수신까지의 7단계 프로세스

📤 이미지 전송

사용자가 카카오톡으로 이미지를 전송합니다.

💾 이미지 저장

카카오톡이 이미지를 /sdcard/Pictures/KakaoTalk/ 폴더에 저장합니다.

👁️ 이미지 감지

ADB Watcher가 새 이미지를 감지하고 브릿지 서버로 전송합니다.

🔔 알림 감지

MessengerBotR이 "사진을 보냈습니다" 알림을 감지합니다.

✨ AI 분석

브릿지 서버가 Gemini API로 이미지를 분석합니다.

🔄 결과 폴링

MessengerBotR이 브릿지 서버에서 분석 결과를 폴링합니다.

💬 결과 전달

분석 결과가 카카오톡 채팅으로 전달됩니다.

구성 요소

시스템을 구성하는 핵심 컴포넌트들

📱 BlueStacks

  • Windows에서 실행되는 Android 에뮬레이터
  • 카카오톡 앱 실행 환경 제공
  • ADB (Android Debug Bridge) 지원
  • 파일 시스템 접근 가능

🤖 MessengerBotR

  • Android 알림 리스너 기반 봇
  • 카카오톡 알림 감지 및 응답
  • HTTP 요청으로 브릿지와 통신
  • JavaScript 스크립트로 로직 구현

👁️ ADB Watcher

  • Python 스크립트로 구현
  • ADB로 BlueStacks 파일시스템 모니터링
  • 새 이미지 감지 시 자동 다운로드
  • 해시 기반 중복 방지

🌉 Bridge Server

  • Node.js HTTP 서버 (Port 8787)
  • MessengerBotR ↔ AI API 중계
  • 이미지 분석 결과 캐싱
  • 폴링 엔드포인트 제공

✨ Gemini API

  • Google AI 이미지 분석 API
  • gemini-2.0-flash 모델 사용
  • Base64 이미지 입력 지원
  • 한국어 분석 결과 반환

시퀀스 다이어그램

각 컴포넌트 간의 상세 통신 흐름

1. 이미지 수신

사용자 → 카카오톡: 이미지 전송

카카오톡 → 파일시스템: /sdcard/Pictures/KakaoTalk/에 저장

2. 동시 감지

MessengerBotR: "사진을 보냈습니다" 알림 감지 → "분석 중..." 응답

ADB Watcher: 새 파일 감지 → 로컬로 다운로드

3. 이미지 전송

ADB Watcher → Bridge: POST /webhook/image (Base64 이미지)

// 이미지 페이로드 { "type": "image", "imageBase64": "data:image/png;base64,...", "filename": "1234567890.png" }

4. AI 분석

Bridge → Gemini API: 이미지 분석 요청

Gemini API → Bridge: 분석 결과 (한국어)

5. 결과 저장

Bridge: pendingImageResults Map에 결과 저장 (5분간 유지)

// 결과 캐싱 pendingImageResults.set("default", { result: "📷 이미지 분석 결과: ...", timestamp: Date.now() });

6. 결과 폴링

MessengerBotR → Bridge: GET /check-image-result (3초 간격, 최대 30회)

Bridge → MessengerBotR: { hasResult: true, result: "..." }

7. 결과 전달

MessengerBotR → 카카오톡: msg.reply(분석결과)

카카오톡 → 사용자: 이미지 분석 결과 표시