APP下载

基于图像识别的辅助驾驶避障预警系统设计与实现

2023-10-31罗明睿张翠平李亚欣李媛媛

智能计算机与应用 2023年10期
关键词:图像识别障碍物物体

罗明睿, 张翠平, 李亚欣, 李媛媛

(北京信息科技大学 计算机学院, 北京 100192)

0 引 言

随着交通智能化和人工智能技术水平提升,越来越多的传统车企和互联网企业参与到自动驾驶技术的研发。 近几年自动驾驶技术愈来愈热,越来越多的消费者也更青睐于购买和使用具有辅助驾驶(自动驾驶)的车辆,从而减少驾驶员驾驶时的体力损耗,降低因疲劳驾驶带来的风险。 与此同时,因自动驾驶技术的普及而产生的交通事故也越来越多。

2022 年6 月16 日,美国联邦政府公布了两份对于自动驾驶技术的报告,报告中首次公布了涉及自动驾驶汽车(AV) 和配备先进驾驶辅助系统(ADAS) 的汽车在碰撞和死亡事故方面的相关统计。 其中,加州51 起自动驾驶事故中有45 起事故是因为自动驾驶状态中追尾或者撞到其他障碍物造成的。 因此,在自动驾驶领域,如何对周围环境进行感知,对前方目标进行测距是非常重要的技术难题。目前,在自动驾驶领域比较有名的两大车企——特斯拉和蔚来所研发的自动驾驶平台中,特斯拉的NOA 和蔚来的NOP 均不能做到对人、动物、交通灯、墙、路障等非车辆目标做出反应,遇到这些情况会交予人为处理。

当前,针对自动驾驶和辅助驾驶障碍系统国内外已有一些研究,其主要对于避障算法和图像识别方向展开的研究。 如:胡正云等[1]针对车道线图像识别的实时性和适应性等问题,提出了一种基于遗传算法,并且结合车道线图像阈值的分割优化算法来解决此问题。 牛洪超等人[2]对M-YOLO 图像识别进行改进,使得M-YOLO 更符合自动驾驶中图像识别的要求。 Chen[3]等人对多种公共自动驾驶数据集的性能进行了全面调查,目前应用到实际中的障碍物预警系统,这种方式虽然能够迅速的对前方障碍物进行检测,但无法第一时间对障碍物类别进行识别,无法对目标障碍物是否在横向移动进行监控,从而导致无法为驾驶员提出有效的避障建议。本文基于YOLOv5 图像识别算法和基于OpenCV 的自动跟随系统进行设计,从而设计出应用于车载电脑的驾驶辅助预警系统。

1 系统需求分析

本系统的目标使用者是L3 级别以下的自动驾驶车辆和驾驶人员,主要功能是利用摄像头对前方路面进行实时监控,检测到前方有障碍物后第一时间提醒驾驶员并给出避障建议。 该系统需要对不同类型的障碍物,如动物、路障、塑料袋、行人、非行驶状态的车辆进行有效的识别,因此对系统设计有以下需求:

(1)能够通过图像识别对前方是否有障碍物进行有效识别;

(2)针对不同的障碍物能够进行快速分类,如:猫、狗等属于动物分类,车用警示标志牌、路障等属于需要躲避障碍物,塑料袋、杂草属于无需躲避障碍物等;

(3)对前方移动车辆进行有效监控,判断前方车辆是否处于正常行驶的状态,并对前方车辆紧急停车(减速)进行判断;

(4)能够判断所检测物体的运动状态;

(5)针对不同类型的障碍物给出合理的相关避障措施;

(6)在给出避障措施后发出警报,并给出语音播报障碍物的种类和避障建议。

2 系统整体框架设计

如图1 所示,系统主要由前端UI 界面、图像识别和避障处理3 部分构成。

图1 系统框架图Fig.1 System framework

前端UI 界面负责人机交互,主要完成摄像头的操作、视频流的读取、显示识别结果、避障建议以及语音播报和报警4 部分内容。 物体识别包括目标追随、图像识别两个主要部分。 首先需要对于前方待识别物体进行选择、追踪,选定单个或多个目标之后,通过图像识别对其进行识别并返回识别的可能结果及相关物体属性。 数据处理部分是基于不同的障碍物类型给出不同的避障建议,最后在UI 界面上返回识别结果及避障建议并发出警报和语音提醒。

