Skip to content

KwanHoo/panorama-extraction

Repository files navigation

🗺️ 부산 대학가 상권 공실 분석용 거리뷰 수집기

📋 프로젝트 개요

네이버 지도 API를 활용하여 부산 대학가 상권의 거리뷰 이미지를 자동으로 수집하는 프로그램입니다. ChatGPT Vision API와 연동하여 1층 점포의 공실 여부를 자동으로 분석하기 위한 데이터 수집 단계입니다.

🎯 연구 목적

  • 대상 상권: 부산대 vs 부경대/경성대
  • 비교 분석: 높은 공실률 vs 낮은 공실률
  • 수집 방식: 도로망 기반 자동 수집 (좌우 양측 촬영)
  • 최종 목표: AI 기반 공실 자동 분석 시스템 구축

📦 전달받을 파일 목록

✅ 필수 파일 (3개)

1. vacancy_analyzer_api.js     (메인 프로그램, 18KB)
2. package.json                 (프로젝트 설정, 471 bytes)
3. package-lock.json            (의존성 버전 고정, 41KB)

📚 문서 파일 (3개)

4. SETUP_GUIDE.md               (환경 설정 가이드, 15KB)
5. COORDINATE_GUIDE.md          (좌표 정보, 8KB)
6. QUICK_START.md               (빠른 시작, 4.4KB)

📄 추가 참고 자료

7. README.md                    (이 파일)

🚀 빠른 시작 (3단계)

1️⃣ 환경 설정 (25-30분)

# Node.js 설치 (https://nodejs.org/)
node --version

# 프로젝트 폴더로 이동
cd vacancy-analyzer

# 의존성 설치
npm install

2️⃣ API 키 설정 (10분)

// vacancy_analyzer_api.js 파일 19번 줄 수정

const CONFIG = {
  CLIENT_ID: '여기에_네이버_클라우드_API_키_입력',  // ← 수정
  // ...
};

API 키 발급: https://console.ncloud.com/ → Application 등록 → Maps 서비스 선택

3️⃣ 실행 (30-40분)

node vacancy_analyzer_api.js

📊 수집 결과

데이터 규모

  • 부산대 상권: 224장 (메인거리 180 + 골목 44)
  • 부경대/경성대 상권: 204장 (메인거리 120 + 골목 84)
  • 전체: 약 428장
  • 소요 시간: 30-40분
  • 저장 용량: 250-350MB

폴더 구조

street_view_data/
├── 부산대/
│   ├── 메인거리_북측/
│   │   ├── left/                    (왼쪽 상가)
│   │   │   ├── 0000_left.png
│   │   │   ├── 0000_left_meta.json
│   │   │   └── ...
│   │   └── right/                   (오른쪽 상가)
│   ├── 메인거리_남측/
│   ├── 북쪽골목_부리단길/
│   └── 남쪽골목_외식거리/
└── 부경대_경성대/
    ├── 부경대_정문_동측/
    ├── 부경대_정문_서측/
    ├── 경성대_문화골목_북측/
    ├── 경성대_문화골목_남측/
    ├── 먹자골목_1/
    └── 먹자골목_2/

💰 비용

네이버 지도 API

  • 무료 한도: 하루 25,000건, 월 750,000건
  • 이 프로젝트: 428건 (1.7%)
  • 총 비용: 0원 (무료 범위 내)

🔧 시스템 요구사항

소프트웨어

  • Node.js: v18.0.0 이상 (LTS 권장)
  • npm: v9.0.0 이상
  • Chrome: 최신 버전
  • OS: Windows 10/11, macOS 10.15+, Ubuntu 20.04+

하드웨어

  • RAM: 4GB 이상 (8GB 권장)
  • 디스크: 1GB 여유 공간
  • 네트워크: 안정적인 인터넷 연결

📚 문서 읽는 순서

처음 시작하는 경우

1️⃣ README.md (이 파일) - 전체 개요 파악
2️⃣ SETUP_GUIDE.md - 환경 설정 (필수!)
3️⃣ QUICK_START.md - 빠른 실행
4️⃣ COORDINATE_GUIDE.md - 좌표 수정 (필요시)

문제가 발생한 경우

📖 SETUP_GUIDE.md의 "문제 해결" 섹션 참고

🎯 주요 특징

✅ 안정성

  • 네이버 지도 API 정식 인증: 공식 라이선스 사용
  • 버전 고정: package-lock.json으로 환경 일관성 보장
  • 오류 처리: 실패 시 자동 재시도 및 로깅

