简介与效果
本项目是一个基于 OpenCV 的交通标志检测和分类系统,可以在视频中实时检测和分类交通标志。检测阶段使用图像处理技术,在每个视频帧上创建轮廓并找出其中的所有椭圆或圆形。它们被标记为交通标志的候选项。
检测策略:
- 增加视频帧的对比度和动态范围
- 增加视频帧的对比度和动态范围
- 使用 HSV 颜色范围删除不必要的颜色,如绿色
- 使用高斯拉普拉斯算子显示对象的边缘
- 通过二值化生成轮廓
- 检测椭圆状和圆形状的轮廓
在接下来的分类阶段,根据候选项的坐标从原始帧中裁剪出一组图像。预先训练的 SVM 模型将对这些图像进行分类,以确定它们属于哪种类型的交通标志。
所有属于类别 8 及以上的标志都被标记为“其他”,因为这是一个竞赛的要求。还有一个类别 0,被标记为非交通标志。只有当前帧中最大的标志被裁剪和分类。
SVM 模型在每次调用 main.py 时进行训练,但我仍然保存该模型在 data_svm.dat 中,以便在未来实现模型重新加载功能,避免重新训练。
如果检测到交通标志,它将被跟踪,直到它消失或者帧中出现更大的标志。跟踪方法是稠密光流法。
环境搭建与文件介绍
- 先决条件: Python 3.5 OpenCV3 Imutils(使用 pip3 install imutils 安装)
- 系统结构 a. 有 3 个 Python 文件作为 3 个模块: main.py:程序的起始点。
- classification.py:用于分类交通标志的 SVM 模型。 common.py:用于定义 SVM 模型的函数。
- 其他文件: data_svm.dat:训练后保存的 SVM 模型。
安装
有两种运行程序的方式
- Use default arguments:
$python3 main.py
- Use custom arguments:
使用默认参数:
$python3 main.py optional arguments: -h, --help show this help message and exit --file_name FILE_NAME Video to be analyzed --min_size_components MIN_SIZE_COMPONENTS Min size component to be reserved --similitary_contour_with_circle SIMILITARY_CONTOUR_WITH_CIRCLE Similarly to a circle
结论与效果展示
我们使用GTSRB数据集训练了两个不同的模型来检测和识别交通标志。在测试数据集上,我们的模型表现出了良好的准确性和鲁棒性。未来,我们将继续改进我们的模型,以提高其在各种环境下的性能。效果展示 代码可私信
效果图片链接
https://ucc.alicdn.com/images/user-upload-01/d57cfaa0102c46bb9011235730628aab.gif