duy-phamduc68/TrafficLab-3D
GitHub: duy-phamduc68/TrafficLab-3D
一个利用CCTV录像和Google Maps位置创建数字孪生风格交通可视化的开源工具,支持校准、推理和3D可视化全流程。
Stars: 268 | Forks: 30
# TrafficLab 3D
TrafficLab 将无障碍性放在首位,只需获取 mp4 格式的 CCTV 录像并知道该位置在 Google Maps 上的位置,任何人都可以创建一个精美的数字孪生演示,展示先进的计算机视觉技术,特别是对于可能无法获得相机校准和同步高质量卫星影像的学生、独立研究人员和爱好者而言。

[](https://oosmetrics.com/repo/duy-phamduc68/TrafficLab-3D)
版本:v1.1
开发者:Yuk
- [Yuk 的博客](https://yuk068.github.io/)
- [Github(个人)](https://github.com/yuk068)
- [Github(工作)](https://github.com/duy-phamduc68)
补充资源:
- Youtube 演示视频 [TrafficLab 3D v1.0 Demo](https://www.youtube.com/watch?v=AYUXXnzenvk)
- Youtube 指南视频 [TrafficLab 3D Guide](https://www.youtube.com/watch?v=PeL2v1YEdYA)
- 查看完整学术报告 [Google Drive](https://drive.google.com/file/d/1CmP-sYHWvxN3JxYA_rR2S4tW9YdQcVjg/view?usp=sharing)
- 阅读 TrafficLab 博客文章 [yuk068.github.io](https://yuk068.github.io/2026/02/20/traffilclab-3d-overview)
**强烈建议您阅读本 README,如果您想在自己的机器上运行此程序。点击[此处](#getting-started)跳转到入门指南**
```
TrafficLab-3D/
├── location/
│ └── {location_code}/
│ ├── footage/
│ │ └── *.mp4
│ │
│ ├── illustrator/ (optional, Adobe Illustrator assets)
│ │ ├── layout_{location_code}.ai
│ │ ├── roi_{location_code}.ai
│ │ └── *.ai
│ │
│ ├── G_projection_{location_code}.json
│ ├── cctv_{location_code}.png (critical!)
│ ├── sat_{location_code}.png (critical!)
│ ├── layout_{location_code}.svg (optional)
│ └── roi_{location_code}.png (optional)
│
├── media/ (resources for README and Introduction tab)
│
├── gui/ (GUI implementation)
│
├── models/ (object detection & tracker models)
│ └── *.pt (YOLO checkpoints)
│
├── output/
│ └── model-{model_name}_tracker-{tracker_name}/
│ └── {config-name}/
│ └── {location_code}/
│ └── *.json.gz (inference outputs)
│
├── environment.yml
├── inference_config.yaml
├── prior_dimensions.json
└── main.py
```
## 简介
TrafficLab 是一个端到端的交通分析套件,功能包括:
- **校准:** 在任何 CCTV 及其卫星地图之间建立双向投影,支持自定义 SVG。
- **推理:** 轻松切换目标检测模型和目标追踪器,以及丰富的运动学参数和全面的参数控制。
- **可视化:** 带来"数字孪生"体验,CCTV 与 3D 边界框和卫星图与地面框、速度、方向同步显示。

从程序左上角的任意标签页开始操作。
## 功能
TrafficLab 的功能分布在 3 个主要标签页中,您可以在不丢失其他标签页工作的情况下导航到任意标签页,以下是每个标签页的简要说明。
### 校准标签页

校准标签页生成 G 投影 JSON 文件(参见报告),用于建立 CCTV 和 SAT(卫星)域之间的双向投影,它提供了一个全面的、向后兼容的阶段性校准流程,包括以下阶段:
- **阶段 1:** 畸变校正
- **选取阶段:** 快速验证并初始化给定位置码的 G 投影构建/重建。
- **镜头阶段:** 配置内参矩阵 K。
- **畸变校正阶段:** 调整畸变系数,遵循 Brown-Conrady 畸变模型(5 个系数)。
- **验证 1:** 您可以确认畸变和内参,结束本阶段。
- **阶段 2:** 单应性
- **单应性锚点阶段:** 基于手动点对进行单应性计算,使用 RANSAC 求解器。
- **单应性视场阶段:** 检查叠加在 SAT 地图上的变形 CCTV,同时也作为视场多边形用于直观可视化。
- **验证 2:** 在 CCTV 中点击地面接触点,观察其在 SAT 地图上的显示。
- **阶段 3:** 视差
- **视差主体阶段:** 建立 2 个主体的头部和地面接触点,输入其高度,计算相机位置。
- **距离参考阶段:** 输入距离(可从 Google Maps/Earth 获取)以建立像素/米比率。
- **验证 3:** 点击头部点,输入高度,观察 CCTV 中的地面接触点和 SAT 地图上的实际位置。
- **可选阶段:**
- **SVG 阶段:** 计算 SVG 和 SAT 之间的仿射矩阵。
- **ROI 阶段:** 选择 ROI 的丢弃策略。
- **最终验证:** 测试 2D 边界框如何在 CCTV 中转换为 3D 框,以及在 SAT 中的地面框。
- **保存阶段:** 确认保存该位置码的 G 投影。

**注意:位置码**
您需要准备必要的文件夹和文件来执行校准,程序中也有一个位置标签页帮助您创建用于校准的基础位置文件夹。您可以使用 Adobe Illustrator 创建自定义 SVG 和 ROI,请参阅博客文章/Youtube 视频以获取有关制作这些资源的更详细指南。

### 推理标签页

推理标签页是您跟踪所有输出 JSON 文件生产的中心,这些文件是可视化引擎实际使用的,无需在繁重的渲染之上执行 demanding 的计算。对于参数,您将通过项目根目录中的 `inference_config.yaml` 和 `prior_dimensions.json` 进行控制。JSON 将以压缩的 `.json.gz` 格式保存以节省存储空间。可控参数包括:
- 目标检测模型。
- 目标追踪器。
- 速度和方向平滑运动学。
### 可视化标签页

输出 JSON 文件的可视化引擎,通过工具栏和键盘快捷键提供全面控制,CCTV 和 SAT 面板可灵活并排显示。
## 入门指南
安装必要的 conda/venv 环境,然后运行 `main.py`:
```
conda env create -f environment.yml
python main.py
```
在[this Google Drive](https://drive.google.com/drive/folders/14NVnbrUUfII3tRdI8OOEPnLzKbs3SPvn?usp=sharing) 中,您可以找到:
- 一些针对 `models/` 文件夹微调的 `YOLOv8-s` 和 `YOLOv11-s` 模型。
- 同一位置码的两个文件夹,已构建好投影,1 个带 SVG,1 个不带。如果您想要更多不同位置的预构建投影,请联系我。将这些放入 `location/`。
- 更新:我添加了更多我在测试中使用的预构建位置码到 Drive 中。随意将它们加载到 TrafficLab 中,运行推理,并查看可视化效果!
- 一个预处理好的 `.json.gz` 输出文件,可直接用于可视化(需要同一 Drive 中的 `location/` 下的 `119NH` 文件夹)。
本项目灵感来自论文 [Rezaei et al. 2023](https://www.sciencedirect.com/science/article/pii/S0957417423007558)
## 运行配置
如果您确实想配置自己的模型并调整运动学参数,则需要检查 `inference_config.yaml` 和 `prior_dimensions.json` 文件。
## 开放问题
- 此方法仅适用于单一平面环境。
- 数据非常"忽略物理",它主要直接采用检测器和追踪器的输出,可能存在噪声:
- 遮挡会使其背后的物体消失(例如大型公交车、卡车遮挡轿车、行人)。
- 车辆 3D 框不遵循任何车辆模型,确保它们符合运动学自行车模型将消除很多问题,例如车辆框随机旋转或瞬移。
- 用户不能突然出现在场景中间或消失,一些进入/退出注释可能会有所帮助。
- 制作初始 G 投影和 SVG 地图仍然是一项非常繁琐的任务。
## 更新日志
- v1.0:初始版本。
- v1.1:重构代码库并修复错误。
### 长期愿景
我希望将这个想法扩展到城市规模,实现自动校准 + 持续的检测器和追踪器改进。最终足以支持高保真的下游任务,如仿真、数字孪生、自然语言查询、强化学习等...
标签:3D可视化, CCTV视频分析, Google Maps, Homebrew安装, OpenCV, Python, 交通可视化, 交通监控, 人工智能, 图像处理, 地理信息系统, 数字孪生, 无后门, 智能交通系统, 深度学习, 用户模式Hook绕过, 目标追踪, 视频分析, 视频目标检测, 计算机视觉, 逆向工具