# 360 看房软件设计规划

## 1. 产品定位

目标是设计一款基于 360 度全景照片的看房软件，核心体验类似 Google 街景：用户可以在房屋内部通过“步进式热点”从一个空间移动到另一个空间。

产品重点不是简单展示 360 图片，而是构建一个可浏览、可审核、可扩展的室内空间导航系统。

核心价值：

- 降低房产线上看房的理解成本
- 让用户像真实走进房子一样移动
- 用 AI 自动辅助生成房间分组、连接关系和热点
- 用人工审核保证最终体验准确

---

## 2. 核心使用流程

### 2.1 拍摄流程

摄影师在房屋内每隔 2–3 米拍摄一张 360 度照片。

推荐拍摄规则：

- 每个房间至少拍 1–3 张
- 大房间每 2–3 米补一张
- 门口、走廊、转角、楼梯必须补拍
- 拍摄高度尽量一致，例如 1.4–1.6 米
- 拍摄方向尽量统一，例如从入口开始按顺序前进
- 每张照片保留拍摄顺序、楼层、粗略房间备注

### 2.2 上传流程

用户上传一组 360 图片后，系统进入自动分析流程：

```text
上传图片
→ AI 初步分组
→ 人工确认房间分组
→ AI 生成照片连接关系
→ AI 生成热点位置
→ 人工审核/调整
→ AI 二次校验
→ 发布看房链接
```

---

## 3. 核心模块

## 3.1 360 全景浏览器

负责展示全景图和热点交互。

功能：

- 360 图片查看
- 鼠标/手指拖动视角
- 缩放
- 热点点击跳转
- 默认视角控制
- 房间切换
- 返回上一张
- 移动端适配

可选技术：

- Three.js
- Marzipano
- Pannellum
- WebGL 自研渲染层

MVP 阶段建议优先使用成熟库，避免过早自研渲染引擎。

---

## 3.2 房间分组系统

系统需要先把照片分成空间组，例如：

```text
客厅
厨房
主卧
次卧
厕所
车库
走廊
楼梯
```

AI 初步判断依据：

- 图片视觉相似度
- 拍摄顺序
- 门洞/走廊关系
- 图像语义识别
- 用户输入的房间提示

人工后台需要支持：

- 修改房间名称
- 合并房间组
- 拆分房间组
- 把照片移动到其他房间
- 标记楼层
- 设置房间排序

---

## 3.3 空间导航图

系统核心数据结构应是 Graph，而不是线性图片列表。

### 节点 Node

每一张 360 图是一个节点。

示例：

```json
{
  "id": "pano_001",
  "imageUrl": "https://example.com/pano_001.jpg",
  "roomId": "living_room",
  "floor": 1,
  "sequence": 1,
  "defaultYaw": 90,
  "defaultPitch": 0,
  "position": {
    "x": 0,
    "y": 0,
    "z": 0
  }
}
```

### 边 Edge

热点连接是一条边。

示例：

```json
{
  "id": "edge_001",
  "from": "pano_001",
  "to": "pano_002",
  "yaw": 85,
  "pitch": -25,
  "type": "forward",
  "confidence": 0.91,
  "status": "approved"
}
```

每个节点可以有多个连接：

```text
客厅 → 厨房
客厅 → 车库
客厅 → 厕所
客厅 → 楼梯
```

---

## 3.4 热点系统

热点不只是一个点，而是带语义的空间入口。

### 热点类型

建议至少支持：

- 前进
- 返回
- 进门
- 出门
- 上楼
- 下楼
- 进入房间
- 快速跳转
- 信息点

### 热点精度标准

MVP 阶段不需要厘米级精度，但必须保证连接关系正确。

建议标准：

```text
普通房间内步进：yaw 误差 ±15° 可接受
门口 / 转角 / 楼梯：yaw 误差 ±5° 到 ±10°
pitch：通常固定在地面附近，例如 -20° 到 -35°
```

最重要原则：

```text
热点可以稍微偏，但不能连错房间。
```

---

## 3.5 AI 自动分析模块

AI 不应直接拥有最终决策权，而是生成候选结果。

AI 输出内容：

```json
{
  "from": "pano_001",
  "to": "pano_002",
  "yaw": 82,
  "pitch": -24,
  "type": "doorway",
  "confidence": 0.87,
  "reason": "当前图中右侧可见门洞，目标图为门后空间"
}
```

### AI 分析步骤

```text
1. 图片预处理
2. 房间初步分组
3. 相邻图片候选生成
4. 视觉匹配
5. 门洞/走廊/地面识别
6. 热点位置预测
7. 置信度评分
8. 二次反向验证
```

### 推荐 AI 策略

不要只依赖视觉大模型。

更稳的组合是：

```text
传统计算机视觉：负责图像匹配、相邻关系、方向估计
视觉大模型：负责理解门、走廊、楼梯、房间语义
规则系统：负责过滤明显错误
人工审核：负责最终确认
```

---

## 3.6 AI 二次校验

发布前必须做自动质量检查。

校验内容：

- A → B 是否存在对应的 B → A
- 反向角度是否合理
- 是否存在孤立图片
- 是否存在单向连接
- 是否存在热点重叠
- 是否存在低置信度连接
- 是否存在未命名房间
- 是否存在同一热点连接多个不相关房间

示例规则：

```text
如果 A → B 的 yaw 是 90°，那么 B → A 大致应接近 270°。
如果偏差过大，则标记为人工复核。
```

---

## 4. 人工审核后台

人工审核后台是产品成败关键。

后台需要支持：

### 图片管理

- 查看所有 360 图
- 按房间分组查看
- 调整图片顺序
- 删除图片
- 替换图片

### 房间管理

