likes
comments
collection
share

基于虚拟线圈法的车速识别和撞线预测(Python附代码)

作者站长头像
站长
· 阅读数 3

GitHub

github.com/KinghooWei/…

开门见山了,记得star一下

最终效果图

基于虚拟线圈法的车速识别和撞线预测(Python附代码) 基于虚拟线圈法的车速识别和撞线预测(Python附代码)

设计思路

项目的编程环境为python3.7.7,编译器使用pycharm2019.3.4 x64,视频序列30帧每秒。项目采用虚拟线圈法估算车速,取线圈内平均灰度值相对于没有车辆的线圈内平均灰度值的变化c作为对象特征,当c的绝对值大于某一阈值时,判断有汽车通过线圈。

基于虚拟线圈的车速检测算法

虚拟线圈法是利用虚拟感应线圈代替真实感应线圈,工作原理类似于地埋式线圈检测器。在图像上垂直于道路方向上定义2个检测线圈的位置,系统通过检测线圈的灰度变化来判断车辆经过,由车辆经过前后两个线圈的间隔帧数p、两个线圈在现实中的距离l和第二个线圈与停止线的距离s,可以估算出当前车辆的速度及撞线时间。该方法的优点是操作简单,耗时短,能够实时完成速度和撞线时间估计。算法的具体步骤如下:

  1. 确定两个虚拟线圈的位置、大小和倾斜角度,确保首帧序列的虚拟线圈内没有车辆,在视频序列中把虚拟线圈标注出来;

  2. 计算首帧序列在2个虚拟线圈中的平均灰度值,记为aaabbb

  3. 逐一计算视频帧在2个虚拟线圈中的平均灰度值,记为mmmnnn,并与首帧的计算结果aaabbb进行比较。当∣m−a∣\left|m-a\right|ma大于某一阈值时,判断第一个线圈有车辆通过,记录当前帧的序号iii,如图3-1所示,当∣n−b∣\left|n-b\right|nb大于某一阈值时,判断第二个线圈有车辆通过,记录当前帧的序号jjj

  4. 当车辆通过第二个虚拟线圈时,由iiijjj、实际现实中两虚拟线圈的间距、第二个虚拟线圈与停止线的间距和视频的帧率等信息,即可估算出车辆的车速和撞线时间。

总结

考虑到实际应用中,摄像头可以固定在道路中,稳定程度和角度都要好于我在楼顶手持录像,所以实际应用理论要好于实验。但也存在一些问题,比如对白色车辆不敏感,只是通过黑色后视窗进行识别,原因可能是特征选择为灰度图的平均灰度值差异,白色车辆跟道路的平均灰度值差异不够明显,改进的话可以使用SHV图像的颜色做判别,这也比较符合人的判断;比如实验视频时间短,只考虑白天,实际现实还要工作于夜晚,可以运用动态阈值进行改进。