郭昭烽 谢 玲 庄一帆
(1.光大环境科技(中国)有限公司,江苏 南京 211102;2.南京理工大学紫金学院,江苏 南京 210046)
目前我国的盲人总人数约占世界的五分之一,是世界上拥有最多盲人的国家。同时,我国每年都会大约新增加45万名盲人和135万名视力障碍者。在我国,盲人出行基本上只有两种方式:传统手杖和导盲犬引导。传统的导盲杖对于盲人的帮助很小。盲人需要花费很多的时间来练习这种导盲杖,通过敲击地面靠自己固有的经验来判断前方是否可以安全正常行走。这种方式的局限性非常大。对于盲人而言,最重要的是在未知的地方获取道路形状和障碍物位置的信息。有了这些信息,他们可以避免意外的障碍,安全地到达目的地。因此,设计一款可以真正帮助到盲人检测到人行横道、及时提醒盲人避开障碍物并且能够在夜间提示周围人的导盲手杖意义十分重大。
设计的导盲杖以STM32F103C8T6为微控制器。选择它的原因是因为它能满足本设计需要用到的超声波、语音合成和机器视觉开发功能。该控制器串口以及端口丰富,且功耗较低,可供选择的引脚数目比较多,价格便宜既能满足需要又能降低导盲杖的成本。
整个系统功能设计如下:
(1)主动探测障碍物功能。采用超声波传感器,通过计算超声波遇到障碍物返回的时间,测出导盲杖与障碍物的距离,如果距离过近则发出警报。
(2)震动报警功能。当超声波测定的距离小于预设值时,通过控制器,控制直流电机震动马达震动,提醒盲人前方障碍物。
(3)语音提示功能。选用SYN6288模块,在前方没有障碍物时提示使用者“前方可以行走”,在超声波检测到障碍物时停止播报。在前方没有障碍物的前提下,如果检测到盲道则播报盲道,如果检测到人行横道,则播报人行横道。
(4)智能识别功能。在导盲杖上连接一个OPENMV4摄像头模块,通过其内置的深度学习训练神经网络进行盲道与人行横道的识别。
如图1为导盲杖的实物图和设计图,导盲杖的内部是镂空的,方便将各个芯片和线路放置到导盲杖的内部。将震动模块安装在导盲杖的把手位置,这样震动时手部感受到的震动是最大的。将语音芯片的喇叭安装在导盲杖的顶部,这样使用者可以更清晰地听到提示音。盲人原来使用普通导盲手杖时,采用敲击地面的方式只能感受到前方较低地方的障碍物,所以本设计将超声波传感器安装在导盲杖高度的2/3处,这样可以帮助盲人检测较高地方的障碍物。将OpenMV摄像头以约30°的角度安装在导盲杖高度的约1/3处,这样可以更好地观察到地面的情况,以便进行道路分类。
图1 导盲杖实物图和设计图
系统硬件设计及主要接口连接图如图2。
图2 系统硬件设计及主要接口连接图
其中,超声波测距模块选择HC-SR04,用来测量导盲杖和障碍物之间的距离。该模块测量精准度为3mm,不通过接触可以测量前方2cm 到400cm 的距离。超声模块的VCC 接5V,GND 接地,Trig 口接STM32 芯片的B8 口,Echo 口接STM32芯片的B9口。
震动模块采用高质量手机震动马达。通过Mos 管放大驱动,对于震动效果进行提升。可通过PWM 控制调节马达的震动强。可以通过Ard数字口控制震动电机,当输入为高电平的时候,电机就会震动[4]。震动模块VCC接5V,GND接地,IN口接C13口。
语音合成模块采用SYN6288 中文语音合成芯片。SYN6288 通过串口通信的方式与STM32 芯片进行数据传输。SYN6288 的TXD 接口接STM32 的RXD 接口,RXD 接STM32的TXD接口,GND接地,VCC接5V。SYN6288芯片在进行串口通信时最多可以接收206个字节的数据。
采用OpenMV Plus,是一款具有图像处理功能、可以训练神经网络模型的可编程单片机摄像头,可以通过MicroPython 控制。OpenMV 的TXD 口接STM32 芯片的RXD 口即A2口,VCC接5V,GND接地。
主控部分使用KEIL5环境进行开发,软件整体流程图如图3。
图3 系统软件流程图
当盲人面前没有障碍物时,语音播报前方可以行走,遇到盲道语音播报前方是盲道,遇到人行横道语音播报前方是人行横道,当前方遇到障碍物时停止播报,同时马达震动提醒使用者。
首先要设置定时器,以及对HC-SR04 的端口进行初始化。系统选择TRIG触发的方式通过IO口进行测距,初始化先要把电平降低,然后发送超过10us 的高电平型号;接收到高电平信号以后,会产生8个40kHz的方波,如果接收器接收到返回的信号,则会在IO口上输出一个高电平,高电平持续的时间可以看作是超声波一个来回的时间,即所需要测量的距离就等于高电平时间乘以声速的一半[3]。当距离小于预设值时控制震动马达震动。
SYN6288 芯片在进行串口通信时最多可以接收206 个字节的数据。其中帧头1字节,数据区长度2字节,数据区可以小于等于203 字节。使用时需要分配一个串口给SYN6288使用,波特率设置成默认的9600。
主程序关键代码如下:
OpenMV4使用OpenMV IDE环境进行开发,使用Micro-Python 进行编程。在OpenMV 上训练神经网络模型分为四个步骤:
第一步通过OpenMV IDE采集数据集,一般一个分类需要200张左右的数据集进行训练,这里设置两个分类:盲道和人行横道。
第二步将采集的图像上传到EDGE IMPULSE的在线网站上,上传之后首先要清洗数据集,然后进行图像的预处理,将图片的大小调整到96*96,图像格式选择RGB。预处理完成,会生成数据集分布图,如果两个分类基本上是分开的、区别较明显,证明数据采集比较成功,否则需要重新采集数据或清洗数据。
第三步进行在线训练模型,设置深度学习的轮数、学习率,同时勾选图片增广,可以扩大数据集的样本容量,使训练结果更加精准,避免过拟合,最后设置置信度。训练过程中,loss 逐渐降低,accuracy 即准确度逐渐升高并且最终提高到1。如果训练过程中准确率在前几轮就达到了比较高的数值,则会直接停止训练防止过拟合的情况发生。训练结束后会先自动生成float32 的模型,然后转化成int8 量化的类型,最后显示训练结束。
第四步将训练好的模型及代码下载到OpenMV 里。然后通过串口通信将模型检测出的数据传输给STM32,接入到主控程序中。
训练过程及结果如图4、5所示。
图4 训练过程
文章介绍了一种智能导盲杖系统的设计,从功能需求、硬件组成、软件设计三方面进行说明,使用深度学习训练后的模型进行图像识别,结合超声波传感模块、语音合成模块、震动模块构建系统。该设计可以高效地解决盲人对于身处路段不明的问题,有效地帮助盲人解决出行困难以及安全方面的问题,提高盲人的生活水平。希望在未来,导盲杖功能可以更加齐全,也更加轻便,使得盲人的生活水平进一步提高。
图5 训练完成