從影片生成 3D 點雲,到自動偵測室內佈局的端對端流程。
影片 (.mp4)
↓ SLAM3R
原始點雲 (.ply) ← 通常歪斜、無比例尺
↓ pipeline/preprocess_aligned.py
對齊點雲 (.ply) ← 地板水平、牆面軸對齊、高度 2.5m
↓ inference.py
佈局文字 (.txt) ← 牆壁/門/窗/家具座標
↓ visualize.py
3D 視覺化 (.rrd) ← 用 Rerun 開啟
cd /home/kyzen/SpatialLM
conda activate spatiallm
bash pipeline/run_pipeline.sh <輸入點雲.ply> <輸出目錄>
實際範例:
bash pipeline/run_pipeline.sh \
/home/kyzen/SLAM3R/results/Replica_demo/Replica_demo_room0_recon.ply \
result/Replica_demo/improved
完成後用 Rerun 查看結果:
rerun result/Replica_demo/improved/result.rrd --web-viewer
# 瀏覽器開 http://localhost:9090
如果需要逐步控制,可以手動執行每一步:
cd /home/kyzen/SLAM3R
# 準備影片幀(放在 data/<場景名稱>/ 下)
# 執行 SLAM3R 重建
bash scripts/demo_replica.sh
輸出位置:/home/kyzen/SLAM3R/results/<場景名稱>/<場景名稱>_recon.ply
注意:SLAM3R 輸出的點雲通常有三個問題:
- 地板不水平(歪斜或顛倒)
- 牆面沒有對齊座標軸
- 比例尺不是公尺制
cd /home/kyzen/SpatialLM
conda activate spatiallm
python pipeline/preprocess_aligned.py \
--input /home/kyzen/SLAM3R/results/Replica_demo/Replica_demo_room0_recon.ply \
--output result/Replica_demo/improved/aligned_pointcloud.ply \
--target_height 2.5
前處理做了什麼(v3,6 步驟):
| 步驟 | 說明 | 方法 |
|---|---|---|
| 1 | 載入點雲 | open3d.io.read_point_cloud |
| 2 | 找最大水平面 | RANSAC(相對 threshold:Z range 的 0.5%) |
| 3 | 對齊地板到水平 | Rodrigues 旋轉公式 |
| 4 | 縮放到 2.5m 高度 | scale = 2.5 / 當前高度 |
| 5 | 自動偵測地板方向 | 家具複雜度評分(相對閾值,scale 無關) |
| 6 | 牆面對齊 + 位置調整 | OpenCV minAreaRect + z=0 + 中心原點 |
不含去噪步驟 — SpatialLM
inference.py已內建cleanup_pcd。
參數說明:
| 參數 | 說明 | 預設值 |
|---|---|---|
--input | 輸入點雲 (.ply) | 必填 |
--output | 輸出點雲 (.ply) | 必填 |
--target_height | 目標房間高度(公尺) | 2.5 |
--flip | 緊急手動覆蓋:強制翻轉,跳過自動偵測 | 關閉(自動偵測) |
地板方向是自動偵測的(v3 使用相對閾值)。 腳本比較「翻轉 / 不翻轉」兩個方向的「家具複雜度分數」(高度 2%~50% 帶的點數 × Z 標準差),選高分方向。因為使用相對閾值,scale 前後都能正確判斷。天花板沒有家具,永遠不會贏。 只有當自動偵測明顯判斷錯誤時,才需要加
--flip強制覆蓋。
python inference.py \
--point_cloud result/Replica_demo/improved/aligned_pointcloud.ply \
--output result/Replica_demo/improved/layout.txt \
--model_path models/SpatialLM1.1-Qwen-0.5B
⚠️
--model_path一定要用 本地路徑models/SpatialLM1.1-Qwen-0.5B, 不要用manycore-research/SpatialLM1.1-Qwen-0.5B(那會重新從網路下載)。
python visualize.py \
--point_cloud result/Replica_demo/improved/aligned_pointcloud.ply \
--layout result/Replica_demo/improved/layout.txt \
--save result/Replica_demo/improved/result.rrd
rerun result/Replica_demo/improved/result.rrd --web-viewer
# 瀏覽器開 http://localhost:9090
SpatialLM/
├── pipeline/ # 前處理工具
│ ├── preprocess_aligned.py # v3 點雲對齊腳本(6 步驟)
│ ├── run_pipeline.sh # 一鍵執行完整流程
│ └── README.md # 技術細節說明
├── inference.py # SpatialLM 推論
├── visualize.py # 生成 Rerun 視覺化
├── models/
│ └── SpatialLM1.1-Qwen-0.5B/ # 本地模型權重
├── result/ # 輸出結果
│ └── Replica_demo/
│ └── improved/
│ ├── aligned_pointcloud.ply # 對齊後點雲
│ ├── layout.txt # 佈局偵測結果
│ └── result.rrd # Rerun 視覺化檔
└── PIPELINE_README.md # ← 本文件
--flip 強制翻轉後重跑2.500m--model_path,它會先下載模型(~2.4GB)models/SpatialLM1.1-Qwen-0.5B 就不用下載--web-viewer,然後瀏覽器開 http://<伺服器IP>:9090rerun result.rrd(會開桌面版)Python
99.4%
從影片生成 3D 點雲,到自動偵測室內佈局的端對端流程。
影片 (.mp4)
↓ SLAM3R
原始點雲 (.ply) ← 通常歪斜、無比例尺
↓ pipeline/preprocess_aligned.py
對齊點雲 (.ply) ← 地板水平、牆面軸對齊、高度 2.5m
↓ inference.py
佈局文字 (.txt) ← 牆壁/門/窗/家具座標
↓ visualize.py
3D 視覺化 (.rrd) ← 用 Rerun 開啟
cd /home/kyzen/SpatialLM
conda activate spatiallm
bash pipeline/run_pipeline.sh <輸入點雲.ply> <輸出目錄>
實際範例:
bash pipeline/run_pipeline.sh \
/home/kyzen/SLAM3R/results/Replica_demo/Replica_demo_room0_recon.ply \
result/Replica_demo/improved
完成後用 Rerun 查看結果:
rerun result/Replica_demo/improved/result.rrd --web-viewer
# 瀏覽器開 http://localhost:9090
如果需要逐步控制,可以手動執行每一步:
cd /home/kyzen/SLAM3R
# 準備影片幀(放在 data/<場景名稱>/ 下)
# 執行 SLAM3R 重建
bash scripts/demo_replica.sh
輸出位置:/home/kyzen/SLAM3R/results/<場景名稱>/<場景名稱>_recon.ply
注意:SLAM3R 輸出的點雲通常有三個問題:
- 地板不水平(歪斜或顛倒)
- 牆面沒有對齊座標軸
- 比例尺不是公尺制
cd /home/kyzen/SpatialLM
conda activate spatiallm
python pipeline/preprocess_aligned.py \
--input /home/kyzen/SLAM3R/results/Replica_demo/Replica_demo_room0_recon.ply \
--output result/Replica_demo/improved/aligned_pointcloud.ply \
--target_height 2.5
前處理做了什麼(v3,6 步驟):
| 步驟 | 說明 | 方法 |
|---|---|---|
| 1 | 載入點雲 | open3d.io.read_point_cloud |
| 2 | 找最大水平面 | RANSAC(相對 threshold:Z range 的 0.5%) |
| 3 | 對齊地板到水平 | Rodrigues 旋轉公式 |
| 4 | 縮放到 2.5m 高度 | scale = 2.5 / 當前高度 |
| 5 | 自動偵測地板方向 | 家具複雜度評分(相對閾值,scale 無關) |
| 6 | 牆面對齊 + 位置調整 | OpenCV minAreaRect + z=0 + 中心原點 |
不含去噪步驟 — SpatialLM
inference.py已內建cleanup_pcd。
參數說明:
| 參數 | 說明 | 預設值 |
|---|---|---|
--input | 輸入點雲 (.ply) | 必填 |
--output | 輸出點雲 (.ply) | 必填 |
--target_height | 目標房間高度(公尺) | 2.5 |
--flip | 緊急手動覆蓋:強制翻轉,跳過自動偵測 | 關閉(自動偵測) |
地板方向是自動偵測的(v3 使用相對閾值)。 腳本比較「翻轉 / 不翻轉」兩個方向的「家具複雜度分數」(高度 2%~50% 帶的點數 × Z 標準差),選高分方向。因為使用相對閾值,scale 前後都能正確判斷。天花板沒有家具,永遠不會贏。 只有當自動偵測明顯判斷錯誤時,才需要加
--flip強制覆蓋。
python inference.py \
--point_cloud result/Replica_demo/improved/aligned_pointcloud.ply \
--output result/Replica_demo/improved/layout.txt \
--model_path models/SpatialLM1.1-Qwen-0.5B
⚠️
--model_path一定要用 本地路徑models/SpatialLM1.1-Qwen-0.5B, 不要用manycore-research/SpatialLM1.1-Qwen-0.5B(那會重新從網路下載)。
python visualize.py \
--point_cloud result/Replica_demo/improved/aligned_pointcloud.ply \
--layout result/Replica_demo/improved/layout.txt \
--save result/Replica_demo/improved/result.rrd
rerun result/Replica_demo/improved/result.rrd --web-viewer
# 瀏覽器開 http://localhost:9090
SpatialLM/
├── pipeline/ # 前處理工具
│ ├── preprocess_aligned.py # v3 點雲對齊腳本(6 步驟)
│ ├── run_pipeline.sh # 一鍵執行完整流程
│ └── README.md # 技術細節說明
├── inference.py # SpatialLM 推論
├── visualize.py # 生成 Rerun 視覺化
├── models/
│ └── SpatialLM1.1-Qwen-0.5B/ # 本地模型權重
├── result/ # 輸出結果
│ └── Replica_demo/
│ └── improved/
│ ├── aligned_pointcloud.ply # 對齊後點雲
│ ├── layout.txt # 佈局偵測結果
│ └── result.rrd # Rerun 視覺化檔
└── PIPELINE_README.md # ← 本文件
--flip 強制翻轉後重跑2.500m--model_path,它會先下載模型(~2.4GB)models/SpatialLM1.1-Qwen-0.5B 就不用下載--web-viewer,然後瀏覽器開 http://<伺服器IP>:9090rerun result.rrd(會開桌面版)Python
99.4%