ShivamMathtech/TrafficVision-Pro

GitHub: ShivamMathtech/TrafficVision-Pro

一款基于 YOLO 与 ByteTrack 的交通视频分析桌面应用,支持车辆检测、多目标跟踪、点击锁定目标与自动车牌识别。

Stars: 0 | Forks: 0

# TrafficVision Pro 一款用于智能交通视频分析的专业 Python 桌面应用程序。它支持上传的视频文件和实时摄像头,执行 YOLO 车辆检测与持久化多目标跟踪,允许操作员点击车辆锁定其轨迹,并尝试对选定目标进行自动车牌识别 (ANPR)。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/cas/9b/9b4225da44a8ea616500a0290453473d81d286ffca592ade36e9919b50f66592.png) ## 核心功能 - 打开 MP4、AVI、MOV、MKV、M4V 或 WebM 交通录像。 - 通过索引直接连接笔记本电脑摄像头、USB 摄像头、采集卡或兼容的虚拟摄像头。 - 使用 Ultralytics YOLO 检测自行车、汽车、摩托车、公交车和卡车。 - 使用 ByteTrack 维护目标身份。 - 在视频中点击车辆以选择并锁定其跟踪 ID。 - 绘制当前的边界框、置信度、估算速度和轨迹历史。 - 使用 EasyOCR 扫描选定车辆的车牌。 - 使用可选的自定义 YOLO 车牌检测器权重,以实现更强的车牌定位能力。 - 查看实时计数、拥堵估计、类别分布、车辆流量、目标详细信息和警报。 - 保存处理后的快照,并将会话检测结果导出为 CSV。 - 通过时间轴在上传的视频中进行跳转。 ## 仪表盘预览 打包应用程序的预览图位于 `docs/application_dashboard_preview.png`。原始设计方向包含在 `docs/reference_dashboard_concept.png` 中。 ## 架构 ``` Video file / Camera │ ▼ OpenCV capture thread │ ▼ Ultralytics YOLO detector │ ▼ ByteTrack multi-object tracker │ ├── Track IDs and paths ├── Approximate speed estimation ├── Analytics and alerts └── Selected vehicle crop │ ▼ Plate localization + EasyOCR │ ▼ PySide6 control-room dashboard ``` 计算机视觉 pipeline 在专用的 `QThread` 中运行,以确保在处理帧时 PySide6 界面保持响应。 ## 推荐环境 - Windows 10/11 或现代 Linux 桌面 - Python **3.11 64 位** - 最低 8 GB RAM;推荐 16 GB - NVIDIA CUDA GPU 为可选。默认使用 CPU 模式,可在带有集成显卡的系统上运行。 - 强烈建议使用清晰且分辨率足够高的交通视频进行车牌识别。 ## Windows 安装说明 1. 安装 Python 3.11 64 位,并勾选 **Add Python to PATH**。 2. 解压项目 ZIP 文件。 3. 双击 `setup_windows.bat`。 4. 安装完成后,双击 `run.bat`。 手动命令: ``` py -3.11 -m venv .venv .venv\Scripts\activate python -m pip install --upgrade pip wheel setuptools pip install -r requirements.txt python main.py ``` 如果无法安装 EasyOCR 或 PyTorch,请使用仅包含跟踪功能的设置: ``` pip install -r requirements-lite.txt python main.py ``` 应用程序的其余功能仍可正常使用,但车牌面板将显示 `OCR UNAVAILABLE`。 ## Linux 安装说明 ``` chmod +x setup_linux.sh run.sh ./setup_linux.sh ./run.sh ``` 某些 Linux 系统还需要由发行版提供的 Qt/OpenCV 运行时库。 ## 首次启动与模型下载 默认检测器为 `yolo11n.pt`。Ultralytics 会在首次需要时自动下载官方模型权重。EasyOCR 也可能会在首次扫描车牌时下载其英文识别模型。因此,首次运行可能需要互联网连接。 权重被缓存后,即可在本地进行正常处理。 ## 操作员工作流程 1. 选择 **Open Video** 或 **Start Camera**。 2. 等待状态栏显示 `AI tracking active`。 3. 直接点击车辆边界框。 4. 选定的轨迹将被高亮显示,其轨迹将保持可见。 5. ANPR 面板会定期扫描目标并显示最佳的车牌候选结果。 6. 使用 **Snapshot** 保存处理后的视频帧。 7. 使用 **Export CSV** 保存跟踪 ID、类别、置信度、边界框、估算速度以及识别出的车牌数值。 ## 摄像头选择 默认摄像头索引为 `0`。 - `0`:通常为笔记本电脑或主网络摄像头 - `1`:通常为第一个外部 USB 摄像头 - `2+`:其他摄像头、采集卡或虚拟摄像头 在左侧面板中更改 **Camera index**,然后选择 **Connect Selected Camera**。 ## 提高车牌识别准确率 内置的兜底方案会在选定车辆内部搜索类似车牌的矩形区域,并将其传递给 EasyOCR。这作为一般演示非常有用,但生产级别的 ANPR 应使用专门的车牌检测器。 将兼容的 Ultralytics 权重放置于: ``` models/license_plate.pt ``` 应用程序会自动检测此文件,并在执行 OCR 之前使用它。检测器应输出车牌周围的边界框。为获得最佳效果,请根据目标国家/地区、摄像头角度和车牌样式训练或获取合适的权重。 在以下情况下,准确率也会提高: - 车牌宽度至少约为 100 像素; - 运动模糊较低; - 曝光受控; - 以一致的角度观察车辆; - 摄像头位置足够靠近车道; - 使用特定国家/地区的 OCR 后处理器。 ## 速度校准 显示的速度是根据跟踪到的像素位移得出的估算值: ``` speed ≈ pixel displacement × metres per pixel ÷ elapsed time ``` 为特定的摄像头场景设置 **Metres/pixel**。由于整个图像中的透视关系会发生变化,因此单个数值仅为近似值。法律或执法级别的速度测量需要适当的摄像头校准、透视变换、经精确测量的距离、时间戳验证以及特定司法管辖区的认证。 ## 选择 YOLO 模型 模型字段是可编辑的。 - `yolo11n.pt`:速度最快;推荐用于 CPU - `yolo11s.pt`:准确率更高,但额外负载适中 - `yolo11m.pt`:性能更强,但在 CPU 上速度明显变慢 - 也可以输入本地自定义模型路径 要使用 NVIDIA GPU,请在安装兼容 CUDA 的 PyTorch 版本后选择 `cuda:0`。如果不可用 CUDA,请保持选择 `cpu`。 ## 导出的 CSV 字段 - 挂钟时间戳 - 以秒为单位的源时间 - 帧编号 - 跟踪 ID - 车辆类别 - 检测置信度 - 估算速度 - 选定目标识别出的车牌 - 边界框坐标 为了控制导出文件大小,行会每处理五帧采样一次。 ## 项目结构 ``` traffic_vision_pro/ ├── main.py ├── requirements.txt ├── requirements-lite.txt ├── setup_windows.bat ├── run.bat ├── setup_linux.sh ├── run.sh ├── app/ │ ├── config.py │ ├── domain.py │ ├── main_window.py │ ├── styles.py │ ├── utils.py │ ├── video_processor.py │ ├── vision_engine.py │ └── widgets/ ├── models/ │ └── license_plate.pt # optional, not included ├── exports/ └── tests/ ``` ## 许可协议 本源代码包基于 GNU Affero General Public License v3.0 或更高版本提供,因为它集成了采用 AGPL 许可的 Ultralytics 包。在进行分发或网络部署之前,请查阅 `LICENSE`。构建专有或商业产品的组织应查看 Ultralytics 当前的许可选项,并在需要时获取相应的许可。第三方软件包仍受其自身许可协议的约束。 ## 重要操作说明 - 本项目是一个工程原型,并非经过认证的执法系统。 - 车牌识别性能在很大程度上取决于图像质量和车牌检测器。 - 在场景经过校准之前,速度值均为近似值。 - 请确认部署位置适用的隐私、监控、数据保留以及车牌处理相关法规。 - 未经人工审查,请勿依赖自动警报。 ## 故障排除 ### `No module named PySide6`, `ultralytics`, 或 `easyocr` 激活 `.venv` 并运行: ``` pip install -r requirements.txt ``` ### 摄像头无法打开 尝试摄像头索引 `0`、`1` 和 `2`。关闭可能已经正在使用摄像头的其他应用程序。确认已为桌面应用程序启用 Windows 摄像头隐私权限。 ### FPS 非常低 使用 `yolo11n.pt`,在 `app/config.py` 中调低 `image_size`,除非已正确安装 CUDA,否则请将设备保持在 CPU,或者处理分辨率更低的视频。 ### 车牌一直显示为 `SCANNING` 或 `NOT READ` 使用距离更近的录像,并在 `models/license_plate.pt` 处添加训练好的车牌检测器。常规兜底方案无法可靠地定位极小或角度倾斜的车牌。 ### YOLO 权重无法下载 首次运行时请连接互联网,或者将所需的模型文件放置在项目目录中,并在模型字段中输入其本地路径。
标签:Python, YOLO, 凭据扫描, 多目标跟踪, 无后门, 智能交通, 桌面应用, 计算机视觉, 车牌识别, 逆向工具