기억의 궁전 · 기술 설명

3D 방에 학습 마커
생기는 7단계

방(3D 모델)을 넣으면 — 가구를 알아보고, 이름을 붙이고,
걷는 순서대로 번호를 매기기까지. 차근차근 풀어봤어요.

1 2 3 소파 식탁
한눈에 — 방 하나가 거치는 길
1크기 맞추기 2사물 찾기 3이름 짓기 4겹침 정리 5걷는 순서 6자리 잡기 7카메라
STEP 1
📐

방 크기를 같은 자로

정규화 · 가로 폭을 7.2로 통일

방마다 실제 크기가 제각각이라, 먼저 가로 폭을 같은 기준으로 맞춰요. 그래야 "방 높이의 절반보다 크면 가구" 같은 모든 기준을 방 크기와 상관없이 똑같이 적용할 수 있어요.

※ 기준 폭은 7.2 — 물리 상수가 아니라, 방 스캐너가 쓰는 정규화 값과 같게 맞춘 거예요(좌표 호환 · 실제 중형 방 ~7m라 걷기·카메라 속도감도 자연스러움).

폭 7.2 폭 7.2
💡쉽게 말하면 — 큰 방이든 작은 방이든, 같은 축척의 지도로 다시 그리는 거예요.
STEP 2
🔍

사물 찾기

이름표 + 모양으로 가구만 골라내기

3D 모델 속 수많은 조각 중 '가구'만 추려요. ① 이름표(조각 이름에 sofa·chair 같은 단어가 있으면) ② 모양(가로·세로·높이 상자 크기). 얇고 큰 면은 '벽', 아주 납작·거대하면 '바닥'으로 보고 걸러내요.

소파 ✓ 벽 ✕ 바닥 ✕
💡쉽게 말하면 — 물건마다 '딱 맞는 상자'를 씌워 크기를 재고, 벽·바닥은 모양으로 빼는 거예요.
STEP 3
🏷️

이름 짓기

확실하면 이름대로, 애매하면 AI 비전이 판단

3D 모델 조각마다 만든 사람이 붙여둔 '이름표(라벨)'가 있어요. 그게 'dining table'처럼 확실하면 그대로 '식탁'으로 둬요. 이름표가 없거나 틀린 경우 — 예를 들어 모델 라벨은 'umbrella'인데 실제론 화분일 때 — 그땐 AI 비전이 사진을 직접 보고 한국어로 이름을 붙여요.

이름이 확실 식탁 · 소파 이름 그대로 신뢰 애매·오명명 📸 비전이 판단 사진 보고 한국어로
💡쉽게 말하면 — 이름표가 믿을 만하면 그대로, 아니면 사진을 보고 직접 이름을 붙여요.
STEP 4
🧹

겹친 마커 정리

같은 바닥자리에 둘이면 하나로

바닥에 깔린 러그와 벽에 걸린 수납장이 같은 바닥 위치에 겹치면 마커가 둘 겹쳐 보여요. 높이 차이로는 안 걸러지니, 바닥 평면(위에서 본 거리)으로 가까운 둘은 하나로 정리해요. (떨어져 있는 카페 의자들은 그대로 둬요.)

겹침 1 하나로
💡쉽게 말하면 — 위에서 내려다봤을 때 같은 점에 찍힌 둘은 합쳐, 깔끔하게.
STEP 5
🚶

걷는 순서 매기기

한 바퀴 매끄럽게 — '가까움 + 방향 유지'로 설계

번호는 실제로 걷는 동선으로 매겨요. 한 바퀴를 매끄럽게 돌게 하려고 두 가지를 점수로 설계했어요.

① 가까움 — 지금 위치에서 가장 가까운 미방문 마커일수록 높은 점수.
② 방향 유지 — 지금 가던 방향과 비슷한 쪽이면 가산점, 갑자기 뒤로 꺾이면 감점.
매 단계 이 둘을 합친 점수가 가장 높은 마커를 다음으로 골라요 → 방을 횡단하거나 되돌아가지 않고 자연스럽게 한 바퀴.

지금 진행 방향 가깝고 + 방향 유지 뒤로 꺾임 = 감점
💡쉽게 말하면 — '가까운 다음 전시물'을 고르되, 가던 방향을 유지하며 한 바퀴 도는 거예요.
STEP 6
📍

마커 자리 잡기

사물 표면에 딱 붙게

마커를 그 자리에서 아래로 빛을 쏴(레이캐스트) 닿는 표면 바로 위에 살짝 띄워 얹어요(사물을 파고들거나 가려지지 않게). 그래서 책상 위·소파 위에 자연스럽게 붙죠. (창문·그림처럼 벽에 붙은 건 바닥으로 안 떨어지게 예외 처리해요.)

