一种基于Raspberry Pi的智能助盲导航系统*
2023-01-30王雨欣
王雨欣,贺 裕,赵 灿
(哈尔滨师范大学计算机科学与信息工程学院,黑龙江 哈尔滨 150025)
0 引言
世界卫生组织2020年数据显示,我国视力残疾的人约有一千二百万,但我国很多地区盲道建设不规范,常有车辆停在路边也会截断盲道,此外,导盲犬的数量稀少加上价格昂贵,导盲杖虽然成本较低,但可控范围又十分有限,这些都不是根本的解决办法[1]。基于该背景下,盲人智能眼镜开始出现在人们的视野中,盲人智能眼镜的概念在很早之前就有人提出过,但在2016 年的微软Build2016 的记者大会中才第一次正式亮相,当时展示的智能眼镜的功能比较单一,只有简单的识别功能,虽然能在一定程度上给盲人提供便利,但还是有一定的局限性。相比之下,本文基于Raspberry Pi 开发的辅助盲人行动的智能助盲导航系统的功能更加多元化,系统名为“SE-盲人之光”,通过图像识别与智能避障技术,实时监测用户所处的周围环境,最大限度的给予用户安全出行的保障。本文将针对该款助盲系统中所用到的语音传输、图像识别、智能避障等相关技术进行详细阐述。
1 图像识别功能实现
1.1 框架简介
结合Raspberry Pi 的功能特性及主流的图像识别框架的适应性,确定TensorFlow作为开发框架。
TensorFlow 是Google 开放的学习架构,在各种图类型、声音信息处理、推荐管理系统和自然语言信息处理等情景下均有大量的使用。
在树莓派上安装TensorFlow,并且安装一个wheel文件,该文件用于安装Python 模块,进而方便后续的文件解析。关于识别双目摄像头拍摄的图片中的物体,首先需要训练图像分类模型,但这在树莓派中会导致大量资源消耗并且需要很长时间。这就是为什么我们选择了Google 已经练习的LeNet-5 模式,即TensorFlow 指定了一组预先练习的参数集,并且训练照片库是ImageNet[2]。通过对该模型进行解压,可以利用TensorFlow 进行图像的识别,但在识别的过程中需要设置好Python 图像分类程序所在的路径以及待识别图片的路径,进而完成图像识别的功能。
1.2 算法简介
关于图像识别采用算法,采集生活中常见物品图片,进行模型对比验证,采用数据集进行日常物品的识别模型训练。主体架构是使用了卷积神经网络,基本上是含有卷积层、池化层、全连络层还有softmax层[3]。
与常规神经网络系统有所不同,卷积神经网络系统各层中神经元是三维进行的:长宽、高程和深浅。这里的宽度和高程是很好的把握的,因为组织实际上是一个二维模块,但是卷积神经网络中的深入是指激活数据体的第三级,而并非整体网络系统的深入,整体网络系统的深入是指整体网络系统的层数。训练流程如图1所示。
图1 训练模型流程图
LeNet-5 模型共七层,第一层为卷积层,输入元素图像,使图像转换为LeNet-5 模型所能接受的图像格式。第二层池化层,这一层的输入为第一层的输出,本层采用的滤波器大小为2×2,长和宽的步长均为2,所以本层的输出矩阵大小为14×14×6。第三层,卷积层继续处理图像。第四层池化层,本层的输入上一层输出,采用的过滤器大小为2×2,步长为2。本层的输出矩阵大小为5×5×16[4]。其余三层为全连接层。完成模型设计后,对系统进行训练,测试识别准确率。
2 避障原理
我们在树莓派上搭载了精度较高的HC-SR04 超声波测距模块和红外线传感器模块,使用双模块综合测距的方式来测量使用者与障碍物之间的距离。
2.1 超声波测距原理
超声波测距的基本原理采用的是时刻差定距法,超声在室内空气中的传输速率是可知的,从发射点到障碍物的具体实际间距是通过发射和接收双方的时间限制之差来衡量的,当声音在其释放后被反射时,首先,超声波发射器向一定方向发送超声波,传输时间的同步是暂时的,超声在房间内的空气环境中传输,沿途迅速将障碍物折回,超声接收器被波反射后立刻终止计数。
超声在室内空气中的传播速度为C=340m/s,按照定时器T 秒确定的时限,我们能够测算出从发射点到障碍物的间距L,即:L=C×T/2。但由于超声波传感器包括发送端(Trig)和接受端(Echo),使用IO 口Trig自行接触测距,给到最小10us 的高电平信息下会模块会自动发出方波[5],发出信号的时候接收端会提供高电平值,等到接收到反馈过来的信号时,Echo 也会跳转入低电平值。通过超声波的工作原理得知:从Trig=1到Echo=0的时间,就是超声波从发射到接收的时间,因此障碍物的距离还有另外一种检测方式,即障碍物的距离=Echo 高电平持续的时间×C/2,原理如图2所示。
图2 超声波测距原理图
2.2 红外线避障模块原理
红外测距都是利用了三角测距的原理。红外发射器沿特定角度发射红外光,当红外发射体击中物体时,它再次反射,如果检测到反射光,利用结构上的几何三角关系,就能够算出与物体距离D[5]。
用来检测周围是否有障碍物,当使用者周围出现障碍物时,红外线避障模块的两个指示灯将会变亮,同时传感器的状态转为False,此时可以在传感器为False 的状态中添加周围出现障碍物的文本,最终通过TTS 转换模块来将文本转换为语音,并通过语音输出模块进行语音的提示。
3 基于树莓派的智能助盲导航系统设计
在此次智能助盲导航系统的设计中,我们针对如图3所示的功能进行开发。
图3 系统功能模块
3.1 超声波避障功能
对于该系统的避障功能,我们选择超声波测距和红外线检测两种方式共同进行,这是由于由于超声波易受环境因素影响,在不同的环境介质下,会有着不同的传输速度以及一定的延迟,这可能会在关键时刻影响用户的行动,因此,加上红外线检测模块之后,会对用户周围存在的障碍物进行实时的信息反馈,再结合超声波检测出来的障碍物与用户之间的距离,能够在第一时间提示用户周围的障碍物信息,极大提高了用户规避障碍物的精准性[6]。
3.2 红绿灯状态识别
我们在树莓派上搭载OpenCV 来进行颜色的识别,OpenCV 是一个使用BSD 许可(开源)发布的跨平台计算机视觉库,并且其还提供的Python 接口,实现了在图像处理和计算机视觉方向上的多种通用算法,以便于人们在树莓派上进行研究[5]。具体识别流程如下。
⑴由于RGB 模型适合显示,不适合作为颜色识别的模型,HSV 更加符合人眼的感受,将其作为颜色识别会大大提高识别的准确性,这里我们使用OpenCV自带的hsv_frame 函数来将RGB 转换到HSV,进行方便颜色的识别。
⑵在OpenCV 中,因为,各种颜色的HSV 模型的取值范围都各不相同,所以,我们需要设置各种颜色的HSV模型的取值范围。
⑶在设置完颜色的取值范围后,要对拍摄的彩色图像进行直方图均衡。
⑷接着使用OpenCVAPI 进行颜色阈值的检测,从而得到二值图像。
⑸对二值图像进行开操作,删除零星噪点。
⑹接着进行闭操作,连接一些连通域,这样得到的二值图像就是颜色识别后的结果。
通过以上步骤便能在树莓派上利用OpenCV 对拍摄的图像识别颜色,即能够识别出红/绿灯的状态。
3.3 日常物品识别功能
对于日常物体的识别功能,我们使用了TensorFlow框架来识别实时拍摄图片中的各种物体。通过在树莓派上搭载TensorFlow 框架,将实时拍摄的图片上传到已经训练好的模型中去,利用现成的图片集去匹配所拍摄图片中的元素,并自动生成标签,从而达到图像识别的目的[7]。
3.4 语音交互功能
在语音提示功能方面,我们选择在树莓派上搭载TTS(text-to-speech)模块,即添加文字转语音的功能,通过程序把输入的文字通过硬件播放器播放出来。对于TTS 的选择有很多种,可以使用云端的TTS 服务也可以使用本地的TTS 软件,两者各有利弊,这里我们选用本地的TTS 的Espeak 软件,通过对TTS 软件的安装和配置以及无源耳机的连接,重启之后再进行Espeak命令的执行,便能正常发声[8]。
3.5 按键交互功能
由于该款眼镜的智能性,使用者可以根据眼镜上安装的便捷按钮,通过触碰的不同次数来调整播放音量和眼镜的松紧程度,进而实现简单的人机交互。
4 系统模块总设计
整个树莓派搭载了双目摄像头、红外线传感器模块、HC-SR04 超声波测距模块、TTS 文本转换模块、语音输出模块。具体工作流程如下:
通过双目摄像头将实时拍摄的视频流上传到树莓派中,通过树莓派实时截取视频流中的图片,并上传到OpenCV 模型以及TensorFlow 框架中,进行图像元素以及颜色的识别,并生成相应的标签,接着利用红外线传感器模块的避障提示,以及超声波测距模块对障碍物到用户的距离进行检测,进而判断图像中的障碍物距离用户的远近,从而达到即使避障的目的[9]。图像识别产生的元素标签、避障时的障碍物提示以及障碍物和用户之间的距离都以文本的形式上传到TTS模型中,进行文本到语音的转换。最终通过语音输出模块,利用无源耳机将转换出来的语音进行外放,从而完整的实现了智能导航系统的功能[10]。
5 结束语
这款智能导航眼镜有着强大的功能和应用前景,但还是存在一些不足之处,比如,该款设备所用到的器件较多,并且又不少体积和重量较大的器件,这不仅在装配过程中会有问题,用户戴着的时候也会不舒服,极大得降低了用户的体验感,除此之外,在该导航眼镜中存在一些技术上的不足,在导航系统的运行中,缺乏路线的选择以及实时场景信息处理时的优化算法,毕竟时效性不好的话,在一定程度上会给用户带来一定的安全隐患。
因此,我们会在之后的搭建中突破一些技术上的难题,不断维护和更新该设备的算法以及所用器件的性能等相关信息,进而使该设备更加完美,并能够早一点投入市场,为更多的人带来便利。