驾驶辅助硬件加速系统的设计与实现
2022-06-21赵佳怡彭武星
赵佳怡,彭武星,宋 敏,卢 仕
(湖北大学 物理与电子科学学院,湖北 武汉 430061)
0 引 言
中国官方统计报告,每年因道路交通死亡的人数超过10万,道路伤害数量达50万,每5分钟约有1人死亡,每1分钟就会有1人因为交通事故而伤残。造成交通事故的根本原因有2个,一方面是驾驶人由于心理或者生理方面的原因,没有正确观察和判断外界事物而造成精力分散、反应迟钝,表现为观望不周、措施不及时或者不当、未判断清楚就盲目通行;另一方面是驾驶人不按交通法规和其他交通安全规定行车或者走路,致使交通事故发生。
针对以上交通事故产生的原因,文中设计的驾驶辅助系统能识别道路上的交通指示牌,为用户提供正确的路况信息(路况包括停车点、更换道路、红绿灯情况等),帮助用户做出正确决定,降低交通事故发生率。同时,系统输出形式分为图像和语音两种,既可以为不方便接收声音的用户提供图像形式的实时路况,也可以为独自驾驶车辆的用户提供语音播报形式的实时路况,从而使用户集中注意力。文中构造的基于驾驶员驾驶行为习惯的主动式驾驶辅助人机交互系统极大地增强了用户体验,扩大了该系统的应用范围。
1 系统框架设计
系统框架如图1(a)所示,系统由OV5640摄像头、VGA显示器、数据处理模块、驱动模块组成。图1(b)为系统实物,FPGA芯片为主控部分,OV5640摄像头接收外部图像信号,FPGA芯片存储图像信号,并通过图像处理模块将信号进行优化,再通过VGA显示模块将优化后的图像呈现在VGA显示屏上,获取的有用信号则通过特征提取模块、模板匹配模块后输出,随后传递给驱动模块。
图1 系统框架设计
2 系统功能设计
2.1 系统总体设计流程
系统功能的总体设计流程如图2所示。将从SDRAM中读取的数据传递给UART串口模块,进而驱动APP;数据处理模块对摄像头采集的数据做进一步处理,其输出的数据能够直接驱动直流电机模块和语音播报模块。
图2 系统功能设计流程
2.2 交通标识识别的硬件加速算法设计
2.2.1 图像数据的采集
系统将摄像头寄存器配置分为2个模块,其中一个模块为摄像头内部寄存器地址的查找表,另一个模块为IC总线控制器。通过IC将指令输入摄像头,并对摄像头的工作模式以及各参数进行配置。当摄像头寄存器全部配置完成后,先等待10帧数据,待寄存器配置生效后再开始采集数据,并将摄像头的8位输出数据转换成16位RGB 565格式的图像数据。SDRAM的读写模块和SDRAM的控制模块可以将图像数据进行不失真存储。
2.2.2 图像处理
图3 图像处理
通过灰度化处理模块后,图像数据由原来的24位转化为8位灰度数据,其中交通标识蓝底的RGB 888值为{6,0,134},对应的灰度值为17;红绿灯黑底的RGB值为{0,0,0},对应灰度值为0;交通标识的RGB 888值为{255,255,255},对应灰度值为255;红绿灯中绿灯的RGB 888值为{0,255,0},对应的灰度值为150。由最佳阈值公式算出适合交通标识和红绿灯进行二值化处理的最佳阈值为90,所以当像素点的灰度值大于90时,将灰度数据赋为0,该像素点视为黑色;当像素点的灰度值小于90时,将灰度值赋为255,视为白色。因为红绿灯中的红灯灰化后的值有时可能大于90,所以需要多添加一个判断语句,当满足上一个条件时,对RGB 888中的green进行判断,当green大于120时,将灰度值赋0,视为黑色;当green小于120时,将灰度值赋为255,视为白色。通过此全局阈值,可以很好地屏蔽交通标识和红绿灯的背景。图3(d)为二值化处理后的图像。
从二值化后的图像中不难看出,图像存在椒盐噪声,系统利用中值滤波去除椒盐噪声。图3(e)为中值滤波后的图像,噪声含量大大减少。图4为模块中值的计算方法,所谓中值滤波,即对以该像素点为中心的3×3矩阵进行排序,用排序中值取代中心点像素值。同时为了简化模块在读取数据时对RAM地址的计算,并充分利用FPGA的并行特性对图像数据进行顺序读取,需逐行将顺序读取的数据转化成3行的并行数据进行处理。
图4 移位寄存器工作原理
系统采用投影法实现对交通标识及红绿灯的定位,因为交通标识及红绿灯是放在黑底背景的PPT中,所以交通标识及红绿灯周围环境比较单一,利用投影法可以很好地确定交通标识及红绿灯的具体区域。图5为定位后的图像,当交通标识及红绿灯出现在蓝色框区域时,绿色框就能动态确定交通标识及红绿灯的位置。蓝色框为算法区域,当交通标识和红绿灯出现在此区域时,绿色框会动态将交通标识和红绿灯的位置框住,红色框会动态将交通标识和绿灯的位置框住。
图5 图像定位后的照片展示
定位后,可以确定交通标识及红绿灯的具体位置,在确定的交通标识区域进行水平投影和垂直投影,进而将交通标识及红绿灯等标识分割出来,然后通过特征识别算法进行具体计算。识别算法设计流程如图6所示。
图6 识别算法设计流程
以数字识别为例,具体算法如下:
(1)选取直线,提取特征值。如图7(a)所示,在数字行宽的1/3处、2/3处,以及数字列宽的1/2处,通过选取数字与行1/3划线的前沿交点、数字与行2/3划线的后沿交点,以及数字与列1/2处的后沿交点的位置和个数来识别数字。
图7 图像识别
(2)计算相似度。比较特征数据与模板数组各点的数据值,并设置阈值,当两组数据某点数据绝对值的差小于该阈值时,相似度加1。
一部分投标人在进行报价投标时,并未按照填报要求对装配式建筑在分项分布的各个项目中所实际消耗的机械设备材料、分摊的折旧费以及人工费等数据进行准确的计量。此外,一些PC构件的加工生产单位通过加速折旧的办法将其生产基地投资等长期费用分摊到了构件的成本费用中,造成了PC构件成本中包括了过高的摊销和折旧费用,而投标人的虚高报价对于工程项目的成本控制会产生不利的影响。
(3)获得最大相似度模板。设置多分支选择语句,取相似度最高的模板即为输出结果。
2.2.3 图像数据输出
如图8所示,首先通过VGA驱动程序将摄像头采集的数据从SDRAM中实时读取出来,并利用SDRAM 的乒乓操作实现对数据的实时采集和读取。由于写SDRAM的速度和读SDRAM的速度不一致,可能会出现两帧重叠现象。为了达到显示的实时性和同步性,利用SDRAM里的两片bank进行乒乓操作。
图8 乒乓操作原理
2.3 外围设备相关功能设计
2.3.1 车轮驱动设计
小车的4个车轮,同侧2个采用直流电机驱动,该直流电机由L298N驱动,一个L298N可以驱动2个直流电机,但为了增强控制的灵活性,文中选择使用2个L298N模块对两侧的直流电机分别进行驱动。L298N具有4个端口,通过对应两端口的电位差驱动直流电机。
2.3.2 语音播报模块设计
系统使用的语音模块为YS-M3,在给模块通电之前先将A10接地,之后可切换为编码模式,再通过对A1~A5的编码,使其播放正确的语音。文中在进行语音播报模块设计时,首先在TF卡中下载并保存可能会出现的交通标识、红绿灯和数字对应的语音播报内容。当摄像头识别到某个图像后,将相应的处理信号输出给语音模块,语音模块通过与已经存储的播报内容进行对比,进而播报与该图像对应的内容。
2.3.3 APP页面显示标识功能实现
如图9所示,文中设计的APP页面能够呈现出与识别结果对应的图像。FPGA开发板中的TX通过USB串口传导相应数据到电脑上,再使用Python打开相应串口,将其数据编写入脚本文件,最后利用MATLAB打开脚本文件,读取相应数据。
图9 APP页面效果
Python的具体设计流程如图10所示。利用Python作数据中转站,先利用串口调试助手检验串口发送模块(TX)的数据是否正确,再利用Python打开相应的com4,以相同的波特率(9 600)接收。为避免出错,直接利用字符分割进行数据传递,将分割出来的第一个字符存进脚本文件,并根据TX传来的数据不断刷新脚本文件。这里要注意的是,因为左转的字节取第一位后容易出错,所以添加了一个判断语句,当左转的字符为xab时,将其字符改为b,当不满足这个条件时,屏蔽xa。
图10 Python代码设计流程
MATLAB的具体设计流程如图11所示,通过MATLAB生成一个简易的APP页面,在其中调用Python写入数据的脚本文件,利用多分支选择语句进行相应结果匹配。
图11 MATLBA代码设计流程
3 系统功能测试
系统硬件电路如图12所示。系统硬件电路主要由OV5640摄像头、数据传导模块、开关模块、L298N电机模块和YS-M3语音模块组成。
图12 系统硬件电路
在10组不同的光照强度下(100~8 200 Lux,每组递增900 Lux),将代码烧入FPGA开发板中,连接并安放好硬件设备,对三种交通标识的识别效果依次进行检验,测试流程如图13所示。
图13 系统功能测试流程
(1)将FPGA开发板的开关1、2拨至高低电平01,进行数字识别,所识别数字照片分别为绿灯下的数字8、6、12,以及红灯下的数字9。当4张数字照片识别完成后,依次观察小车车轮、语音播报、APP页面,判断识别第一类路标的结果是否正确。
(2)将开关1、2拨至高低电平10,进行红绿灯交通标识识别,所识别红绿灯照片依次为左转绿灯亮、直行绿灯亮、右转绿灯亮。当3张红绿灯照片识别完成后,观察小车转向、语音播报、APP页面,判断识别第二类路标的结果是否正确。
(3)将开关1、2拨至高电平11,进行特殊交通标识识别,路标照片分别为允许掉头、靠左行驶、前方向右行驶,当3张特殊交通标识照片识别完成后,观察小车转向、语音播报、APP页面,判断识别第三类路标的结果是否正确。测试结果见表1所列。
表1 测试结果
通过测试结果可以看出,这套系统有较高的识别准确率,但存在一定的局限性。为了提高系统的实用性,可从以下3方面作进一步提升:
(1)增加更多的匹配模板以识别更多交通指示标识;(2)利用sobel算法优化二值化算法;
(3)适当采用CNN神经网络优化因距离问题导致的识别精度较低的问题。
4 结 语
文中设计的驾驶辅助系统能够有效降低因驾驶人自身问题而导致的交通事故发生率,系统提供了2种输出信号模式,即语音提示和页面显示,以适应复杂的用户操作环境,充分为用户考虑,扩大了其适用范围。此外,通过车辆前方的摄像头不仅可以获得有用的路况信息,还可以将一张SD卡放在FPGA芯片内部,摄像头充当行车记录仪使用,进而为用户提供多样化的服务。系统结构巧妙,操作简单,在用户驾驶时能够起到高效的辅助作用,使用户注意力保持高度集中,保障驾驶安全。