1. 引言
随着社会经济的高速发展,人民生活水平明显提高,我国汽车保有量爆发式增长。据2021年2月国家统计局发布的《2020年国民经济和社会发展统计公报》分析,截至2020年年末全国民用汽车保有量28087万辆,比上年末增长1937万辆 [1]。汽车的普及极大方便人们出行的同时,也产生诸多交通问题,例如交通拥堵、事故多发、步行者问题等。据世界卫生组织的2018年《全球道路安全现状报告》分析,每年约有135万人死于道路交通碰撞,在各年龄段人群的主要死因中排名第8 [2]。表1所示数据是国家统计局发布的2015~2019年交通事故相关数据 [3]。近几年来,我国的交通事故发生数呈上升趋势,死亡人数和受伤人数大幅度增加。
Table 1. Data on traffic accidents from 2015 to 2019
表1. 2015~2019交通事故相关数据
基于上述背景,本文通过设计基于YOLOv5的汽车辅助驾驶信息检测系统,通过APP端口,提供检测预警和数据分析等服务。针对驾驶员对周边环境检测预警的需求,本系统在YOLOv5目标检测算法的基础上,利用基于小孔成像的测距算法,建立一种集检测与测距为一体的YOLOv5测距算法。软件前端展示车辆行人分类信息和距离信息,实时预警碰撞风险并播放实时摄像视频 [4],把控车辆周边环境。软件后端接收单目摄像头的视频流数据 [5] [6],使用YOLOv5算法完成目标检测的任务。
2. 需求分析
目前,我国人均汽车保有量快速上涨,“电动车大军”成为我国交通出行的重要组成部分。在车流量密集的交通状况下,驾驶员希望能够尽早察觉周边风险,最大程度避免交通事故的发生。因此,驾驶员迫切需要一种可以为自身车辆行驶过程中进行周围车辆实时检测的设备 [7]。
2.1. 功能需求
本文通过查阅对比现有的高级驾驶辅助系统(Advanced Driving Assistance System) [8],根据实际应用场景对系统功能需求进行分析,如下所示:
1) 用户管理:用户管理模块包括用户注册、用户登录、个人信息管理等功能,有效管理用户数据。
2) 天气查询:天气查询模块可查询实时天气,以便用户提前了解出行天气状况和目的地天气状况等,做好出行准备。
3) 路况查询:路况查询模块需定位用户实时位置,显示周边路线的交通情况,以便用户避开交通拥堵路段。
4) 实时预警:实时预警模块包括目标检测和距离测算 [9] [10]。系统接收摄像头传输的视频图像,经算法推理目标信息和相对距离,并采用分级预警机制实现动态预警反馈。
5) 实时监控:实时监控模块用于查看车载摄像头的实时画面,辅助用户做出后续的行车决策。
6) 碰撞处理:系统的实时预警无法保证一定避免交通事故的发生。因此,碰撞处理模块给予用户合理的事故处理建议,辅助用户快速处理交通事故。
7) 语音控制:考虑到繁杂的触摸操作会分散用户的注意力,系统支持语音控制模式。用户口述关键词即可操作系统功能,最大程度保证用户行车安全。
8) 数据分析:数据分析模块包含历史记录和数据报告。历史记录用于展示用户以往的所有预警信息,用户可以输入特定条件搜索记录;数据报告是分析用户数据形成的具有特定意义的数据图表。
2.2. 性能需求
系统在满足上述功能需求的同时,根据实际应用场景需满足以下的性能需求:
1) 实时性:系统应用于高速运动的行车场景,周边物体移动较快,需快速检测周边环境信息。因此,系统需满足实时性需求。
2) 精确性:系统需要精确地检测车辆周边环境,由于行车环境复杂,目标检测算法需达到较高的精确度,才能向用户准确汇报周边风险。
3) 易用性:考虑到用户在行车过程中需尽量保持注意力集中,因此,系统需满足易用性需求,避免系统本身影响用户行车安全。
3. 系统设计
3.1. 功能设计
本系统的服务对象是汽车驾驶员,主要考虑的是车辆周边环境的实时把控、行车风险的实时预警,系统功能模块设计见图1。具体功能设计如下:
1) 用户管理:包括用户注册、登录,个人信息管理等。
2) 辅助驾驶:用户行车前可查看出行天气和交通路况,做好出行准备;行车过程中系统持续检测周边环境,采用分级预警机制动态反馈预碰撞风险。语音模式便于用户简化功能操作,降低系统对用户的影响。
3) 数据分析:包括历史记录和数据报告。用户可查阅以往的预警记录,明确出行安全风险。
本系统前端部分采用Flutter框架,支持iOS、Android系统开发,提供Material和Cupertino两套控件适配Android和iOS,更好地在不同平台上提供原生的用户体验。
后端部分使用SpringBoot框架,该框架抛弃繁杂的xml配置文件,使用注解简化配置,开箱即用,极大提高开发效率。
算法部署使用Flask框架,该框架作为轻量级的Web应用框架,可以灵活、高效地实现Web服务。与YOLOv5算法统一开发语言,便于开发和后期维护。
系统采用单目摄像头采集视频图像,其结构简单,运算速度快,具有广泛的应用场景。
3.2. 数据库设计
系统采用MySQL数据库,数据实体有驾驶员信息、管理员信息、驾驶员预警记录。前端采取dio网络请求框架调用后端接口,后端利用MyBatis框架与数据库交互。驾驶员信息表用于保存驾驶员用户的账号信息和真实信息,见表2;管理员信息表用于保存管理员的相关信息,见表3;驾驶员预警记录表则记录各驾驶员用户的预警详细信息,见表4。
3.3. 算法设计
本系统的核心功能为检测和预警模块。检测即对车辆周围的行人、车辆进行分类判断,预警即测算其与车辆的相对距离,当测算距离小于安全距离时,系统及时向驾驶员反馈示警。其工作流程如图2所示。为实现此功能,本系统采用YOLOv5作为目标检测算法,推理目标分类信息和标定框位置;利用基于小孔成像的测距算法,结合目标标定框底部中心位置实现目标距离的测算。
YOLOv5作为单阶段(one-stage)目标检测算法,将检测问题转换为回归问题,对每一帧图像作出类概率预测和边界框偏移量预测,其检测速度相对较快,符合本系统的应用场景需求。YOLOv5将输入图像分割成N × N个网格,每个网格负责检测中心点在本网格中的目标,并生成标定框,最后使用非极大值抑制算法(Non-Maximum Suppression, NMS)去除冗余的剩余框,实现生成区域和回归分类在一个网络中的端到端训练。相比Faster R-CNN双阶段的目标检测算法,单阶段检测算法将候选区生成阶段和目标识别阶段简化为边框回归任务,将标定框通过损失回归优化,从而接近真实的标定框,兼顾速度与精度 [11]。
在YOLOv5推理得到的目标框坐标的基础上,利用基于小孔成像的测距算法实现与检测目标的距离估计。该方法的核心思想是三维空间的物体到摄像机的二维成像平面的投影关系。单目摄像头小孔成像模型中包括像素坐标系、图像坐标系、相机坐标系和世界坐标系,将得到的目标检测框底部中心位置从像素坐标系转化到世界坐标系,得到真实的x轴和y轴距离,进而测算与检测目标的直线距离。该方法的关键部分就是得到相机的内参和外参,即建立三维空间的物体与成像平面的坐标点的对应关系。本文使用张正友标定法求解相机内参矩阵。小孔成像的坐标系转换如图3所示。
Figure 2. Detection and early warning process
图2. 检测预警流程
Figure 3. Coordinate system transformation
图3. 坐标系转换
张正友标定法使用二维的棋方格标定板,采集不同位姿的图片,提取图片角点的像素坐标,计算相机的内参,最后使用极大似然估计法优化参数 [12]。由于外参矩阵反映的是物体和相机的位置关系,相机位置、角度和物体的位置都会导致外参矩阵的变化。因此,外参矩阵需要在实际应用场景进行标定,本文采用PNP求解外参矩阵。在已知相机内参的情况下,利用多对3D与2D匹配点,最小化重投影误差求解相机外参。世界坐标系与像素坐标系的转换公式如公式(1)所示。
(1)
4. 系统实现
系统使用Android Studio作为开发工具,采用Flutter框架 [13],页面美观大方,操作简单易用。
4.1. 辅助驾驶
4.1.1. 实时预警
用户点击“预警”选项,进入辅助驾驶模块。图4所示页面是车辆预警页面。摄像头安装并启动后,服务器端启动图像采集程序,程序检测视频流的每一帧图像,最终将检测数据传输到APP中。该页面显示预警信息,包括物体类别、风险距离、预警方向等,同时发出声音提醒用户。
4.1.2. 实时监控
用户口述“查看监控”关键词,系统自动打开监控画面。该页面使用WebView组件,接收服务器端传输的视频流数据。监控视频见图5。
4.2. 数据分析
4.2.1. 历史记录
用户点击“主页”选项,进入图6所示的历史记录页面。该页面使用ListView和Card组件显示用户预警记录,其中包括预警原因、预警时间、风险等级信息。
4.2.2. 数据报告
数据报告页面呈现用户历史预警记录的物体类别雷达图及车辆各方向预警次数的占比图等。通过数据报告,用户明确自己在行车过程中的风险情况,加强对车辆周边环境的注意,改善用户的行车习惯。数据报告页面见图7。
4.3. 用户管理
4.3.1. 用户注册
用户在登录页面点击“立即注册”字样,系统跳转至注册页面,用户在该页面输入用户名、密码、手机号等信息,点击“注册”按钮。系统将输入信息与数据库已有信息进行对比,确认无此用户信息即可注册成功。登录页面见图8,注册页面见图9。
4.3.2. 用户登录
用户在图10页面中点击“头像”,系统跳转至登录页面。用户输入用户名和密码,点击“登录”按钮,系统将信息与数据库内信息进行匹配,正确则登录成功。
5. 结语
本文基于汽车驾驶员在行车过程中对周边环境及时把控、快速反应的需求,使用YOLOv5算法、基于小孔成像的测距模型和前后端分离技术,设计实现了基于YOLOv5测距的汽车辅助驾驶信息检测系统。该系统使用单目摄像头采集视频图像,经YOLOv5检测算法推理获得车辆行人检测信息,检测结果传输至前端用户APP展示。前端基于后端距离数据与安全距离进行比较,对于小于安全距离的情况进行实时预警。同时驾驶员可查看摄像视频,及时关注行车情况,辅助用户安全行车。经实践,本系统可满足驾驶员在行车过程中把握周边环境的需求,提醒驾驶员做好防范措施,避免交通事故的发生。