시각장애인 및 저시력자를 위한 온디바이스 AI 기반 실시간 쇼핑 어시스턴트 애플리케이션입니다.
- 실시간 객체 인식 (Object Detection): YOLOX-Nano 모델을 TFLite로 변환하여 기기 내(On-Device)에서 빠르고 정확하게 진열대의 상품을 인식합니다.
- 손 추적 (Hand Tracking): MediaPipe Hands를 활용하여 사용자의 손가락 끝(Index Finger)과 상품 간의 거리를 계산합니다.
- 음성 피드백 (Voice Flow): STT(Speech-to-Text)와 TTS(Text-to-Speech)를 활용하여 화면을 보지 않고도 음성으로 앱을 제어하고 상품 위치를 안내받을 수 있습니다.
- 비프음 피드백 (Beep Player): 손이 목표 상품에 가까워질수록 비프음 주기를 짧게 하여 직관적인 위치 안내를 제공합니다.
- 검색 기록 (Search History): Room Database를 사용하여 최근 찾은 상품 기록을 로컬에 저장하고 관리합니다.
- Language: Kotlin
- Architecture: MVVM
- AI/ML: TensorFlow Lite (YOLOX-Nano), MediaPipe Hands
- Database: Room Database
- Network: Retrofit2, OkHttp3
- Media: CameraX, TextToSpeech, SpeechRecognizer
- Android Studio에서
grabit-android폴더를 엽니다. - Gradle Sync를 완료합니다.
- 카메라 하드웨어가 필요하므로 가급적 실제 안드로이드 기기를 연결하여 빌드 및 실행합니다.
GrabIT 앱의 '유사어 검색' 및 '상품 규격(크기) 정보'를 제공하는 백엔드 서버입니다. 동의어 매칭과 자연어 처리를 위해 Node.js 및 Python(E5 임베딩) 서버를 함께 구동합니다.
- 유사어 검색 (Synonym Search): 사용자가 말한 단어(예: "까까")를 앱에 등록된 정식 상품명(예: "과자")으로 매핑합니다.
- 자연어 임베딩 (E5 Service): Python 기반의
e5-service를 통해 텍스트 임베딩을 생성하고 코사인 유사도를 계산하여 가장 가까운 상품군을 찾습니다. - 상품 규격 제공: 인식된 상품의 실제 크기 데이터(가로, 세로, 높이 등)를 앱에 전달하여 화면 상의 거리 비례를 계산하는 데 도움을 줍니다.
- Backend: Node.js, Express
- AI/NLP: Python, FastAPI, intfloat/multilingual-e5-small
- Database: MongoDB
- Infra: Docker, Docker Compose
- 루트 폴더에서 아래 명령어를 실행하여 컨테이너를 빌드하고 실행합니다.
docker-compose up --build -d - Node.js 서버는
3000포트, E5 파이썬 서버는8000포트로 실행됩니다. - 초기 데이터 적재가 필요한 경우 아래 스크립트를 실행합니다.
node seed.jsnode seed-dimensions.js