대학교 졸업 설계프로젝트로써 "시각장애인을 위한 음성 상호작용 오프라인 매장 안내 서비스"를 구현했습니다.
음성 인식 → GPT를 이용한 브랜드 추천 → 매장 경로 안내 → 진열대 도착 후 OCR/GPT Vision으로 위치 분석 → 텍스트 OCR 또는 YOLOv8 제품 검증
까지 전 과정을 자동화했습니다.
음성 인식 — 찾고자 하는 화장품 종류(ex. 토너, 에센스..) 단어를 음성으로 말하면 인식
GPT 브랜드 추천 — GPT-3.5 turbo 모델을 통해 관련 브랜드 3개 추천
매장 경로 안내 — DLOID SLAM 기반 맵 데이터를 좌표로 변환하여 Dijkstra 최단경로 안내 / 진열대 이미지를 학습시킨 YOLOv8 모델을 활용해 정확도 향상
진열대 제품 감지 — 찾는 브랜드 진열대 앞에 도착 시, OCR + GPT Vision으로 진열대 이미지 분석 및 정확한 제품 위치 안내 (ex. 맨위 오른쪽)
제품 검증 — 손에 집어든 제품을 Tesserect OCR → 인식 실패 시 YOLOv8 검증을 통한 2중 방식으로 올바른 제품 선택 여부 확인
대화 로그 저장 — 전체 대화 내용을 JSON으로 저장해 기록
model/
├── helper.py # 전체 안내 시나리오 흐름 제어 모듈
├── brand_recommender.py # GPT 브랜드 추천 모듈
├── ocr.py # OCR을 통한 키워드 추출
├── product_mapping.py # 제품 타입 매핑 + GPT Vision으로 위치 확인
├── yolo_detect.py # OCR → YOLOv8 2단계 제품 검증
├── roadmap.py # 실내 경로 그래프 생성 + 방향 안내
├── utils.py # 음성 상호작용 모듈 (TTS, STT, JSON Logging)
├── directions.py # 경로 안내 실행 모듈
└── indoor_path_with_pois.json # DROID SLAM 기반 실내 맵 데이터 -> 좌표로 추출
python helper.py
실행 시 자동으로 진행
- "어떤 제품을 찾고 계신가요?" 질문 → 사용자 음성 명령 (토너, 에센스 등 원하는 제품 카테고리를 단어로 입력)
- GPT가 브랜드 3개 추천 → 음성으로 번호 선택
- 매장 촬영 요청 → directions.py 실행 → 원하는 진열대까지 경로 음성 안내
- 진열대 도착 후 촬영 → OCR + GPT Vision으로 진열대 분석 및 원하는 제품의 정확한 위치 안내
- 제품 집고 재촬영 → OCR 1차 검증 → 실패 시 YOLOv8로 2차 검증하여 원하는 제품을 집었는지 확인
- 안내 완료 → 대화내역 JSON 기록
전체 대화 흐름(내비게이션 시나리오)를 순차적으로 제어하는 메인 모듈입니다. 각 모듈들을 호출해 자동으로 단계별 안내를 진행합니다.
gpt-3.5-turbo API를 연동해 입력된 제품 카테고리에 맞는 브랜드 3개를 추천합니다. 응답 포맷을 정규식으로 검증하여, 이후 로직 실행을 위한 일정한 응답 형식을 생성합니다.
OpenCV 기반 이미지 전처리(업스케일 → 그레이스케일 → Adaptive Threshold) 후 Tesseract OCR로 텍스트를 추출합니다. 추출된 텍스트에서 지정 키워드를 매칭하는 기능도 포함합니다.
PRODUCT_TYPE_MAPPING(영어→한국어 제품 종류), BRAND_KEYWORDS(브랜드 별칭) 데이터를 관리합니다. OCR 키워드를 보조로 활용해 GPT Vision으로 이미지를 분석해 제품 정보와 위치를 JSON으로 추출합니다.
사용자가 손에 든 제품이 올바른지 검증합니다. OCR로 1차 확인하고 실패 시, 각 카테고리와 브랜드 별 제품 이미지가 학습된 YOLOv8 모델로 2차 확인합니다.
indoor_path_with_pois.json 기반으로 NetworkX 그래프를 구성하고, Dijkstra 알고리즘으로 최단경로를 계산합니다. 벡터 외적을 이용해 좌/우/직진 회전 안내를 제공합니다.
TTS(gTTS + pygame), STT(Speech Recognition) 라이브러리를 활용해 사용자와 음성으로 상호작용하는 로직이 구현되어 있습니다. 대화 내용을 JSON으로 저장하는 로직도 포함되어 있습니다.