✅ 정확성

  • 도로망 기반 수집: 실제 도로를 따라 이동
  • 자동 방향 계산: Bearing 알고리즘으로 도로 진행 방향 자동 계산
  • 좌우 양측 촬영: 도로 방향 기준 ±90도 자동 설정

✅ 효율성

  • 우선순위 수집: 메인거리 먼저, 골목상권 나중
  • 간격 조절: 도로별 수집 간격 설정 (8m ~ 10m)
  • 병렬 처리: 가능한 부분 자동 최적화

✅ 데이터 품질

  • 메타데이터: 파노라마 ID, 촬영일자, 주소, 위치 정보
  • 위치 검증: 요청 좌표 vs 실제 좌표 차이 기록
  • JSON 형식: 구조화된 데이터 저장

🔍 메타데이터 구조

{
  "requestedPosition": { "lat": 35.231628, "lng": 129.084364 },
  "actualPosition": { "lat": 35.231625, "lng": 129.084360 },
  "positionDifference": {
    "lat": 0.000003,
    "lng": 0.000004,
    "distance": 5.2
  },
  "panoId": "Qa5xv08YdFVzQ0FPT1BV...",
  "title": "금정로",
  "address": "부산광역시 금정구 장전동",
  "photodate": "2024-03",
  "pov": { "pan": 90, "tilt": 0, "fov": 90 },
  "timestamp": "2025-01-01T10:30:00.000Z"
}

🎓 다음 단계 (Phase 2)

ChatGPT Vision API 연동

import openai

# 수집된 이미지 분석
for image in images:
    response = openai.ChatCompletion.create(
        model="gpt-4-vision-preview",
        messages=[{
            "role": "user",
            "content": [
                {"type": "text", "text": "1층 점포 분석 (12개 조건)"},
                {"type": "image_url", "image_url": image}
            ]
        }]
    )
    
    # 결과: 점포명, 운영상태(영업중/영업종료/임대), 위치 등
    save_to_database(response)

12개 분석 조건

  1. 가로 좌우측 촬영
  2. 여러 점포 각각 분석
  3. 교차로 너머 제외
  4. 2층 간판 제외
  5. 점포명 (간판 기준)
  6. 운영상태: 영업중/영업종료/임대
  7. "임대" 정의 8-9. 영업중/종료 정의
  8. 판단 기준
  9. 층수
  10. 중심픽셀 좌표

🛠️ 좌표 수정 방법

네이버 지도로 좌표 찾기

1. https://map.naver.com 접속
2. 원하는 위치 우클릭 → "이곳이 궁금해요"
3. 주소 옆 화살표 → 위도/경도 복사
4. 코드에 붙여넣기

코드 수정

// vacancy_analyzer_api.js 파일의 ROAD_NETWORKS 객체

waypoints: [
  { lat: 35.231628, lng: 129.084364, description: '시작점' },  // ← 수정
  { lat: 35.231400, lng: 129.085500, description: '중간' },    // ← 수정
  { lat: 35.230352, lng: 129.089011, description: '끝' }       // ← 수정
]

자세한 내용은 COORDINATE_GUIDE.md 참고


🆘 문제 해결

"node: command not found"

→ Node.js 설치: https://nodejs.org/

"npm install 오류"

rm -rf node_modules package-lock.json
npm install

"API 키가 유효하지 않습니다"

→ 네이버 클라우드 콘솔에서 키 재확인

"Chrome을 찾을 수 없습니다"

→ Chrome 설치: https://www.google.com/chrome/

자세한 문제 해결은 SETUP_GUIDE.md 참고


📞 지원

공식 문서

고객센터


📄 라이선스

MIT License


🙏 감사의 글

이 프로젝트는 부산 대학가 상권의 공실 문제를 데이터 기반으로 분석하기 위해 시작되었습니다. 연구에 도움이 되길 바랍니다.


📝 체크리스트

실행 전:

  • Node.js 설치 확인
  • 6개 파일 모두 확인
  • npm install 실행
  • API 키 발급
  • API 키 입력 및 저장
  • Chrome 설치 확인

실행 후:

  • street_view_data 폴더 생성 확인
  • 이미지 파일 확인 (실제 거리뷰)
  • 메타데이터 확인 (actualPosition 있음)

버전: 1.1
최종 업데이트: 2025-11-12
제작: 부산 대학가 상권 공실 분석 프로젝트

행운을 빕니다! 🍀