- 修改房间名
- 合并房间
- 拆分房间
- 设置楼层
- 设置房间封面

### 热点编辑

- 查看 AI 推荐热点
- 拖动热点位置
- 新增热点
- 删除热点
- 修改目标图片
- 修改热点类型
- 查看置信度
- 查看 AI 原因说明

### 发布前检查

- 显示错误列表
- 显示低置信度连接
- 显示孤立节点
- 一键生成反向连接
- 一键预览用户视角

---

## 5. 数据结构设计

## 5.1 House

```json
{
  "id": "house_001",
  "title": "12 Example Street",
  "address": "Auckland",
  "status": "draft",
  "createdAt": "2026-05-28T10:00:00Z"
}
```

## 5.2 Floor

```json
{
  "id": "floor_001",
  "houseId": "house_001",
  "name": "Ground Floor",
  "level": 1
}
```

## 5.3 Room

```json
{
  "id": "room_001",
  "floorId": "floor_001",
  "name": "Living Room",
  "type": "living_room",
  "sortOrder": 1
}
```

## 5.4 Panorama

```json
{
  "id": "pano_001",
  "roomId": "room_001",
  "imageUrl": "...",
  "thumbnailUrl": "...",
  "sequence": 1,
  "defaultYaw": 0,
  "defaultPitch": 0,
  "captureOrder": 1,
  "aiGroupConfidence": 0.93
}
```

## 5.5 Hotspot

```json
{
  "id": "hotspot_001",
  "fromPanoId": "pano_001",
  "toPanoId": "pano_002",
  "yaw": 85,
  "pitch": -25,
  "type": "forward",
  "label": "Go to Kitchen",
  "confidence": 0.88,
  "status": "pending_review"
}
```

---

## 6. MVP 范围

第一版不要追求全自动，重点是把流程跑通。

### MVP 必须有

- 上传 360 图片
- 360 图片浏览
- 手动创建热点
- AI 初步推荐热点
- 人工编辑热点
- 房间分组
- 发布预览链接
- 移动端浏览

### MVP 可以暂缓

- 精准小地图
- 自动生成户型图
- 自动路径规划
- AI 语音带看
- 3D Dollhouse 效果
- 精准空间测量

---

## 7. 版本路线图

## V1：可用版本

目标：实现基础 360 看房和人工热点编辑。

功能：

- 图片上传
- 360 浏览器
- 手动热点
- 房间目录
- 发布链接

## V2：AI 辅助版本

目标：AI 帮助减少人工工作量。

功能：

- AI 房间分组
- AI 推荐相邻图片
- AI 推荐热点角度
- 置信度评分
- 人工审核后台

## V3：空间图版本

目标：形成完整室内导航图。

功能：

- 房间关系图
- 双向连接校验
- 孤立节点检测
- 低置信度提醒
- 小地图基础版

## V4：高级导览版本

目标：提升商业展示能力。

功能：

- 自动看房路线
- AI 语音带看
- 房间亮点标注
- 户型图联动
- 数据分析，例如用户最常看的房间

---

## 8. 推荐技术架构

### 前端

- React / Next.js
- Three.js / Marzipano / Pannellum
- Zustand / Redux 管理状态
- Canvas/WebGL 展示全景
- 移动端手势支持

### 后端

- Node.js / Python FastAPI
- PostgreSQL 存储业务数据
- S3 / Cloudflare R2 存储图片
- Redis 做任务队列缓存
- Background Worker 处理 AI 分析任务

### AI 服务

- 图片相似度匹配
- 视觉特征提取
- 门洞 / 地面 / 走廊识别
- 视觉大模型语义判断
- 规则引擎过滤

### 基础表结构

```text
houses
floors
rooms
panoramas
hotspots
ai_jobs
ai_suggestions
publish_versions
```

---

## 9. 关键产品原则

### 原则一：连接关系优先于热点精度

热点偏一点可以接受，但连错房间会严重破坏用户体验。

### 原则二：AI 只做推荐，不直接发布

AI 结果必须经过规则过滤和人工审核。

### 原则三：拍摄规范决定 AI 上限

如果拍摄顺序混乱、距离过远、门口漏拍，AI 后处理会很难。

### 原则四：从一开始就用 Graph 数据结构

不要把系统设计成线性图片列表，否则后期做房间关系、小地图、自动路径会很痛苦。

### 原则五：后台审核体验和用户浏览体验同等重要

因为 AI 不可能 100% 准确，人工修正效率决定产品是否能规模化。

---

## 10. 风险与解决方案

### 风险 1：AI 连错图

解决方案：

- 加置信度评分
- 低置信度必须人工确认
- 加反向校验
- 限制只在相邻顺序或同房间内匹配

### 风险 2：拍摄质量不稳定

解决方案：

- 拍摄 App 给出路线提示
- 拍摄时强制记录顺序
- 门口/转角提示补拍
- 图片上传后自动质量检测

### 风险 3：360 图片加载慢

解决方案：

- 生成缩略图
- 多分辨率切片
- 预加载下一张
- CDN 加速
- 低清先显示，高清后替换

### 风险 4：人工审核成本高

解决方案：

- AI 只标记可疑项
- 批量通过高置信度热点
- 支持一键生成反向连接
- 支持快捷键和拖拽编辑

---

## 11. 最终建议

这款产品最合理的方向是：

```text
AI 辅助的 360 室内空间导航编辑器
```

而不是单纯的：

```text
360 图片播放器
```

核心竞争力应该放在：

- 自动分组
- 自动连接
- 自动热点推荐
- 可审核工作流
- 空间导航图
- 后续小地图和自动带看能力

第一阶段先把“人工可控 + AI 辅助”做好。等数据积累足够后，再逐步提高自动化比例。

