사진만 있고 장소명을 모르는 상황
관광객은 GPS나 장소명이 없는 사진만으로 어느 랜드마크인지 알고 싶을 수 있다.
PRD · user stories
사용자가 사진이나 검색어만으로 지원 범위의 랜드마크를 찾고, 결과가 불확실할 때는 확정 답처럼 보이지 않도록 안내하는 온디바이스 랜드마크 어시스턴트다. 이 문서는 제공된 Sprint Backlog와 시스템 설계서를 최신 Sprint 2 전환 기준에 맞춰 압축한 제품 기준이다.
원본 문서의 긴 프로젝트명은 Image-Text Retrieval 기반 온디바이스 서울 랜드마크 위치 추정 및 문화유산 안내 어시스턴트다. 현재 앱과 문서에서는 팀원이 부르기 쉬운 제품명인 Landmark Assistant로 통일한다. 원본의 Flutter/SQLite/ONNX Runtime Mobile 구조는 최종 앱 방향으로 유지하되, 현재 구현 기준은 Flutter 앱 + MobileCLIP2-S3 FP16 mixed image/text encoder bundle로 정리한다. Sprint 1의 Streamlit + dynamic INT8 ONNX 실행 경로는 이전 시연 재현 문서로 보존한다.
Landmark Assistant는 사용자가 촬영하거나 업로드한 랜드마크 이미지를 분석해 지원 범위 안의 장소 후보를 Top-3로 제시하고, 후보별 상세 정보로 이어주는 모바일 지향 AI 서비스다. Sprint 2의 핵심은 Sprint 1에서 검증한 모델 탑재 가능성을 Flutter 온디바이스 앱 구조로 옮기고, 이미지/텍스트 encoder, catalog, confidence policy, 상세 정보 연결을 하나의 제품 흐름으로 정리하는 것이다.
검색 방식은 이미지 인식만으로 끝내지 않고 이름 검색과 자연어 검색을 함께 제공한다. 따라서 데이터셋에는 이미지 라벨뿐 아니라 한국어/영어 별칭, 외형 설명, 비교 설명, 사용자 질의 예시가 함께 관리되어야 한다.
관광객은 GPS나 장소명이 없는 사진만으로 어느 랜드마크인지 알고 싶을 수 있다.
궁궐, 문, 사당, 한옥 지붕처럼 비슷한 시각 특징을 가진 장소는 단순 검색에서 오인식되기 쉽다.
여행 중에는 통신 상태가 나쁘거나 데이터 비용이 부담될 수 있어 온디바이스 동작 가치가 있다.
지원하지 않는 이미지, 화면 캡처, 저품질 입력에 대해 그럴듯한 오답을 내면 사용자 신뢰가 떨어진다.
| 대상 | 니즈 | 현재 확인할 것 |
|---|---|---|
| 국내외 관광객 | 사진 또는 자연어로 랜드마크를 찾고 상세 설명을 확인하고 싶다. | 이미지/이름/자연어 검색, Top-3, 상세 페이지 흐름. |
| 시연 평가자 | 모델이 실제 앱 형태로 연결되고 온디바이스 가능성이 있는지 보고 싶다. | FP16 image/text encoder bundle, 앱 실행, latency 근거, 실패 처리. |
| 앱 개발 팀원 | 모델 팀이 제공하는 artifact와 입출력 계약을 안정적으로 붙이고 싶다. | model serving contract, 실행 가이드, 로그 스키마. |
| 데이터 라벨러/운영자 | 어떤 이미지와 텍스트를 보강해야 성능이 좋아지는지 알고 싶다. | 라벨링 가이드, hard case, OOS, 한/영 설명 기준. |
사용자는 카메라나 갤러리에서 이미지를 입력하고, 시스템은 모델 입력 규격에 맞게 변환한다.
이미지 임베딩과 저장된 prototype/text index를 비교해 후보, 점수, 순위를 보여준다.
선택한 후보의 이름, 별칭, 좌표, 대표 이미지, 설명, 지도 링크를 보여준다.
low_quality, out_of_scope, ambiguous 상태를 구분해 재촬영 또는 지원 범위 안내를 제공한다.
광화문/경복궁/청와대처럼 함께 보이거나 유사한 장소는 score margin과 비교 설명으로 다룬다.
MobileCLIP2-S3 FP16 mixed image/text encoder bundle을 앱에서 로드하고 embedding 기반 검색을 수행한다.
사용자는 “Royal Ancestral Shrine”, “돌담있는곳”, “미술관”처럼 이름이나 묘사로 검색할 수 있다.
입력 유형, Top-3, confidence status, 처리 시간, 판정 근거를 남겨 개선 데이터로 쓴다.
| 영역 | 이전 Sprint 1 기준 | 최종 앱 방향 |
|---|---|---|
| Demo UI | Streamlit, Python | Flutter, Dart |
| Model | MobileCLIP2-S4 image encoder, prototype index, text index | MobileCLIP2-S3 FP16 mixed image/text encoder bundle, tokenizer, prototype/text index |
| Runtime | ONNX Runtime CPU, dynamic INT8 ONNX | ONNX Runtime Mobile 우선, 이후 플랫폼별 accelerator 검증 |
| Metadata | JSON 기반 landmark info, text index | 23-class landmark info, parent_landmark_id, SQLite/sqflite 기반 local metadata storage |
| Tracking | W&B, regression fixture, docs evidence | 모델/데이터 버전별 재현 가능한 평가 운영 |
| Docs | HTML docs, Vercel 공유 가능 구조 | 팀 운영 문서와 결정 기록 지속 관리 |
ambiguous로 표시하고 확정 답처럼 말하지 않는다.out_of_scope 또는 low_quality로 다룬다.현재 모델은 23개 class 기준이며, 그 밖의 장소는 후속 dataset 확장 범위로 둔다.
대형 VLM은 제품 방향 비교에는 의미가 있지만 Sprint 1 온디바이스 경량 시연의 주 경로가 아니다.
현재 목표는 Flutter 앱에서 모델과 catalog가 일관되게 동작하는 온디바이스 시연 품질이다.
INT8과 accelerator 경로는 정확도 parity와 latency를 다시 확인한 뒤 교체 후보로 둔다.