3 系统功能设计与实现

3.1 UI 界面

系统采用Qt Designer[4]进行界面设计(如图2所示),主要模块包括打开摄像头、读取视频流、识别结果显示、避障建议以及语音播报和报警4 个部分。

摄像头操作主要是利用QLabel 组件和OpenCV实现对车载行车记录仪的连接和断开。 当用户点击开始之后连接车载行车记录仪,调用OpenCV 中的图像获取功能,使用VideoCapture()函数去获取行车记录仪的图像数据。

将视频流看做N多个帧的图片,读取部分运用OpenCV 中VideoCapture()函数创建多个图像获取对象,用以读取视频文件内容。 之后,使用IsOpened函数判断该视频文件是否被正确打开。 IsOpened()函数将返回一个boo 量,用于判断视频流是否可以使用。 写入部分使用get() 函数得到视频的长和宽,并用初始化视频捕获对象并且把视频流读入内存。

通过图像识别模块识别出不同的物体后,根据处理结果会产生不同的建议。 此时,系统均采用QTextEdit 组件来显示参数名称、输出结果和避障措施。

语音报播模块由一个音量调节器、预警静音开关(取消报警)和声音播放器构成。 其中,音量调节器使用setVolume()方法和Qslider 组件完成;预警静音开关使用setVolume()方法和QRadiobutton 组件完成;声音播放器使用QmediaPlayer 模块实现。由于QmediaPlayer 是对本地计算机底层播放框架封装,所以语音提示播放和预警声音均是接入录好的MP3 音源。

3.2 图像识别

3.2.1 目标追随

目标追随系统选用KCF 算法,借鉴柳天宇等人[5]基于KCF 算法的空中目标追踪模拟中提出的目标追踪思路。 KCF 算法实现目标跟踪的基本流程为:读入视频序列,由YOLOv5 检测出的目标作为真实目标,在当前帧采样,用目标和背景信息训练分类器,得到相关滤波器;下一帧图像与相关滤波器做卷积,响应最大的区域作为预测目标,目标更新迭代,并进行跟踪;下一帧循环上述过程。

训练样本的生成都是基于循环矩阵形式来构建的。 其中基样本x为正样本,其他全部都是负样本。由于循环矩阵的性质,样本集可以很方便的利用快速傅里叶变换和傅里叶对角化的性质来进行计算。由任意基样本x生成的循环矩阵具有以下特性:

其中,是x的离散傅里叶变换,F是离散傅里叶常量矩阵,是FH的厄米特转置。

循环矩阵既简化了计算,降低了运算时间,又解决了跟踪器训练时样本不足的问题。

岭回归的方法是KCF 算法中用来训练跟踪器,如式(2)所示。

解得ω形式为

之后,需要利用核函数将非线性在映射后满足线性要求,以此达到非线性到线性的转换,从而使得跟踪准确度提升。 此时,ω可表达为式(4):

可解出:

最终可得训练样本的相关矩阵,如式(6)所示。

3.2.2 训练数据集

本项目采用伯克利大学2020 年发布的开放式驾驶视频数据集BDD100K[6](本数据集目前在Github 上为开源项目), 本数据集中有近10 万个视频图片资源,图片数量分布如图3 所示。 该数据集发布的目的是方便评估自动驾驶图像识别算法的发展,目前也是自动驾驶领域使用最为广泛的数据集。由于硬件配置所限,本项目只训练了数据集中的部分图片,并根据系统的实际应用,添加了对于Animal 类别的图片进行训练。 训练图片的具体类别和数量见表1。

表1 系统训练的内容数量和种类Tab.1 Quantity and type for system training

图3 OpenCV 的坐标系示意图Fig.3 Schematic diagram of OpenCV coordinate system

