# Depth Anything V2 视差教程

从有前中后层次的原创室内图生成相对深度，再用五像素以内的确定性位移做轻微2.5D小样。一张照片做3D运镜会遇到露底，本题保留黑洞供检查，不承诺还原真实隐藏面。

## 执行范围

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

## 步骤

### 1. 选择有明确前后层次的输入

打开room.png，确认玩具、箱体、显示器和后墙是同一张Blender原生场景图。下载包另有几何深度参考，但它由原场景计算，不是Depth Anything V2预测。

### 2. 安装V2并选择相对深度Small权重

按官方说明准备Depth-Anything-V2环境和depth_anything_v2_vits.pth。相对模型与metric子目录使用不同权重；本题不要把灰度数字写成米，也不把Small的许可外推给其他规格。

### 3. 保存原尺寸的相对深度数组

在官方仓库运行run-depth-v2.py，读取room.png并保存actual-relative-depth.npy。infer_image的输入是OpenCV读到的BGR图，输出应与输入高宽一致；同时保存配置和权重文件名。

### 4. 先确认近远方向再决定位移

回看前景玩具与后墙的值，确认near-high应如何设置。灰度色表并不自动表示近处一定更亮；先检查数值和模型语义，再运行视差，避免前景比远景移动更少。

### 5. 运行可检查的小幅前向映射

make-parallax.py默认24帧，正弦水平位移最大5像素。它只按深度搬移现有像素，不生成被遮挡的纹理；前向映射留下的黑色孔洞刻意保留，便于看见边缘限制。

### 6. 检查遮挡边缘和画面裁边

逐帧看玩具天线、箱边、显示器边缘及左右画框。把位移调小可减少露底，但不代表深度更准确；大幅绕拍需要额外几何或生成步骤，不能用同一段算法冒充完整3D。

### 7. 编码小样并分清参考与模型链路

把24帧按12fps编码MP4；保存原图、真实预测npy、帧序列和命令。包内geometry-reference-depth.npy只用于运行后处理自检；标有reference的演示片不是深度模型产物。

## 命令

```bash
# 在官方Depth-Anything-V2仓库环境运行
python run-depth-v2.py --repo /path/to/Depth-Anything-V2 --checkpoint /path/to/depth_anything_v2_vits.pth
python make-parallax.py --image room.png --depth actual-relative-depth.npy --near-high --out actual-parallax-frames
ffmpeg -framerate 12 -i actual-parallax-frames/%05d.png -c:v libx264 -pix_fmt yuv420p actual-parallax.mp4
```

## 参考文件

- 以“本题实际文件”列表为准：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#usage

## 本题实际文件

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

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