基于虚拟线圈法的车速识别和撞线预测(Python附代码)
GitHub
开门见山了,记得star一下呀
最终效果图
![]() |
![]() |
设计思路
项目的编程环境为python3.7.7,编译器使用pycharm2019.3.4 x64,视频序列30帧每秒。项目采用虚拟线圈法估算车速,取线圈内平均灰度值相对于没有车辆的线圈内平均灰度值的变化c作为对象特征,当c的绝对值大于某一阈值时,判断有汽车通过线圈。
基于虚拟线圈的车速检测算法
虚拟线圈法是利用虚拟感应线圈代替真实感应线圈,工作原理类似于地埋式线圈检测器。在图像上垂直于道路方向上定义2个检测线圈的位置,系统通过检测线圈的灰度变化来判断车辆经过,由车辆经过前后两个线圈的间隔帧数p、两个线圈在现实中的距离l和第二个线圈与停止线的距离s,可以估算出当前车辆的速度及撞线时间。该方法的优点是操作简单,耗时短,能够实时完成速度和撞线时间估计。算法的具体步骤如下:
-
确定两个虚拟线圈的位置、大小和倾斜角度,确保首帧序列的虚拟线圈内没有车辆,在视频序列中把虚拟线圈标注出来;
-
计算首帧序列在2个虚拟线圈中的平均灰度值,记为aaa、bbb;
-
逐一计算视频帧在2个虚拟线圈中的平均灰度值,记为mmm、nnn,并与首帧的计算结果aaa、bbb进行比较。当∣m−a∣\left|m-a\right|∣m−a∣大于某一阈值时,判断第一个线圈有车辆通过,记录当前帧的序号iii,如图3-1所示,当∣n−b∣\left|n-b\right|∣n−b∣大于某一阈值时,判断第二个线圈有车辆通过,记录当前帧的序号jjj;
-
当车辆通过第二个虚拟线圈时,由iii、jjj、实际现实中两虚拟线圈的间距、第二个虚拟线圈与停止线的间距和视频的帧率等信息,即可估算出车辆的车速和撞线时间。
总结
考虑到实际应用中,摄像头可以固定在道路中,稳定程度和角度都要好于我在楼顶手持录像,所以实际应用理论要好于实验。但也存在一些问题,比如对白色车辆不敏感,只是通过黑色后视窗进行识别,原因可能是特征选择为灰度图的平均灰度值差异,白色车辆跟道路的平均灰度值差异不够明显,改进的话可以使用SHV图像的颜色做判别,这也比较符合人的判断;比如实验视频时间短,只考虑白天,实际现实还要工作于夜晚,可以运用动态阈值进行改进。
转载自:https://juejin.cn/post/6924222163868188679