面向独居老人的智能居家监护系统
扫描二维码
随时随地手机看文章
1. 引言
第七次人口普查公报[1]结果显示,全国人口中65岁及以上人口为190,635,280人,占总人口数的13.50%,其中65岁以上的独居老人人口总数为1988万人,占65岁以上老人总数的10.43%。65岁以上老年人的前4大死亡原因分别是呼吸系统疾病、循环系统疾病、肿瘤和意外伤害[2],而独居老人在面对上述各种疾病或意外伤害时具有更高的死亡率[3],这说明独居老人具有更大的健康风险。同时由于老年人生理机能变化,活动量减少,行动不便,缺乏照顾,他们发生意外伤害的可能性随年龄的增长而不断上升,研究表明意外跌倒是我国老年人意外死亡的第一因素[4],当独居老人发生意外跌倒时,若无法及时得到救助,可能危及生命,导致悲剧的发生。
本文设计的面向独居老人的智能居家监护系统可以通过语音识别联动服务机器人实现对老人的需求做出相应反应;还能采用基于毫米波雷达点云数据的深度学习方式检测老人的姿态,并联动服务机器人;在出现老人摔倒或呼救等危险情况时,系统会及时通过前端交互界面给家人发送警报,同时机器人能够自动导航至老人所在房间,提供应急服务。该系统实现具体包含了五个功能模块:云端服务器模块、语音识别模块、姿态检测模块、机器人联动服务模块、前端交互模块。
1.1. 研究现状
随着第四次科技革命推动的物联网、信息技术、大数据和云计算等技术的发展,养老服务水平也被极大地提升,部分智能家居技术也被用于养老服务中[5]。基于养老的智能家居服务用于满足老年人安全、独立、健康和援助等需求,在照顾老年人方面发挥着重要作用[6]。当前的智能家居的适老化研究主要集中在对老人身体健康指标的监测和老人异常状态检测,例如突然跌倒等。其中,在健康监测方面有不少研究将智能手环与智能家居系统结合,实现对老年人的健康检测[7],通过让老年人佩戴包含加速度计、陀螺仪、脉搏传感器和体温传感器的智能手环,采集这些数据送往中控平台进行分析,以获得老年人的体温和心跳频率的健康状态,同时通过分析加速度计和陀螺仪的时序数据,推断老年人的运动姿态,判断其是否有摔倒的迹象。同时国内外也有利用视觉检测技术结合深度学习来检测老人是否发生跌倒[8] [9]。但是调查显示,穿戴类设备并不适合给老年人使用[10],一是老年人容易遗忘佩戴设备;二是穿戴类设备容易丢失。基于视觉检测的视频监控能够完成非接触式的摔倒检测任务,但近几年因为家庭网络摄像头遭到入侵而造成隐私泄露的事件层出不穷,大部分老年群体也并不希望时刻有摄像头监控自己。对于老人的紧急求助需求,目前的主流产品均为一键呼叫器,求助按钮或随身佩戴,或固定在房间某处,而固定在房间某处的呼叫器更是不便于甚至无法为突发危险情况的老人提供紧急求助服务。调研市场发现,目前面向老人的监护产品还存在着功能单一、不成系统,只“监”无“护”,即无法为发生危险情况的独居老人及时提供应急服务的问题。从关心独居老人的健康状况出发,针对上述的不足,本文设计实现了一个可以实时监测突发危险情况,且能根据需求提供便利服务的面向独居老人的智能居家监护系统。
1.2. 本系统特色
本文面向独居老人的智能居家监护系统的特色有以下三点:
第一,我们采用毫米波雷达实现老人的姿态检测,克服了主流摔倒检测产品的局限性。基于毫米波雷达的姿态检测是非接触式的检测方式,克服了穿戴类设备的不足;同时也解决了基于视觉的视频监控的痛点,既防止隐私泄露,也满足了老人不愿意被监视的心理需求。
第二,我们使用语音识别的方式解决独居老人的求助需求。只要在房间内布置一个语音识别模块,老人在该房间内的求助语音都能够被接收并发送给家人,相比按钮求助类产品更加方便。
第三,我们将姿态检测功能和语音识别功能组成系统,并在系统内添加了机器人联动服务模块。服务机器人能够根据姿态检测模块和语音识别模块检测到的信息提供相应的服务,解决了只“监”无“护”的问题。
2. 系统总体方案设计
本文基于云–边–端架构,实现了面向独居老人的智能居家监护系统,其主要功能有云端服务器、感知控制和应用服务,总体功能架构如图1所示。
Figure 1. Overall functional architecture diagram of the system
图1. 系统总体功能架构图
云端服务器为系统内部各模块提供通信服务。
感知控制方面,语音识别模块主要对老人的语音需求进行感知,采用R329开发板[11]作为开发平台来实现。该模块可以识别到老人的关键词需求,比如喝水、救命等,并向云端服务器下的相应话题发布对应的需求信息。
姿态检测模块主要负责以非接触式检测识别老人在房间内的姿态,采用毫米波雷达以及基于RK3399芯片的EAIDK610开发平台[12]进行实现。该模块可以识别房间内老人是否摔跤以及一些常见姿态,并向云端服务器下的相应话题发布对应的姿态信息。
机器人联动服务模块主要负责在老人有相应需求或者有危险时能够及时提供帮助或发送警报。通过使用EAIDK610开发平台控制机器人,实现机器人联动服务模块。它可以订阅语音识别模块和姿态检测模块的话题,从云端服务器接收到对应话题的信息,然后控制服务机器人做出对应行动。
应用服务方面,前端交互模块由微信小程序实现,用户可以进入房间页面查看各房间状况、语音需求以及危险情况报警等,使家人能够远程关注老人在对应房间的状态信息。
3. 语音识别模块
语音识别模块使用到的硬件设备为采用ARM v8架构的R329开发板。它基于全志R329芯片设计,搭载双核ARM CortexTM-A53,同时内置高性能的周易AIPU处理器,使得它支持智能语音和视频图像处理,也能够直接跑一些人脸识别模型、语音识别模型等。在本模块中,R329主要用于部署语音识别模型实现关键词识别功能,能够在识别老人关键词需求后发送相应需求信息给云端服务器的对应话题下。
考虑了多种老人在家可能提出的需求,并借助关键词识别功能实现了对这些需求的几种不同关键词的识别,语音识别模块在识别到关键词后向云端服务器下的相应话题发布该关键词对应的需求信息。比如,当老人在房间1发出“喝水”“送水”“渴了”等需求时,语音识别模块会识别这三个关键词,并向服务器下的“room1_sr”话题发布信息“drink”;当老人在房间2发出“救命”“有人吗”等需求时,语音识别模块会识别这两个关键词,并向服务器下的“room2_sr”话题发布信息“help”。
选取到适合居家助老服务环境下的模型参数,采用了不同尺寸的语言模型和不同的模型输入长度,并对其识别错误率和延迟时间进行比较,得出最后的模型参数选择。
1) 模型输入长度选择。取声学模型am_7332,语言模型lmS,语音声音在50 dB左右,我们修改模型输入长度分别为128,192,256进行实验,得到结果如表1所示。
Table 1. Average error rate and delay time under different model input lengths
表1. 不同模型输入长度下的平均错误率和延迟时间
通过分析表1结果,当模型输入长度选取192时,识别率和长度为256时一样高,同时相比之下也具有更及时的响应。因此将模型输入长度设置为192。
2) 模型尺寸选择。取声学模型am_7332,语音声音在50 dB左右,模型输入长度为192,我们修改语言模型尺寸进行实验,得到结果如表2所示。
通过分析表2结果,三种尺寸识别率相差不大。因此,我们选择模型lmS部署到开发板上,这样可以占用最少的内存,同时该模型0.862的识别率也较高,足够满足识别语音的需求。
Table 2. Average error rate and delay time for different language model sizes
表2. 不同语言模型尺寸下的平均错误率和延迟时间
3) 为了使该模块根据关键词识别概率向服务器发送对应消息,需要设定一个概率限值来标识确实成功识别到关键词。取声学模型am_7332,语言模型lmS,模型输入长度为192,用不同分贝音量,在不同距离下进行实验,得到结果如表3所示。
Table 3. Recognition probabilities at different decibel volumes and distances
表3. 不同分贝音量和不同距离下的识别概率
|
||
由表3中数据可见,当声音较小时识别概率会大幅降低,当距离较远时模块也能采取到关键词但识别概率都低于0.01。因此,考虑到老人遇到紧急情况身体较虚弱声音不大,同时排除房间外的其他声音干扰,我们将概率限值设为0.1。当模块的关键词识别概率高于0.1,语音识别模块就会向服务器发送相应信息。
4. 姿态检测模块
姿态检测模块所需要使用的硬件设备主要是TI公司型号为IWR6843ISK的毫米波雷达和采用ARM架构的RK3399芯片人工智能开发平台EAIDK610开发板。在本模块中EAIDK610用于部署姿态检测模型,完成从毫米波雷达获取数据、数据预处理,推理得出姿态检测结果并通过云端服务器将报警信息发送到用户客户端的功能。
Figure 2. Overall architecture of attitude detection module
图2. 姿态检测模块总体架构
姿态检测模块的总体结构如图2所示,毫米波雷达通过发射一定频率的电磁波并利用多普勒效应检测区域内物体的运动趋势,即当范围内的物体靠近雷达时会收到频率更高的回波,远离时会受到频率更底的回波,以此计算物体与毫米波雷达之间的位置关系及物体的速度,这类计算在硬件内部即可完成,生成四元组数据。EAIDK610开发板接收毫米波雷达所发布的话题获得该四元组,并通过数据预处理之后获得固定大小的网络输入后送入轻量CNN分类网络进行推理。推理结果发送至云端服务器,并通过服务器将该结果发送至应用服务层的微信小程序,以实现提示、报警功能。
4.1. 数据集的构建与数据预处理
毫米波雷达被设定为只检测并发送范围内活动物体的四元组信息,这使得在开发板订阅毫米波雷达所发送的四元组数据并推理的时候会出现数据截断的可能。考虑到人体姿态活动是一种具有时序性之的一系列连续活动,在网络推理的过程中需要利用到序列的信息,并且神经网络数据的输入需要固定维度大小,因此在训练网络阶段和推理预处理阶段都设计了一种等待队列如下图3所示,保证在收到固定大小为的N = 90个四元组数据点之后才打包成[90, 4]的矩阵,作为网络的输入送至神经网络中进行推理,提高了网络推理的稳定性与推理结果的准确性。
Figure 3. Waiting queue
图3. 等待队列
4.2. 神经网络的结构与训练
神经网络的具体结构如下图4所示。神经网络主干由7个部分构成,四元组点云数据经过等待队列打包之后作为神经网络的输入传入至网络之中,以此经过批标准化、卷积层、池化层、Dropout层、Flatten层和全连接层后输出最终的四分类结果。
Figure 4. Neural network structure
图4. 神经网络结构
实验所使用的硬件配置为:AMD Ryzen 9 5900HS,主频3.3 GHz,8核16线程;加速显卡NVIDIA GeForce RTX3050Ti 8 GB显存。使用后端为TensorFlow-GPU v2.11.0的Keras v2.11.0作为训练模型的深度学习库。训练使用的数据集总数为24,404个,4个不同的标签各占6101个。训练开始前,先用shuffle函数对从ROSBAG中处理得到的数据集进行随机打乱,然后使用train_test_split函数对数据集切分,数据集总数的80%作为训练集,20%作为测试集。在训练过程中,将训练集的20%作为验证集以评估模型的训练效果。训练中设置学习率为0.0005,epochs设定为40,batch_size设定为128。模型训练过程中的损失函数如图5所示,在验证集上的loss为0.00897,准确率达到99.63%。
Figure 5. Loss function diagram
图5. 损失函数图
4.3. 神经网络的测试
经过训练阶段的拆分,得到的测试集分布为falling、sitting、standing、walking的标签各有1194、1286、1189、1212个。将测试数据集和标签输入到训练好的网络之中进行测试,得到预测结果如下图6所示。训练得到的神经网络在测试集上的总体准确率达到99.63%,其错报的几率不足0.5%,能够满足对身处卧室、浴室或客厅等各种场所的老人进行姿态检测的需要。
Figure 6. Test set prediction results
图6. 测试集预测结果
为了试验姿态检测模块识别准确率,还设置了七轮测试:测试者在每一轮的测试中以随机顺序做站、坐、走、摔倒四个动作,并记录下当时的识别结果,如表4所示。由表中数据可以看出,姿态检测模块的识别率较高,只发生了一次误判,该次误判可能是因为测试者测试时动作之间衔接过快。
Table 4. Recognition results of testers’ actions in different test wheels
表4. 不同测试轮中对测试者动作的识别结果
综上所述,本文设计的神经网络对于基于毫米波雷达点云数据的人体活动识别有较高的准确率,可以完成对人体姿态进行检测的任务,并与其他模块结合进行系统的测试实验。
5. 机器人联动服务模块
机器人服务功能主要分为两类。一类为语音服务,即机器人通过语音识别模块响应老人的语音指令,目前实现了机器人送水到老人所在房间、老人不需要机器人后命令其返回充电座两个功能用于展示。一类为老人异常应急服务,即在语音识别模块或姿态检测模块识别到老人出现异常状况时,能够自动导航至相应房间,送来急救药物、拍摄现场照片并上传至服务器,使家人能通过小程序及时了解老人状态并采取紧急措施。
EAIDK610微处理器平台主要负责控制机器人的逻辑行为,机器人的功能建立在导航的基础上,导航需要地图,因此首先需要在家中通过激光雷达扫描建立平面地图。成熟的建图方法众多,根据任务场景选择了在小场景下建图算力消耗较少且地图精度较高的Gmapping算法。选择Navigation Stack作为导航框架,该框架由多个导航组件构成,其中核心组件map_server用于加载建图算法创建的地图;amcl算法估计机器人在地图中的位姿;move_base用于路径规划和控制机器人的行动,其中包括了全局路径规划器(A*算法)和局部轨迹规划器(TEB算法)。这些组件共同工作,令机器人能够在复杂环境中实现自主导航。
服务机器人的部署分两步,一是创建家里的平面地图,二是手动标记各个房间的导航目标点以及机器人的充电座。首先开启激光雷达和Gmapping节点,遥控机器人在家中各个房间探索,探索完毕后保存地图。然后开启编写好的房间标记节点,通过可视化工具RVIZ依次标记各个房间的目标点,这些目标点会保存至文档中,供后续联动服务使用。至此,机器人的前期部署完成。
机器人的联动时序图如图7。
当老人发出正常的语音指令,比如“送水”时,语音识别模块能够识别出来并通过云端服务器转发指令至机器人控制模块,机器人控制模块则会发布导航目标点,使服务机器人导航到老人所在的房间;当老人希望机器人离开房间时,说一声“回去”,机器人就会收到相应指令并导航至充电座;而当老人发生意外,比如心脏不舒服,呼喊“救命”时,或者是摔倒时,语音识别模块或姿态检测模块能够及时检测到异常并上报服务器,服务器将相关消息转发至微信小程序和机器人控制模块,此时机器人控制模块收到求救指令并控制带着急救药物的机器人导航至指定房间,拍摄照片并上传至服务器,家人可以及时通过小程序看到老人的情况,以便及时采取相应措施帮助老人脱离险境。
Figure 7. Sequence diagram of robot linkage service
图7. 机器人联动服务时序图
6. 云端服务器
采用MQTT (Message Queuing Telemetry Transport)协议作为系统内部通信方式,同时把mqtt服务器和用于反向代理的nginx服务器都采用docker容器的方式部署在云服务器中。
mqtt服务器与各模块通信如图8。mqtt服务器与语音识别模块、姿态检测模块、机器人联动服务模块之间可以直接使用mqtt协议通信。
Figure 8. Schematic diagram of communication between mqtt server and various modules
图8. mqtt服务器与各模块通信示意
mqtt服务器与前端通信较为复杂。由于微信小程序必须使用wss (Secure WebSocket)协议保证通信安全,因此我们首先需要在mqtt服务器中将mqtt协议封装在ws (WebSocket)协议中(配置mqtt overwebsocket功能),由域名经过ssl认证的反向代理服务器nginx将ws协议升级为wss协议,最终完成mqtt服务器与微信小程序的通信。
7. 前端交互模块
前端交互模块基于微信小程序实现了创建/删除房间、查看房间状态、调整房间状态、查看历史记录、查看现场等功能,如图9所示。
Figure 9. Front end function display
图9. 前端功能展示
8. 系统测试
在测试之前,需要先对两个实验房间进行部署,其中语音识别模块在两个房间都有部署,姿态检测模块只部署在房间1,机器人的充电基座(起始出发点)设置在走廊,各模块实验场景部署如图10所示。
Figure 10. Experimental scene diagram
图10. 实验场景图
Figure 11. The robot arrives at Room 2 and delivers water to the target navigation point
图11. 机器人到达房间2目标导航点送水
1) 语音识别与机器人联动功能
进行语音服务需求的测试,测试者坐在房间2说“喝水”,语音识别模块识别到关键词,并将对应需求发到云端服务器的“room2_sr”话题下。机器人订阅到信息后,导航至房间2为测试者送水。机器人到达目标导航点,并且小程序收到信息,如图11所示。
进行异常情况的语音需求测试,测试者在房间1呼喊“救命”,语音识别模块识别到关键词,并将对应需求发到云端服务器的“room1_sr”话题下。机器人订阅到信息后,就会导航到房间1为测试者送药,并将目标导航点处的照片通过云端服务器发送到小程序。在小程序中长按房间1卡片,点击“查看现场”,可以看到现场照片,如图12所示。
Figure 12. Testers shout “help”, robots deliver medicine and take photos on site
图12. 测试者呼喊“救命”,机器人送药以及现场拍照
2) 姿态检测与机器人联动功能
主要测试姿态检测与机器人联动的功能,测试方法为在实验场地部署毫米波雷达和载有姿态检测模块的EAIDK610开发板,测试者在实验场地做走、站、坐、摔倒四个动作,观察系统是否正确识别到姿态信息并将对应信息发送到云端服务器,以及机器人是否及时、准确地去到对应房间的目标导航点。
前期部署完成后,当机器人订阅到摔倒(“fall”)信息时,机器人联动服务模块便会控制携带药品的机器人到房间1的目标导航点为摔倒的测试者送药,并将警报信息和现场照片通过云端服务器发送到小程序显示,如图13所示。
Figure 13. Detecting a person’s fall and issuing an alarm through millimeter wave radar
图13. 通过毫米波雷达检测到人摔倒并警报
通过以上实验测试,整个系统能较好的实现独居老人居家监护功能。
9. 结束语
针对社会老龄化程度的不断加深的背景,本文提出并设计实现了一种面向独居老人的智能居家监护系统,基于云–边–端架构来设计系统的总体功能框架,包括了云端服务器,部署到端设备上的语音识别、姿态检测、机器人联动服务、前端交互等功能模块,并进行了测试验证。