大型车辆驻车盲区防撞预警装置

2023-10-20 05:10陈钇林
学苑创造·C版 2023年9期
关键词:树莓线程摄像头

陈钇林

有一类交通事故俗称“鬼探头”,指的是司机在驾驶时,从视野盲区突然蹿出非机动车或行人,司机因避让不及时造成车伤人亡的惨剧。为了降低此类事故的发生,我以公交车为例,研发制作了大型车辆驻车盲区防撞预警装置。在制作之前,我列出了几个需要解决的问题。

问题一:采用何种方式检测人

有两种方式:一是通过移动侦测识别移动中的人,在这个方法下,通过检测每一帧画面下的不同画面来获得人移动的情况。二是通过人脸识别功能识别移动中的人,可以采用Open CV(踌平台计算机视觉库)自带的人脸识别级联式触发器,通过识别画面中的人脸获得画面中移动的人的位置。

总结:第一种方式容易受到背景移动车辆的干扰;第二种方式在使用过程中必须人脸朝向摄像头。因此选择第一种方式来实现检测人的功能。

问题二:如何减少摄像头检测时受到的干扰

方式一:测量一段时间再进行决定。这个方法可以有效避免环境对摄像头检测的干扰,但是对于安全装置來说反应时间十分重要,故需要考虑测量时间的长短以便避免延误最佳反应时间。经过综合测试,符合本项目的反应时间为0.5秒。

方式二:采用双目测距方法检测深度。这个方法处理效果最好,但是运行不是很稳定。在现实环境中,由于公交车的运行环境在室外,环境光对摄像头的干扰较大,很难稳定地测量。另外,该装置需要配置2个摄像头,增加了制作成本,不利于量产,故不予采用。

方式三:采用单目测距方法检测深度。该方法主要通过估计人体大小和测量画面中移动物体的大小,达到检测远处物体和近处物体的差别以及滤波,以便去除部分摄像头检测不稳带来的干扰。这一方式行之有效,但是大人和小孩的身高和体型差距较大,因此不能用它来检测远处物体和近处物体的区别,只能将其用于减少摄像头本身的干扰问题。

方式四:调整摄像头的摄像角度及使用软件滤去摄像头拍摄下的远处画面。调整摄像头的摄像角度后可以获得一个偏俯视的画面;通过软件滤去远处的画面可以得到更适合检测的画面。该方案通过忽略部分图像内容达到只检测近处图像的目的,行之有效,予以采纳。

问题三:通过何种方式提醒行人及后方车辆注意“鬼探头”

提醒行人的方式有:鸣笛、播放语音提醒和显示图标,但综合考虑还是鸣笛比较有效。

提醒后方车辆驾驶员的方式有:鸣笛、打开车辆的双闪灯提醒、利用公交车后尾部的显示牌进行提醒。车辆双闪灯有紧急停车的意思,容易被误解,因此不考虑这种方式。公交车尾部的显示牌容易被车身广告“喧宾夺主”,影响提醒的效果。综上所述,本项目决定采用鸣笛的方式提醒行人和后方车辆的驾驶员。

确定方案后,接下来是硬件设计。本项目使用到的硬件有:树莓派主板、USB摄像机、LED灯(用来模拟双闪灯以及装置运行状态信号灯)、蜂鸣器(用来模拟喇叭)、SSD1306 OLED模块(用来模拟显示屏)。

由于树莓派主板对供电要求比较大(5V 3A),制作时没有找到合适的电源适配器,故采用两个适配器并联供电。在实际生产环境中,可以直接采用一个功率较大的,如5V电源直流适配器供电(接到车载电源上)。

由于摄像机处理需要较大的运算速率,所以本项目采用树莓派评估板作为模型核心处理。所有软件设计均基于树莓派系统(x86_32)。

考虑到本装置为安全保卫装置,对时效性有较高的要求,故采用多线程形式避免各部分的相互影响。因此本软件分为初始化模块、图像处理和识别模块、GPIO(通用输入输出口)模块、用户界面事件处理模块等几个独立模块。模块之间的设计采用高耦合低内聚的结构,各模块之间各不隶属。由于多线程处理,线程之间涉及有关信息的通讯,有管道消息、变量FLAG的通讯形式和文件通讯形式。考虑到管道消息具有不稳定性(容易造成管道破裂导致系统停止进程运行),文件通讯可能造成冲突(通常情况下只能由一个进程访问同一文件),最终本项目决定采用线程共享部分变量FLAG形式通讯。

初始化模块:所有线程均由初始化模块进行初始化和创建线程并运行线程并初始化FLAG变量;设置信号位防止系统因为异常导致装置的程序停止运行。

图像识别和处理模块:初始化模块完成初始化后,转化为本模块继续执行(避免浪费系统资源)。本模块掌握评估板上的摄像机资源,并进行图像处理。通过摄像机获取前后两帧画面,先对两幅画面进行灰度化处理,再对两幅画面运用光栅作差法检测出画面不同的部分获得灰度图像,接着对图像进行二值化处理,把像素差值超过3(灰阶255)的部分标记出来,最后采用高斯滤波法过滤掉图像中的大量噪点。接下来对图像进行膨胀处理,将画面中残缺的部分连接起来。下一步查找图像中的“等高线”,即将图像连续部分查找出来,再使用对最边缘的顶点进行框选,最终获得目标的具体位置。同时,通过去除抖动以及去除过远(即在画面中过小)的目标,达到稳定检测的目的。

GPIO模块:这个模块针对GPIO进行处理,掌握全部GPIO资源。主要处理信号的输出,包括蜂鸣器鸣响、LED灯和显示屏。信号的输入主要是车辆是否处于停车状态,调试许可是否打开等信号处理,信号输入通过公共标志位的修改影响各个模块的工作流程。为了给图像处理更多CPU资源,这个模块会增加延时主动临时性放弃执行权限。

用户界面事件处理模块:该模块主要针对用户界面(主要用于修改配置和进行调试纠错)进行处理。该模块不是一个单独的线程,而是一套事件处理函数。

(该项目获第37届广西青少年科技创新大赛青少年科技创新成果竞赛一等奖,第九届中国国际“互联网+”大学生创新创业大赛萌芽赛道创新潜力奖 指导老师:李玉华、马玉桥、黄义强、严俊)

猜你喜欢
树莓线程摄像头
浙江首试公路非现场执法新型摄像头
摄像头连接器可提供360°视角图像
基于树莓派的骑行智能头盔设计
基于太赫兹技术的新一代摄像头及其在安防领域的应用探讨
基于树莓派的远程家居控制系统的设计
浅谈linux多线程协作
响应面法优化红树莓酒发酵工艺
奔驰360°摄像头系统介绍
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
欧盟:速冻树莓比鲜食树莓市场更好