# Depth Anything V2 米制点云教程

使用室内metric权重，把一张图的米制预测按已知相机内参反投影为PLY。重点是单位、坐标和标定范围，照片生成点云不等于精密测量。

## 执行范围

已执行：Blender 5.2.1原创几何、真实相机渲染、UV展开、CPU手工材质烘焙、GLB/OBJ导出重载；本题附带离线检查。未执行：目标项目模型下载/推理、Gradio运行、生成纹理/深度/视频mask。reference、geometry-reference、original命名文件都是原创输入或手工参考，绝非模型结果。官方图片只在网页按来源引用。

## 步骤

### 1. 先打开输入和标定记录

room.png是原创室内场景，room-camera.json记录640×360分辨率与相机内参。其米制几何参考由Blender场景计算，适合验证反投影代码；不能把它标作AI测量结果。

### 2. 选择室内Hypersim而非相对版权重

进入官方metric_depth分支路径，使用Hypersim室内Small权重与max_depth=20配置；室外VKITTI和普通relative模型不能混用。把实际checkpoint来源和配置写入运行记录。

### 3. 生成真实metric数组后核对单位

run-depth-v2.py --metric加载metric模型并保存actual-metric-depth.npy。读取有限值、零/负值、范围和尺寸；超出本模型标称范围的点需记录，不能把彩色深度预览的RGB当距离。

### 4. 按原图尺寸使用相机内参

metric-to-pointcloud.py按fx、fy、cx、cy计算每像素射线。若推理或图片被裁切/缩放，先相应更新内参；不能仍用640×360的原值重投影另一张尺寸的图。

### 5. 明确点云坐标并保存PLY

本包输出相机坐标：X向右、Y向上、-Z向前。为了快速查看每4个有效点采样一个，PLY头部点数与实际行数一致；这个采样策略不改变米制预测的单位。

### 6. 重载点云再抽查前中后结构

在Blender或支持PLY的查看器导入，回看玩具、箱体、后墙的相对位置和尺度。先确认坐标轴，没有看到正面不代表点云为空；单图不可见侧面不会凭空出现。

### 7. 把几何自检和模型精度分开记录

可先用geometry-reference-depth.npy实际运行反投影脚本，验证文件结构与相机数学，再换actual-metric-depth.npy。几何参考通过只证明管线可读，不证明模型对真实室内物体的距离可靠。

## 命令

```bash
# 在官方仓库环境运行室内metric模型
python run-depth-v2.py --repo /path/to/Depth-Anything-V2 --metric --checkpoint /path/to/depth_anything_v2_metric_hypersim_vits.pth
python metric-to-pointcloud.py --depth actual-metric-depth.npy --camera room-camera.json --out actual-pointcloud.ply
# 离线几何参考验证，非模型预测
python metric-to-pointcloud.py --depth geometry-reference-depth.npy --out geometry-reprojection.ply
```

## 参考文件

- 以“本题实际文件”列表为准：original-toy.png或front.png/views为Blender原创输入。
- 若本包含reference-colored.glb：它是手工材质参考。
- 若本包含reference-textured.obj/MTL/PNG：它们是Blender真实UV/烘焙交换文件。
- 若本包含geometry-reference-depth.npy/PLY：它们是原创场景已知几何，非深度模型预测。
- runtime.json：目标模型初始not-executed。
- verification.json / blender-reload.json：文件及重载证据，不是模型生成证据。

## 官方依据

https://github.com/DepthAnything/Depth-Anything-V2
https://github.com/DepthAnything/Depth-Anything-V2/blob/main/metric_depth/README.md

## 本题实际文件

- `blender-reload.json`
- `commands.md`
- `geometry-pointcloud-orbit/00000.png`
- `geometry-pointcloud-orbit/00001.png`
- `geometry-pointcloud-orbit/00002.png`
- `geometry-pointcloud-orbit/00003.png`
- `geometry-pointcloud-orbit/00004.png`
- `geometry-pointcloud-orbit/00005.png`
- `geometry-pointcloud-orbit/00006.png`
- `geometry-pointcloud-orbit/00007.png`
- `geometry-pointcloud-orbit/00008.png`
- `geometry-pointcloud-orbit/00009.png`
- `geometry-pointcloud-orbit/00010.png`
- `geometry-pointcloud-orbit/00011.png`
- `geometry-pointcloud-orbit/00012.png`
- `geometry-pointcloud-orbit/00013.png`
- `geometry-pointcloud-orbit/00014.png`
- `geometry-pointcloud-orbit/00015.png`
- `geometry-pointcloud-orbit/00016.png`
- `geometry-pointcloud-orbit/00017.png`
- `geometry-pointcloud-orbit/00018.png`
- `geometry-pointcloud-orbit/00019.png`
- `geometry-pointcloud-orbit/00020.png`
- `geometry-pointcloud-orbit/00021.png`
- `geometry-pointcloud-orbit/00022.png`
- `geometry-pointcloud-orbit/00023.png`
- `geometry-pointcloud.png`
- `geometry-reference-depth.npy`
- `geometry-reference-depth.png`
- `geometry-reference-pointcloud.mp4`
- `geometry-reference-pointcloud.ply`
- `geometry-reprojection.ply`
- `helper-checks.json`
- `metric-to-pointcloud.py`
- `original-toy.png`
- `review.csv`
- `room-camera.json`
- `room.png`
- `run-depth-v2.py`
- `runtime.json`
- `verify.py`

模型命令仅供在你准备好的官方环境执行；from_pretrained类入口首次运行可能拉取大权重，本轮没有执行。
