ShivamMathtech/TrafficVision-Pro
GitHub: ShivamMathtech/TrafficVision-Pro
一款基于 YOLO 与 ByteTrack 的交通视频分析桌面应用,支持车辆检测、多目标跟踪、点击锁定目标与自动车牌识别。
Stars: 0 | Forks: 0
# TrafficVision Pro
一款用于智能交通视频分析的专业 Python 桌面应用程序。它支持上传的视频文件和实时摄像头,执行 YOLO 车辆检测与持久化多目标跟踪,允许操作员点击车辆锁定其轨迹,并尝试对选定目标进行自动车牌识别 (ANPR)。

## 核心功能
- 打开 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, 凭据扫描, 多目标跟踪, 无后门, 智能交通, 桌面应用, 计算机视觉, 车牌识别, 逆向工具