duy-phamduc68/TrafficLab-3D

GitHub: duy-phamduc68/TrafficLab-3D

一个利用CCTV录像和Google Maps位置创建数字孪生风格交通可视化的开源工具,支持校准、推理和3D可视化全流程。

Stars: 268 | Forks: 30

# TrafficLab 3D TrafficLab 将无障碍性放在首位,只需获取 mp4 格式的 CCTV 录像并知道该位置在 Google Maps 上的位置,任何人都可以创建一个精美的数字孪生演示,展示先进的计算机视觉技术,特别是对于可能无法获得相机校准和同步高质量卫星影像的学生、独立研究人员和爱好者而言。 ![Demo](https://raw.githubusercontent.com/duy-phamduc68/TrafficLab-3D/main/media/demo.gif) [![oosmetrics](https://api.oosmetrics.com/api/v1/badge/achievement/4fcd4788-a378-4d60-970f-3362ff74f714.svg)](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 边界框和卫星图与地面框、速度、方向同步显示。 ![WelcomeTab](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/5e683e7b6c093650.png) 从程序左上角的任意标签页开始操作。 ## 功能 TrafficLab 的功能分布在 3 个主要标签页中,您可以在不丢失其他标签页工作的情况下导航到任意标签页,以下是每个标签页的简要说明。 ### 校准标签页 ![CalibrationStart](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/b6d634e370093654.png) 校准标签页生成 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 投影。 ![CalibrationEnd](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/95184ab680093658.png) **注意:位置码** 您需要准备必要的文件夹和文件来执行校准,程序中也有一个位置标签页帮助您创建用于校准的基础位置文件夹。您可以使用 Adobe Illustrator 创建自定义 SVG 和 ROI,请参阅博客文章/Youtube 视频以获取有关制作这些资源的更详细指南。 ![LocationTab](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/51e2a3cdcf093702.png) ### 推理标签页 ![InferenceTab](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/5186168b1f093705.png) 推理标签页是您跟踪所有输出 JSON 文件生产的中心,这些文件是可视化引擎实际使用的,无需在繁重的渲染之上执行 demanding 的计算。对于参数,您将通过项目根目录中的 `inference_config.yaml` 和 `prior_dimensions.json` 进行控制。JSON 将以压缩的 `.json.gz` 格式保存以节省存储空间。可控参数包括: - 目标检测模型。 - 目标追踪器。 - 速度和方向平滑运动学。 ### 可视化标签页 ![VisualizationTab](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/92ba54ffa7093708.png) 输出 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绕过, 目标追踪, 视频分析, 视频目标检测, 计算机视觉, 逆向工具