APP下载

基于YOLOv5的空巢老人跌倒检测系统的设计与研究

2023-02-12廖义奎

软件工程 2023年2期
关键词:视频流短信服务器

徐 威,廖义奎

(广西民族大学电子信息学院,广西 南宁 530006)

1 引言(Introduction)

我国人口老龄化趋势逐渐明显,如何保障老年人的身体健康和人身安全成为不可忽视的社会问题[1]。老年人身体素质较差,一旦发生跌倒行为而未能及时就医,就很有可能会导致终身残疾,甚至危及生命,给老人的家庭带来不可磨灭巨大的负担。随着人工智能技术的兴起,各种智能化设备层出不穷,比如自动驾驶、智能人脸识别、智能导航,不仅给人们带来了极大的便利,而且大大节省了人力成本。目前,市面上主流的跌倒检测系统有以下几种:(1)基于可穿戴方式的老人跌倒预警系统设计[2];(2)基于视觉识别的人体跌倒检测研究[3]。由于穿戴设备的监测需要的设备比较多,穿戴不便,所以不易推广。本文提出的基于计算机视觉的监控系统具有较大的应用优势,只需要配置监控设备就能够监控记录独居老人的日常生活,并将实时视频流推送到SRS流媒体服务器中,然后本地服务端拉取SRS流媒体服务器上的视频流,通过目标检测算法进行识别并把结果返回给本地客户端进行显示。若判定为跌倒状态,系统会启动短信进程,准备发送信息给监护人。如果在设置的阈值时间内,老人自行起来或者有人搀扶起来,系统会重新识别老人为正常状态,若此时信息未发送,程序会终止短信进程。通过多次实验发现,该模型能够准确检测独居老人的跌倒行为,可以满足对独居老人行为监测的需求。

2 独居老人跌倒检测系统研究(Process of fall detection system for empty-nesters)

2.1 系统架构流程图

整个系统主要由四个部分组成,分别是监控摄像头、SRS流媒体服务器、GPU服务器、本地客服端。监控摄像头推送实时视频流到SRS服务器中,SRS流媒体服务器可以查看和管理视频流,GPU服务器则负责拉取视频流进行识别、分析,并将识别后的结果发送给本地客户端进行显示。rtmp是实时消息传输协议,视频流都是基于此协议进行传输的。具体流程如图1所示。

图1 跌倒检测系统架构流程图Fig.1 Architecture flow chart of fall detection system

2.2 SRS流媒体服务器的搭建

流媒体服务器是流媒体应用的核心系统,是流媒体应用系统的基础,也是系统最重要的组成部分之一[4],而SRS流媒体服务器是由国人开发且开源的一款用于视频直播的服务器,作为后起之秀,因其简洁的代码及强大的性能,备受IT工作者的青睐。SRS流媒体服务器支持多种协议的传输方式。开发人员可以将视频文件或者监控设备采集到的视频流推送到流媒体上。流媒体接收到推流视频后,可以通过控制台进行处理和管理,非常高效。SRS流媒体需要在Linux环境下运行,所以需要一台Linux服务器,通过git clone的方式拉取SRS开源代码,本文使用的是SRS5.0版本。下载SRS开源代码后,进入srs/trunk文件目录下,输入./configure &&make进行编译,然后进行SRS的相关配置,可以参考官方文档,里面有详细的配置说明。最后输入./objs/srs-conf/srs.conf启动SRS服务器,至此SRS搭建完毕,可以通过手机ip摄像头进行推流测试。如图2所示为SRS客户端推流信息。

图2 SRS客户端Fig.2 SRS client

使用手机代替监控设备进行实时推流,推流到服务器上的视频流可以在SRS进行预览,如图3所示,GPU服务器可以通过SRS提供的拉流地址对视频流进行识别处理,然后显示在客户端。

图3 手机推流Fig.3 Mobile streaming

2.3 GPU服务器和本地客服端的设计

本系统采用本地GPU服务器运行项目代码,本地电脑显卡版本是Geforce GTX 950M,GPU内存为8 GB,下载对应的Pytorch及cuda版本。通过GPU对图像进行并行运算,可以使运行速度大大加快,视频流是一个实时的图像,只有实现速度和准确率的同时提升,才能保证系统正常运行。搭建好本地GPU环境后,再设计客户端,客服端是基于PyQt5(开发可视化界面的Python库)设计的。PyQt5作为Python众多模块中的一个,功能多样,有多种图形化界面的库及模块,同时它也支持在各种主流操作系统上运行。如图4所示为系统客服端界面,左边有跌倒检测框及识别结果显示框,右边是视频的播放界面,右下角有三个按钮。点击打开监控按钮可以显示监控实时画面,关闭监控则停止播放画面,点击跌倒检测可以对监控视频流进行识别,并在播放界面显示识别后的监控画面,识别结果栏会打印当前时间及识别结果。