5 표면 바로 위
💡쉽게 말하면 — 스티커를 허공이 아니라 물건 위에 딱 붙이는 거예요.
STEP 7
🎥

카메라가 부드럽게

'다음'을 누르면 휙 안 돌고 활공

다음 →을 누르면 카메라가 다음 마커로 부드럽게 가감속하며 이동해요. 이동 중엔 흔들림을 막고, 지금 보던 방향과 비슷한 각도를 골라 갑자기 뒤로 휙 도는 일이 없어요.

지금 다음
💡쉽게 말하면 — 드론이 미끄러지듯, 멀미 없이 다음 장소로 데려다줘요.
정확함의 비결

스크린샷을 찍어 AI에게 묻습니다

📸 SCREENSHOT → AZURE VISION + GPT-4.1

모양 추측이 아니라,
'실제 픽셀'을 봅니다

마커가 가리키는 사물을 3D 화면에서 스크린샷으로 찍어 AI에게 보내요. 중앙에 조준점을 찍어 '바로 이 사물'만 보게 하고, 빈 곳이면 '없음'으로 정직하게 답해요.

📸
스크린샷
사물을 클로즈업 캡처
🧠
GPT-4.1 비전
한국어로 직접 명명 (주력)
+
🔎
Azure Vision
사물 박스 검출 (보조)
모양 추측
"스탠드?"
스크린샷+AI
"책장 ✓"
또 다른 입력 경로

이름표 없는 방·내 진짜 방은?
사진으로 스캔합니다

SCANNER
📷

사진으로 좌표를 '만든다'

방 스캐너 · Azure AI Vision 검출 + 삼각측량 → 핫스팟 JSON

지금까지는 3D 모델(GLB)에 좌표가 이미 들어 있는 경우였어요. 그런데 모델에 이름표가 전혀 없거나(벽이 'Object_4'), 내 진짜 방을 찍은 사진밖에 없을 땐? — '방 스캐너'가 나서요. 방을 여러 각도에서 찍어 각 사진을 Azure AI Vision에 보내 사물을 찾고(2D 박스), 그 사물의 3D 좌표를 직접 계산해 핫스팟 파일(JSON)을 만들어요. 방 시스템은 이 파일을 그대로 불러와 마커·동선을 깔죠.

🛰️실제로 작동해요 — 서버에 Azure AI Vision이 켜져 있고, 검출 결과는 의자·소파·화분·창문처럼 정리돼 실제 3D 좌표·신뢰도(confidence)와 함께 저장됩니다.
📐 TRIANGULATION · 두 시선이 만나는 점

사진엔 깊이가 없어요.
그래서 '삼각측량'으로 3D를 복원해요

3D 모델은 좌표가 이미 들어 있어 바로 읽지만, 사진은 평면(2D)이라 "얼마나 멀리"가 없어요. 그래서 여러 시점에서 같은 사물을 향해 쏜 시선(광선)이 만나는 점을 그 사물의 3D 위치로 잡아요 — 측량사가 두 지점에서 같은 봉우리를 재 위치를 찾는 것과 똑같죠. 잘 수렴하면 ±몇 cm까지 정확해요.

사물 샷 A 샷 B 두 시선이 만나는 점 = 3D 위치
📷
여러 각도 촬영
방을 빠짐없이 커버
🔎
Azure Vision
사물마다 2D 박스
📐
광선 교차
3D 좌표 ±몇 cm
🔀

왜 길이 둘일까?

좌표가 있으면 읽고, 없으면 삼각측량으로 만든다

모델(GLB)은 좌표가 이미 있으니 바로 읽어요(삼각측량 불필요·무오차). 사진은 좌표가 없으니 삼각측량으로 복원하죠. 게다가 스캐너는 1차로 표면에 광선을 쏴 맞은 점(베스트샷)을 쓰고, 가림이 의심될 때만 삼각측량 수렴점으로 보정해요. 두 길의 결과는 똑같은 정규화 좌표계(가로 7.2·바닥 0)로 나와서, 스캐너 좌표·모델에서 읽은 좌표·손으로 고친 좌표가 서로 갈아끼워집니다.

🛟 솔직한 한계

얇은 사물 바로 뒤에 큰 배경(커튼 등)이 있으면 비전이 배경을 잡을 수 있어요. 그럴 땐 그 사물만 '정밀' 버튼으로 한 번 더 정확히 잡을 수 있어요.

모양만으로 '책상 vs 식탁'을 100% 가르긴 어려워요 — 그래서 이름이 확실하면 이름을, 아니면 비전을 쓰는 하이브리드로 가장 정확하게 맞춰요.