这是一个基于视频信息的两阶段车辆方向检测算法。
- 基于消失点检测的相机标定阶段
- 基于车辆关键点检测与透视变换的车辆方向检测阶段
- python package 见
requirement.txt
- torch 1.10.2 + CUDA 10.2
- python 3.7
- TensorRT 8.2
- 程序入口
app.py
- 所有参数
source
(必须) 视频媒体所在路径engine
(必须) 目标检测网络TensorRT引擎路径classes
(可选) 目标检测检测种类json文件roi
(可选) 是否需要选择场景中的ROI区域,默认为FalsecaliFlag
(必须) True为标定阶段,False为方向检测阶段calibration
(caliFlag 为False时必须) 标定文件路径threshold
(可选) 检测车辆强边缘的阈值,默认为0.5visualize
(可选) 可视化边缘提取过程,默认为FalsesavePath
(caliFlag 为True时必须) 标定结果保存路径
- 所有参数
- 相机标定阶段
python app.py --source ${video path} --engine ${tensorRT engine} --caliFlag True --savePath ${calibration savePath}
- 方向检测阶段
python app.py --source ${video path} --engine ${tensorRT engine} --caliFlag False --calibration ${calibration path}
detection_model
车辆方向检测主要模块(标定加检测)calibration_yolo_model.py
基于yolov5检测器的相机标定及方向检测模型calibration_ssd_model.py
基于SSD检测器的相机标定及方向检测模型diamondSpace.py
基于平行坐标系的级联霍夫变换edgelets.py
检测车辆横向边缘模块
SSD
SSD目标检测网络结构及其推理接口的实现yolov5
优化后的yolov5 TensorRT推理引擎推理接口的实现weights
yolov5 onnx模型及TensorRT 引擎
results
实验结果数据IPM
鸟瞰图转换及相机标定阶段误差评估test
实验过程中的一些测试样例及脚本dataset
实验数据集image
实验过程中产生的图表及论文中对应的图像app.py
整体程序开始接口
- 中山大学东校园路侧监控画面
- 包含四种不同相机位姿及焦距的视频数据
- 文件结构说明
calibrate
folder 用于对相机进行标定的一段视频数据eval
folder 用于评估算法对车辆朝向角度检测精确性的一段视频数据
-
基于消失点坐标的相机标定
-
消失点检测
- 沿道路方向消失点
- 通过目标检测网络得到车辆2D框作为ROI区域,检测区域中的Harris角点作为特征点
- 对特征点使用光流法进行轨迹跟踪得到车辆轨迹集
- 将所有轨迹集映射至有限的菱形空间,通过投票算法得到交点最密集处,得到消失点坐标
- 垂直道路方向消失点
- 检测车辆强边缘
- 使用与前面一样的方法拟合车辆强边缘得到垂直道路方向消失点
- 沿道路方向消失点
-
关键点检测
-
基于一个2D人体姿态估计网络openpifpaf
-
-
鸟瞰图转换
- 我们利用标定阶段得到的鸟瞰图透视矩阵将图像平面映射至对应的鸟瞰图平面
- 计算关键点连线在鸟瞰图中斜率得到最终方向角度