图4 检测系统界面Fig.4 Detection system interface

3 YOLOv5简介(A brief introduction to YOLOv5)

YOLO(You Only Look Once)是REDMON等[5]提出的目标检测算法,作为单阶段(one-stage)的代表算法,目前YOLO已经更新到了YOLOv5。相比于Two stage目标检测算法,YOLO是直接从网络中提取特征,并预测物体的类别和具体位置,一步到位。此后,REDMON在此基础上提出了YOLO9000[6]等检测算法,使系统的检测性能得到进一步提升。在YOLOv3的基础上继续改进升级,并最终得到YOLOv4。YOLOv4网络结构主要由CSPDarknet53特征提取网、SPP(空间金字塔池化)模块、PANet特征融合模块、Yolo Head分类器组成[7-8]。YOLOv5算法使用CSPDarknet(跨阶段局部网络)作为特征提取网络,从输入图像中提取目标信息。如今,YOLOv5无论是在准确率还是速度上,都已经达到较好的效果。所以,本文采用YOLOv5训练模型,并将其应用在跌倒检测系统中。结合YOLOv5算法构建跌倒检测系统,具体检测流程如图5所示。

图5 YOLOv5算法检测流程图Fig.5 Flow chart of YOLOv5 algorithm detection

4 数据采集和训练(Collection and training of data set)

4.1 数据集采集

跌倒检测技术需要大量数据集的支持,而市面上的跌倒数据集还鲜有公开的,所以本文通过自建数据集训练模型,数据集主要来源为通过拍摄日常生活中和采取爬虫技术爬取网站上的老年人跌倒图片,将跌倒视频分成一帧帧的图片,最终得到7,000 张图片,其中跌倒图片和正常状态图片的比例为1:1.8。使用标注软件labelImg对数据集进行标注,图片标注过程如图6所示。对7,000 张图片进行标注完成之后,会生成7,000 个xml文件,xml文件记录了标注框的类别及位置信息。

图6 图片标注Fig.6 Image annotation

利用写好的python脚本将7,000 个xml文件转换成txt文件,YOLOv5训练所需要的文件格式类型是txt,并将数据集划分为训练集和验证集,训练集和验证集的比例为1:4。具体数据集分配情况如表1所示。

表1 数据集分配Tab.1 Data set allocation(单位:张)

4.2 评价指标

本次试验采用查全率(Recall)、精确率(Precision)、所有类别平均值(mAP)衡量模型的好坏。我们假设up是正样本,fall是负样本,如表2所示。在信息检索领域,精确率指返回文档中相关文档所占的比例,查全率指返回的相关文档占所有相关文档的比例[9]。TP表示实际是正样本预测是正样本,FP表示实际是负样本预测是正样本,FN表示实际是正样本预测是负样本,TN表示实际是负样本预测也是负样本。精确率和查全率的具体计算如公式(1)和公式(2)所示。

表2 精确率和查全率Tab.2 Precision and recall

而实际训练过程中,精确度和查全率是成反比的。随着精确度的提高,查全率会不断下降,这时必须权衡两者之间的关系,才能得到准确、优秀的网络模型。

4.3 模型的训练

本次实验在Pytorch深度学习框架下进行,训练过程使用本地GPU服务器[10],YOLOv5有四个模型,分别是YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x。本文采用的是YOLOv5s的模型,因为此模型速度最快,模型量级较小,准确率较高。将模型训练的迭代次数设置为50 次,开始训练。经过一天的时间,最终训练得到跌倒检测模型权重文件。如图7所示,模型训练到40 次以后开始慢慢收敛,其中Box、Objectness、Classification已经降到了较低的水平。其中,Box是bounding box(边界框)的定位损失,也就是模型预测框与真实框的差值,差值越小,说明模型预测框越准;Objectness为置信度损失,损失越小,说明目标检测准确度越高;Classification为分类损失,数值越小,说明分类准确度越高。总的损失函数就是计算三者之和,所以损失函数的变化就是Box、Objectness和Classification的变化。

图7 损失函数变化Fig.7 Loss function change

如图8所示,Precision和Recall在逐渐上升,达到了比较理想的效果,将精确率和查全率作为x轴和y轴,并作图得到围成的面积,即mAP,如图8(c)所示,其中map最大值为94.23%。

图8 评价指标变化图Fig.8 Change chart of evaluation indicators

