李稣恩, 舒 赢, 郭铁颖, 石俊豪, 赵张泰
(吉林大学 通信工程学院, 长春 130022)
随着社会的发展, 汽车已经成为必不可缺少的代步工具, 但是汽车行驶中存在很多安全问题, 例如夜间行驶时由于远近光灯切换不及时而引发的交通事故。为解决该问题, 笔者设计了一种自动切换远近光的前照灯系统。
目前, 有很多研究机构对汽车远近光灯自动切换进行了研究。李全彬等[1]提出基于光电检测技术实现灯光切换, 但成本较高且不能完全解决远光危害问题。邹祖军等[2]提出利用光敏传感器探测外界光照强度实现变换灯光, 但系统的造价高, 液晶面板的耐温特性差, 此技术尚不成熟。高岩等[3]提出利用车载毫米波雷达实现灯光切换, 毫米波雷达的优势在于测量精度高和分辨能力强, 现多用于航天和军工等领域, 但将此技术用于灯光切换成本过高。
上述技术方案均采用光敏传感器采集距离信号, 笔者将OpenMV机器视觉模块应用于汽车前照灯切换领域, 是一次创新性的尝试。该模块相比于光敏常感器, 能更及时、 准确地采集到灯光信号并实时处理。基于此模块设计了一款远近光灯切换系统, 能根据外界环境实时切换远近光灯。在一定程度上辅助驾驶员处理在行车过程中遇到的问题。
笔者所设计的汽车远近光灯切换系统由图像采集与处理、 信号传输单元、 处理单元和执行机构4个模块组成。图像采集与处理属于引入的辅助系统, 信号传输单元、 处理单元、 执行机构属于汽车原有系统。由于汽车原有系统相关的技术已相当成熟, 故笔者就图像采集与处理作详细阐述。图1右侧为图像采集与处理结构框图。
首先, 根据夜间行车时外界环境的变化, 通过OpenMV机器视觉模块采集特定的图像信息。OpenMV是一个开源、 低成本、 功能强大的机器视觉模块, 集成了OV7725摄像头芯片。其次, 通过串口通信将采集到的图像数据传输到STM32F42进行识别处理。最后, 通过CAN总线[4-6]将ARM处理后的数据传输到汽车的中央处理器上, 再由中央处理器控制远近光灯的切换。
笔者将道路场景的视觉信息通过可编程摄像头OpenMV转化为图像数据。其优点是其基于STM32处理器, 使用Python语言[7-9]进行编程, 耗能小, 体积小, 编程容易且可操作范围大, 而对于机器视觉, 相比其他传感器, 抗干扰性强且相对稳定。在程序编写方面, 使用其专用IDE(Integrated-Drive-Electrons)进行编程。
笔者采用的颜色模型是Lab模型[10,11], Lab模式是由3个通道组成, 第1个通道是明度, 即“L”;A通道的颜色是从红色到深绿;B通道则是从蓝色到黄色。两个分量的变化都是从-120~+120。当A=0、B=0时显示灰色, 同时L=100时为白色,L=0时为黑色。Lab色彩模型除了上述不依赖于设备的优点外, 还具有色域宽阔的优势。
在感光元件参数配置方面, 摄像头部分, 采用2.8 mm广角镜头, 使用只能通过650 nm以内的滤光片以去除红外光对图像采集造成不良影响, 在上车实验时, 安装位置为车内后视镜背部, 镜头与车内后视镜平行。在使用其专用IDE对其进行编程时, 其感光元件的初始化参数设置如下: 像素模式为彩色(RGB565), 每个像素16 bit。图像大小为160×120像素,自动增益与白平衡皆为关闭状态。
在使用OpenMV录制和拍摄大量夜间行车的视频和照片后(见图2), 经过统计可见在图像下半部分, 并无有效信息可以利用, 反而存在不少反光或对场景判断不利的信息, 所以为了减少不良光源带来的识别误差, 采取图像切割的方法设置上半部分为感兴趣区, 具体采用感兴趣区的格式为(0,0,160,60)。
图2 夜间行车灯光采集图Fig.2 Night traffic light collection map
而对于各种不同的光源进行识别的工作, 则是对视屏和照片中有效灯光部分的Lab值进行检测和统计, 对路灯, 前车尾灯和来车前照灯所造成的光斑进行Lab值提取, 则可得到各光源在图片上体现的颜色的不同数值。通过对大量图片及视屏的对比, 为了减少不同环境下不同颜色对场景识别的不利影响, 则允许色差的存在, 将对比后的数据进行分析, 得到L、A、B的误差范围, 即ΔL、ΔA、ΔB, 而色差ΔE与ΔL、ΔA、ΔB的关系为
ΔE=(ΔL)2+(ΔA)2+(ΔB)2
(1)
其中
ΔL=Lmax-Lmin
(2)
ΔA=Amax-Amin
(3)
ΔB=Bmax-Bmin
(4)
在确定误差范围后, 设定其阈值(Lmax,Lmin,Amax,Amin,Bmax,Bmin), 再设置ΔE的值使其色差过大时不予响应, 以达到提高识别精度的目的。而在实际场景分辨过程中, 由于判断大灯是否开启的逻辑十分简单, 即存在路灯、 尾灯和前照灯的情况下为近光灯状态, 若不存在时则开启远光, 所以为了提高系统的实时性和减少计算量, 则可以通过大量统计和分析后得到的阈值与色差范围, 直接对图片上灯光造成的色块进行色块寻找。
在获得各灯光在图片上展现的颜色阈值及确定色差范围后, 在其专用IDE上进行程序编写, 实现在感兴趣区寻找对应色块, 并对应其寻找结果, 发出不同的信号给下一级的功能。
笔者制作了一个夜间行车的模拟场景以便于实验和展示自适应前照灯系统。以材质均匀的木板拼接成场景基座, 并贴上黑色胶布充当轨迹, 用寻迹小车模拟汽车行驶。以相同材质木板沿一侧轨迹搭建出一个隧道, 入口处不加遮盖, 出口处放置一个可抬起的挡板, 小车进入时, 挡板遮光, 在隧道内模拟黑夜场景。小车驶出时, 挡板抬起使小车顺利通过。在隧道两侧, 以适当距离设置黄色LED, 模拟路灯。在挡板上用红色LED、 白色LED分别模拟前车尾灯、来车前照灯。在小车前端固定OpenMV, 小车尾部固定一个51单片机, 并用杜邦线使OpenMV与51单片机通信, 51单片机上的小灯即模拟汽车大灯模块(为方便观察因此单片机小灯固定在小车尾部)。系统硬件原理图如图3所示。
图3 硬件原理图Fig.3 Hardware schematic diagram
在进行模拟测试时, 小车驶入隧道, 控制隧道内相应LED亮起。摄像头识别灯光, Stm32处理后, 将相应数据传输到51单片机, 通过单片机上的LED小灯灯光发生变化体现远近光灯的切换, 蓝色LED小灯代表远光, 红色LED小灯代表近光。无灯光时, 小车上蓝色LED小灯亮。路灯亮时, 小车上红色LED小灯亮。前车尾灯时, 小车上红色LED小灯亮。来车前照灯时, 小车上红色LED小灯亮。Stm32与51通信原理图如图4所示。灯光变化示意图如图5所示。
图4 Stm32与51通信原理图Fig.4 Schematic diagram of communication between Stm32 and 51 SCM
图5 灯光变化示意图Fig.5 Schematic of light change
经过200次测试, 当摄像头在适当位置时, 在模拟场景中(无反光、 道路指示牌、 电子广告牌), 摄像头能准确识别各种环境, 如无路灯无来车无前车场景、 有路灯场景、 有来车场景和有前车场景。并能准确调整和自动控制灯光的变化, 能识别路灯、 来车前照灯和车尾灯(见表1)。
表1 模拟场景实测效果
图6 真实场景实测图Fig.6 Real scene measurement
在模拟场景识别成功后, 对大量夜间行车图进行统计后, 调整关键参数, 进行上车实验, 摄像头部分安装位置为车内后视镜背部, 镜头与车内后视镜平行。对于图6中3种情况, 经过100次测试, 设备可识别以下情况并能对其进行实时处理并发出信号(由于会受到车载元件之间的电磁影响, 成功率有所下降)。实际场景测试效果如表2所示。
表2 实际场景测试效果
该系统实现了在不同环境下远近光灯的实时切换, 为驾驶员提供更合理、 及时的照明条件, 对单片机的机器视觉模块进行了创新性的应用。未来机器视觉将更广泛应用于汽车行业, 创造出更为安全的交通环境。