基于树莓派的盲人智能眼镜的设计与实现
2021-07-19杨家乐杨洋郭超东张涵尹宏博严文娟
杨家乐 杨洋 郭超东 张涵 尹宏博 严文娟
摘要:随着科技的发展,智能眼镜为盲人的出行带来了便,该文以树莓派为硬件、Python为开发语言设计了一款盲人智能眼镜,该眼镜由图像识别、超声波避障、斑马线边缘检测、语音提示四个模块构成,实现了识别红绿灯及其示数、检测斑马线左右边缘以及前方一定范围内障碍物并进行相应的语音播报的功能,为盲人安全通过交通灯时提供辅助。
关键词:智能眼镜;树莓派;Python
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2021)15-0085-03
1引言
随着我国人口变化,盲人所占比例也在持续增长。据统计,中国拥有着世界上最大的盲人群体,2018年我国盲人数量已到达1700多万[1],盲人的生活问题引起了各级政府及社会强烈的关注。近年来,随着软硬件技术迅速的发展,导盲杖及导盲音响设备等一系列的导盲手段涌现于市场之中,但因其技术的实施存在限制条件且不可保障使用者的安全性等缺点,智能眼镜相关技术及研究应运而生。纵观市场分析,智能眼镜拥有手势识别[2]、眼动跟踪[3]及语音控制三大主要功能,目前主要应用于盲人生活的安全区域内,但在出行方面是远远不够的,尤其在通过斑马线这种极度危险的路段时,现有设备所提供的功能存在一定缺陷,本文以树莓派(Raspberry Pi 4b)为硬件基础、Python为开发语言设计了一款能实现准确识别红绿灯及其时间、检测斑马线边界以及前方一定范围内障碍物及其方位,并通过扬声器自动播报,从而实现辅助盲人安全通过交通灯的目的,为盲人的出行带来了便利。
2系统设计
本设计由图像处理系统、后端处理系统、避障模块、斑马线边缘检测模块、语音模块[4]组成,如图1所示为系统设计框架图。系统由摄像头捕获图像帧,通过TCP传输协议将图像数据传输给后端处理系统,由图像处理系统对图像进行处理分析,筛选图像识别结果,对结果进行颜色和字符匹配并将识别结果返回给树莓派[5],再进行相应的语音匹配,最后调用语音模块进行相应的语音输出;树莓派分别传输避障信息、边缘检测信息至避障模块和斑马线边缘检测模块,当检测到前方障碍物以及斑马线边缘时,进行相应的语音匹配,最终调用语音模块进行相应的语音输出。
3系统软件设计
3.1图像处理系统
图像处理系统流程[6]如图2所示。系统初始化后,Raspberry Pi调用摄像头采集用户面前的路况图像,存储到缓冲区,将在缓冲区中的图像作为separate_color的必要参数对图像进行分离、过滤。接着对图像进行红绿灯颜色和数字的识别[7],红绿灯颜色的识别的步骤如下:先通过cv.cvtColor函数将图像的色彩空间从BGR转换为HSV,接着通过numpy.array分别设定红色和绿色的提取颜色阈值范围,最后通过cv.inRange对HSV转化的图像进行双阈值化操作[8],将处理完后的二值化图像作为返回值;数字图像的识别[9]步骤如下:调用recognition_traffic_number进行字符提取处理,先通过cv.resize对默认状态下的图像大小进行比例缩放,再通过easyocr.Reader[‘en].readtext对图像中的文字进行提取,将处理完成后包含字符位置和字符的二维数组作为返回值。
3.2后端处理系统
后端处理系统[10]流程如图3所示。Raspberry Pi系统是基于Linux的,板载了无线网络适配器,可通过开启无线网络适配器的AP功能、设置静态IP开启IP路由转发,实现无线路由的功能,使数据高速率传输。后端处理系统启动后,进入初始化状态,检测网络连接,可以通过WIFI或以太网连接终端设备,在系统中通过flsak框架[11]提供的route装饰器将图像识别recognition函数绑定到URL,设置methods参数的值为POST表示可以接受上传文件请求,当该路由被请求后,调用recognition函数对图像进行处理,对处理结果使用flask框架提供的jsonify进行数据打包返回,具体值包含运行状态status,红绿灯颜色color,计时器示数number,其次还有使用route装饰器将终端设备屏幕刷新帧test_fps函数绑定到URL,若该路由被请求,通过test_fps函数获取终端设备数据,经flask框架提供的jsonify对获取数据结果打包上传。
3.3避障模塊
避障模块设计[12]如图4所示。系统初始化后,调用start_obstacle_detection开始障碍物检测,通过RPi.GPIO.setmode(RPi.GPIO.BCM)设置树莓派引脚使用BCM编码模式,使用RPi.GPIO.setup配置超声模块通道的输入和输出,通过GPIO.output和time.sleep设置超声模块输出的高电平和低电平间隔0.01毫秒,再使用GPIO.input轮询读取超声模块的输入值,若输入值为高电平,记录时间点1,继续使用GPIO.input轮询读取超声模块的输入值,若为低电平则,记录时间点2,使用矢量算法获取距离障碍物的距离,若小于设定范围,调用语音模块播报语音,使用time.sleep设置避障使用时间,结束避障后继续开始障碍物检测。
3.4斑马线边缘检测模块
斑马线边缘检测模块程序如图5所示。系统初始化,调用start_left_edge_detection开始斑马线左侧边缘检测,通过RPi.GPIO.setmode(RPi.GPIO.BCM)设置树莓派引脚使用BCM编码模式,使用RPi.GPIO.setup配置黑白检测模块通道的输入,使用GPIO.input轮询读取黑白检测模块的输入值,当输入值为低电平时,设定值自增1单位,当设定值超出设定范围后,调用语音模块播报语音提示,使用time.sleep配置调整时间,结束后继续开始斑马线边缘检测。同理,通过调用start_right_edge_detection对斑马线右侧进行边缘检测,并播报相应的语音。
4系统功能测试
该系统主要实现3个功能:
图像处理功能:设置交通灯红绿灯倒计时时间均为30秒,当交通灯显示红灯30秒时,扬声器播报语音“现在是红灯,禁止通行”,当红灯结束,交通灯显示绿灯30秒时,扬声器播报语音“现在是绿灯,可以通行”,当交通灯显示绿灯13秒时,扬声器播报语音“还有十秒绿灯结束,十、九、八……零”。图像处理测试结果如图6所示。
避障功能:设置检测范围为30cm,将测试设备放置于斑马线中间位置,人为控制设备向正前方移动,舵机保持运转状态。当接近正前方30cm范围内的障碍物时,舵机指向障碍物并停止转动,此时扬声器播报语音“前方有障碍物”;设备继续向前移动,此时舵机重新运转,当接近右前方30cm范围内的障碍物时,舵机指向障碍物并停止转动,此时扬声器播报语音“右前方有障碍物”;设备继续向前移动,此时舵机重新运转,当接近左前方30cm范围内的障碍物时,舵机指向障碍物并停止转动,此时扬声器播报语音“左前方有障碍物”。避障测试结果如图7所示。
斑马线边缘检测功能:将测试设备放置于斑马线中间位置,人为控制设备向左移动,当靠近斑马线左边界时,扬声器重复播报语音“您已接近左边界”,此时控制设备由左向右移动,扬声器停止语音播报;当设备靠近右边界时,扬声器重复播报语音“您已接近右边界”。斑马线边缘检测测试结果如图8所示。
5结束语
以树莓派(Raspberry Pi 4b)为硬件基础、Python为开发语言设计了一款具有图像识别、超声波避障、斑马线边缘检测、语音提示功能,实现了红绿灯颜色和数字的识别、斑马线边界以及前方一定范围内障碍物及其方位的检测,并对检测的结果通过扬声器自动播报,从而实现輔助盲人安全通过交通灯的目的,为盲人的出行带来了便利。
参考文献:
[1] 陈鹏,陈智利,李庞跃,等.树莓派3B+导盲系统设计与实现[J].西安工业大学学报,2020,40(3):305-309.
[2] 赵孙裕,石佳,董梅,等.基于手势识别的小车控制[J].内燃机与配件,2020(17):204-205.
[3] 栗战恒,郑秀娟,刘凯.移动设备视线跟踪技术研究进展[J].计算机工程与应用,2018,54(24):6-11,148.
【通联编辑:闻翔军】