5 跌倒检测系统的实现(Fall detection system implementation)

将训练所得的模型文件放在源代码下的weights文件夹下,接下来进行跌倒检测系统的测试与实现。本系统需要配置一个监控设备用于拍摄实时画面,并将监控画面的视频流推流到SRS流媒体服务器中,通过客户端可视化界面显示流媒体中的视频流,这时点击跌倒检测,开始对视频流进行识别。由于实时监控跌倒的情况不多,因此难以实现测试的效果,所有本次测试采用网上下载的视频文件进行无限推流,并发送至流媒体服务器上,后续部署时可以将监控视频流推送到流媒体上。本地GPU服务器运行项目代码,客户端应用弹出显示主界面,打开监控,显示视频。原始视频流如图9所示。

图9 原始视频流Fig.9 Original video stream

打开跌倒检测系统可以查看识别后的视频流,运行界面如图10所示。从图10中可以看到,画面中有老人摔跤时,跌倒检测系统能够准确地检测出来,并将结果显示在左边栏框内,这时系统会根据老年人的跌倒情况进行下一步处理。

图10 识别后的视频流Fig.10 Recognized video stream

再好的模型也会出现误测的情况,这就会导致某一帧图片本来是up却被识别为fall,这时系统一旦检测到fall就会发送短信,导致信息频繁发送。所以,本文通过设置源代码中的阈值解决误判的情况,只有当连续检测到视频帧的图片均为fall,并达到系统给定的阈值时,系统才会判断有人摔跤,否则视为误测。如图11所示,系统检测到有人真实摔跤时,便会提示在5 s内发送短信给监护人。

图11 准备发送短信Fig.11 Preparation for sending SMS

当检测到老人跌倒时,跌倒检测系统则会开启发短信进程,5 s后开始发送信息。如图12所示,监护人收到推送短信。

图12 监护人收到短信Fig.12 The guardian's receiving of the text message

有时,系统检测到老人确实是真实跌倒,但并不是每次摔跤都比较严重或者有人立即将老人搀扶起来,如果此时短信进程开启,但是还未发送,系统会终止进程,停止发送信息。除了以上实验,本文还进行了一些其他情况下的跌倒和起立的实验。跌倒行为包括绊倒、滑倒、晕倒、撞倒,也采集了可能发生误判的类似跑、坐下、走路、跳舞等较为激烈的正常生活行为[11]。针对以上情况进行实验,本文对105 个视频文件进行测试实验,其中每个状态有15 个视频,分别统计预测为up和fall的视频次数及发送短信的次数,实验结果见表3。

表3 实验结果Tab.3 Experimental result(单位:个)

由表3数据可知,系统对于跑、走路、跳舞的视频都能正常识别为up且均未发送短信,符合预期效果。只针对坐下的状态,系统有时会将坐在地上的某些时刻识别为fall,所以导致不该发短信的时候发送短信,这也是后面需要改进的地方。对于实际摔倒的视频文件,基本能识别出晕倒、绊倒、撞倒的情况,并且成功发送短信提醒监护人。所以105 个视频只有2 个视频未达到预期效果,故短信发送成功率为98.10%。由此可见,系统能达到很好的预警效果。

6 结论(Conclusion)

基于YOLOv5的空巢老人跌倒检测系统的设计与研究,通过自建数据集对模型进行训练得到训练权重文件,并对系统的架构进行搭建,最终构建空巢老人跌倒检测系统。本系统设计的初衷是为空巢老人提供一份安全保障,让在外打工的亲人能够踏实工作。经过实验测试和分析后,证明基于YOLOv5的空巢老人跌倒检测系统,无论是准确率还是实时性都可以达到较好的效果,有进一步研究的价值。本系统不足之处在于,搭建SRS流媒体服务器的Linux系统的性能相对较差,真实监控画面时间和在客户端上看到的时间存在一定延时问题。后续部署可以更换更好的Linux服务器。此外,算法的性能可能在人多的应用场景或者人群应用场景中的识别效果较差,对卧倒及坐下状态会出现误判的情况,有待进一步研究完善。但是,针对空巢老人独居在家的应用场景,系统对日常生活中的跌倒识别准确率较高,基本能够满足对独居老人行为监测的需求。

猜你喜欢

视频流短信服务器
边缘实时视频流分析系统配置动态调整算法研究
基于视频流传输中的拥塞控制研究
通信控制服务器(CCS)维护终端的设计与实现
道歉短信
代发短信
铁路货场智能大门集装箱全景图像采集方法研究
中国服务器市场份额出炉
得形忘意的服务器标准
美国视频流市场首现饱和征兆
计算机网络安全服务器入侵与防御