由于BDD100K 均使用Json 格式的文件存储,无法直接将BDD100k 格式转换成适用于YOLO 格式,所以在训练数据集的过程中,先将BDD100k 的数据集标签转换为coco 格式,之后再将COCO 格式转换为本项目可以训练的YOLO 格式。

3.3 数据处理

3.3.1 判断物体运动状态

判断物体的状态分为判断物体横向移动和物体是否停止或者减速。 首先对物体进行横向位移的检测,利用OpenCV 中的cv2.findContours 对目标轮廓进行检测[7],并对矩形的长、宽、高、面积、周长测算并读出矩阵4 个顶点的坐标,如图4 所示。

图4 OpenCV 测距原理图Fig.4 Schematic diagram of OpenCV ranging

通过比较上一帧和下一帧目标物体所在矩形的坐标,以判断物体是否在水平运动。 对于判断物体是否在加速或者减速,本项目利用空间的深度来实现,其原理如图4 所示。

如图4(b)所示,物体宽度为W,物体W距离相机的长度为d,对物体进行拍摄,拍得照片的像素宽度为P,于是可以得出相机焦距F的公式如下:

公式变换可得:

由此可测出目标物体的距离。

得到物体距离后,根据当前车速和反应时间测得下一帧D的理论值,对比D和D′的大小,若D >D′可知目标物体正在减速或者静止。

3.3.2 避障建议

避障建议本系统借鉴遗传算法的思路,在多个约束条件下给出最有效的解决方案,算法流程如图5 所示。

图5 算法流程Fig.5 Algorithm flow chart

算法描述如下:

当目标障碍物识别成功后,对其运动状态进行分类,若为动态且为加速状态则继续行驶,反馈给避障建议为继续行驶;若为静止或者减速状态则对目标障碍物种类进行访问,若为可直接压过的种类(如塑料袋、杂草等),同时反馈建议为继续行驶;否则,对目标是否为正在移动的动态障碍物进行判断,根据判断出不同的内容进行分类。 其中为动态障碍物有Car 类、Moto 类、Bus 类、Animal 类和Person 类,若是活物则继续判断其水平运动状态,不是则识别左右车道是否具备转向条件。 当判断物体没有水平运动后视为物体非活物,进而判断左右车道是否具备转向条件;若目标物体仍在水平移动则进入紧急制动,并反馈出避障建议,避障建议为紧急刹车。 若左右车道具备转向条件,则给出避障建议为向左转或向右转。

4 系统测试效果

本测试主要是针对3 部分进行,其中包括:测试该项目是否可以识别出横向移动的障碍物;测试内容是测试对于同一个障碍物的目标追随能力;测试内容是按钮功能的完善情况。

4.1 识别横向移动的障碍物

本测试针对当前方突然出现障碍物后,系统是否可以识别出障碍物类型、分类和给出的避障建议。如图6 所示,当前方出现行人穿过马路时,系统可以识别出类型为人,类别为person 类。 给出的避障建议是紧急刹车,完全符合系统设计要求。

图6 系统运行结果Fig.6 System running results

4.2 目标追踪能力

本测试针对前方一直跟随的障碍物,当其他障碍物进入摄像区域后,是否可以对目标物体继续跟随。 如图7(a)所示,本系统一直跟随目标车辆,当侧后方出现白色车辆后依旧可以跟随目标车辆,如图7(b)所示。

图7 系统运行结果Fig.7 System running results

5 结束语

本文基于YOLOv5 图像识别和OpenCV 图像处理,完成了基于图像识别的辅助驾驶避障预警系统。可以针对道路上不同类型的障碍物给予驾驶员不同的避障建议,辅助驾驶员在第一时间做出正确处理,从而降低驾驶中发生危险引起交通事故的几率。

猜你喜欢

图像识别障碍物物体
高低翻越
深刻理解物体的平衡
SelTrac®CBTC系统中非通信障碍物的设计和处理
基于Resnet-50的猫狗图像识别
高速公路图像识别技术应用探讨
我们是怎样看到物体的
图像识别在物联网上的应用
图像识别在水质检测中的应用
为什么同一物体在世界各地重量不一样?
土钉墙在近障碍物的地下车行通道工程中的应用