居家老人姿态检测方法、系统、存储介质、设备及应用

文档序号:26748545发布日期:2021-09-25 01:41阅读:242来源:国知局
居家老人姿态检测方法、系统、存储介质、设备及应用

1.本发明属于智能家居技术领域,尤其涉及一种居家老人姿态检测方法、系统、存储介质、设备及应用。


背景技术:

2.适量的运动能提高mci老人的认知功能,改善认知功能;所以适量的运动 对老人来说很重要。并且老人在久坐的情况下会导致心脏泵衰弱、心脏功能减 退、血液循环变慢,从而引起肢体缺血、大脑缺氧、智力减退等。并且会引发 供氧不足,肌肉功能受到影响,致使肌肉松弛、萎缩、僵硬、酸痛,甚至行动 困难:
[0003][0004]
而在久站后也会出现很多问题,比如长期站立会增加患心血管疾病的风险,长久站立不还会加速疲 劳和倦怠,同时还会增加各种脚部和腿部问题的风险。这种疲劳主要体现在颈部、腿部、以及关节处。对 骨骼,关节,肌腱,肌肉和韧带造成压力。腿部肌肉变得静止僵硬。引起颈部和腰部背部不适、脚后跟与 脚踝出疼痛等。
[0005]
随着人工智能的日渐发展,出现越来越多的老人姿态分析研究,这些研究帮助着老人生活的方方面 面,而在老人姿态识别这一部分,大部分是基于穿戴式设备的,穿戴式设备导致的一个很大问题是便携性, 也会存在忘戴的种种情况。近两年图像处理技术发展的越来越快,基于图像处理的老人姿态检测也有很多 了,但大部分都是基于rgb图像的姿态检测,这个对老人的隐私不能很好的保护,随着深度摄像头的相 继推出,基于深度图像的姿态检测也越发得到重视。
[0006]
随着老年人身体能力的下降以及养老机构的日益发展,如何更加方便的了解安排老人是一个很值得 思考的问题。因为机构内肯定是老人数量远远高于服务老人的数量,并且由于老龄化问题的日益凸显,这 个矛盾会越来越深,医护人员如何随时随地的掌握老人状态呢,而那些独居老人的情况更为严重,他们收 到关注的时间更加稀少,如何能够更好的保证老人健康呢,这就需要用上现代计算机技术,比如可穿戴设 备,雷达,摄像头等等来获取到老人状态,这样做的好处就是可以集中查看老人状态,不用一个一个跑去 老人家里查看。而其中的可穿戴式设备在很多情况下不是很方便,相对来说感知很强,舒适性方面也是一 个大问题,老人忘带等等问题。而摄像头就没有这些麻烦,老人不用在意摄像头,正常情况也不会干扰老 人的生活。
[0007]
但是摄像头又引入了另一个问题,就是老人的隐私问题,目前rgb彩色摄像头可以获取的信息太多 了,泄露的隐私很多,如果老人稍微注重个人隐私的话,是不能够接受自己的个人生活被直播出去的。但 深度摄像头就可以很好的保护老人的隐私,它拍摄的画面所包含的信息很少,暴露的隐私很少,图片中具 体物体是无法识别的。
[0008]
国外在行为识别和姿态识别方面有很多研究,这两个个方面都可以实现对老人行动状态的掌握,在 行为识别这一方面,现有技术1将harris角点检测算子扩展到视频行为识别中。该算法首先提取了运动目 标轮廓,然后对运动目标提取了3d

harris兴趣点,用于
人体行为识别。另一种思路是通过跟踪视频帧兴 趣点的轨迹来进行行为识别。基于这样的思路,而姿态识别,现有技术2提出了一种使用成对的色框和深 度图的可靠的人体检测方法。在实验过程中使用了从kinect v2视觉传感器接收到的彩色图像和深度图。 在检测实验的第一步中,使用hog描述符处理了整个帧,并接收了感兴趣的区域。然后,在第二步中, 确定到该区域的近似距离,并将其值与该距离上可能的人类身高和宽度值的范围进行比较。现有技术3提 出了一种基于hog特征的人体检测方法。该方法使用深度图代替可见光图像。通过全面的距离信息分析, 可以获得有关场景的其他信息。在实验过程中,使用了从kinect v2视觉传感器接收到的深度图。在检测 实验的第一步中,使用预处理噪声冗余滤波器处理了整个深度图框架。然后在第二步中,将深度切成包含 一定距离点的图层。在那一步之后,在每个层上进行分割,并将分段发送到预训练的hog分类器。而现 有技术4通过使用kinect激光扫描仪的lidar仿真以及yolo神经网络架构的特定实例,通过对双腿进 行计数来检测人的解决方案。
[0009]
近年来,有很多针对深度图像进行人体姿态识别的研究,其中现有技术5的基于深度图像模态信息 的时空兴趣点特征和基于关节模态信息的人体关节点位置特征,分别表征人体动作。采用不同距离度量公 式的最近邻分类器对这3种不同模态特征表示的预测样本进行集成决策分类。而现有技术6基于elm进 行姿态分类,在特征提取阶段研究深度图像序列特征提取算法dmm

lbp算法的基础上,针对原始dmm 忽视动作时序信息的问题,结合dstip

pdh算法生成wdmm。然后在wdmm上提取了lbp特征作 为深度图像的特征。现有技术7通过结合rgb图像和深度图像数据来改进时空兴趣点特征,然后通过svm 分类器进行训练和测试,最后可以获得91%的准确率。
[0010]
在深度图像骨骼化方面,现有技术8针对现有复杂背景下动作识别算法实时性不好、识别率不高等 问题,提出一种改进的kinect动作识别算法。通过kinect的骨骼追踪技术获得被测者的关节点三维坐标, 首先进行平均值滤波,然后提取角度特征作为模板匹配的依据,通过相似度函数来确定识别结果。通过搭 建体感控制机器人系统验证了算法的可行性和稳定性。
[0011]
现有技术9等人在2019年提出,针对单个kinect深度图像传感器在人机交互时的骨骼自遮挡所导致 的识别精度问题,提出了基于姿态角的双ki

nect数据融合技术,同时依据kinect sdk构建标准姿势特征 向量集合,根据骨骼活动度分配对应骨骼贡献度大小,进而计算融合后的姿势特征向量集合与标准姿势特 征向量集合的余弦和,实时反馈两者姿势的匹配度,实现人体姿势的识别。
[0012]
还有识别彩色图获得骨架图进行姿态识别的,也有通过在固定场景中进行人体和背景分离,然后进 行姿态识别。在深度图方面有基于深度图像信息的人体部位识别方法。
[0013]
然而,目前已有的姿态识别大部分都是基于穿戴式和rgb图形的,而有的基于深度图像的姿态识别 研究,都是针对实验数据,通过摆拍获取到的深度图进行姿态识别研究的。
[0014]
通过上述分析,现有技术存在的问题及缺陷为:
[0015]
(1)现有的人体姿态识别技术识别结果不准确;
[0016]
(2)目前已有的姿态识别大部分都是基于穿戴式和rgb图形的,数据安全性不高,容易侵犯隐私;
[0017]
(3)基于深度图像的姿态识别研究,都是针对实验数据,通过摆拍获取到的深度图进行姿态识别研 究的,不能应用于现实环境。
[0018]
解决以上问题及缺陷的难度为:
[0019]
1.深度图像的骨骼化。选用什么模型,怎么进行训练,数据的选取等等都是需要好好考虑的问题, 模型选取的重要性显而易见,不同的模型带来的差异是非常大的。而训练方式只要是指训练设备,训练参 数,迭代次数等等,而数据的选取也很大程度决定了模型的精确度,数据如果选取的单一,那效果肯定会 大打折扣。
[0020]
2.关键点转3d坐标,如何通过深度信息,结合相机内参,将原有的像素点2d坐标转化成实际场景 的3d坐标。这一步决定了前端展示的效果。
[0021]
3.系统界面的可视化,界面美观、交互友好会获得更多的支持。另外,清晰合理的信息展示、舒适 简易的操作流程,可以极大的节省用户的时间,提高用户的工作效率。因此,如何实现一个用户友好的可 视化界面是必须要解决的关键问题之一
[0022]
4.姿态数据得选取,因为针对得是老人生活得图像,不是专门摆拍出的姿态,所以需要在好几万张 图片中选择相对来说更有代表性的图片作为训练集。因为生活中的姿态有些情况是模糊不清的,图片数据 选择的好与否直接决定了姿态识别模型的精确度。
[0023]
5.骨架图的特征提取,对于一个分类器而言,特征取得好与不好,最后得识别效果会有非常大得差 异,所以特征提取是一个非常关键得问题。
[0024]
6.姿态识别。姿态识别的准确度决定了系统整体的可行性,虽然识别的姿态解决只是作为一个辅助 医护人员的功能,但优秀的姿态识别模型,可以很好的减轻工作人员的负担。


技术实现要素:

[0025]
针对现有技术存在的问题,本发明提供了一种居家老人姿态检测方法、系统、存储介质、设备及应用。
[0026]
本发明是这样实现的,一种居家老人姿态检测方法,所述居家老人姿态检测方法包括:
[0027]
利用realsense镜头采集老人居家环境数据,并将采集的数据发布在云端;下载云端数据进行深度图像 解压得到伪彩色图像,并放入指定位置进行处理;
[0028]
读取处理的相关图像,进行人体骨骼化识别得到人体3d骨架图;
[0029]
基于人体骨骼化识别结果通过特征提取、姿态匹配,获取老人的具体姿态;
[0030]
对得到的人体3d骨架图以及老人的具体姿态进行显示;并判断老人的同一姿态维持时间是否超出预设 阈值,若超出,则进行报警提醒。
[0031]
进一步,所述读取处理的相关图像,进行人体骨骼化识别得到人体3d骨架图包括:基于处理的相关图 像利用人体骨骼化识别模型进行识别,得到heatmap和paf变量,通过得到的heatmap和paf变量进行人体关节 点连接,得到2d的人体关键点坐标;
[0032]
结合深度图的深度信息以及相机内参,对得到的2d人体关键点坐标进行坐标变换,得到重建的3d坐标; 对重建的3d坐标进行旋转即可得到的人体3d骨架图。
[0033]
进一步,所述读取处理的相关图像,进行人体骨骼化识别得到人体3d骨架图包括:
[0034]
(1)读取处理后的相关图像,筛选图像中有老人存在的彩色图及其对应伪彩色图;
并将筛选的相关 数据作为训练集;
[0035]
(2)利用openpose模型对彩色图进行识别,得到图像关键点标签以及heatmap和paf作为标签的图像数 据;
[0036]
(3)构建自下而上基于openpose网络的人体骨骼化识别模型,并利用训练集对构建的人体骨骼化识别 模型进行训练,得到最优的人体骨骼化识别模型;
[0037]
(4)利用测试集对最优的人体骨骼化识别模型进行测试,利用测试好的人体骨骼化识别模型进行人 体骨骼化识别,得到人体骨骼关节点;
[0038]
(5)对得到的人体骨骼关节点进行连接;同时基于得到关键点坐标以及深度信息结合摄像头内参获 取三维关节点信息,并将人体骨架图的3d坐标进行旋转得到正向人体3d骨架图。
[0039]
进一步,步骤(5)中,所述将人体骨架图的3d坐标进行旋转包括:计算人体中臀和脖子之间的中点 作为人体的中心点,将中心点平移到原点,围绕得到的原点进行旋转。
[0040]
进一步,所述围绕得到的原点进行旋转包括:将脊柱即中臀利用x轴逆时针旋转公式绕x轴转到x0z平 面;将脊柱利用y轴逆时针旋转公式绕y轴进行旋转;将左右肩构成的向量利用z轴逆时针旋转公式旋转到 y0z平面中;
[0041]
所述x轴逆时针旋转公式如下:
[0042][0043]
所述y轴逆时针旋转公式如下:
[0044][0045]
所述z轴逆时针旋转公式如下:
[0046][0047]
进一步,所述基于人体骨骼化识别结果通过特征提取、姿态匹配,获取老人的具体姿态包括:获取人 体3d骨骼化坐标数据,并基于获取的人体3d骨骼化坐标数据进行特征计算;并将计算好的特征数据组成 一个有序数组,利用基于随机森林的姿态识别模型进行人体姿态识别,得到姿态识别结果;
[0048]
所述基于获取的人体3d骨骼化坐标数据进行特征计算包括:
[0049]
基于获取的人体3d骨骼化坐标数据计算7种特征值;
[0050]
所述7种特征值包括:
[0051]
前屈角即脖子和鼻子组成的向量以及脖子和中臀组成的向量的夹角;
[0052]
脖子和左臀、左臀和左膝盖组成的角以及脖子和右臀、右臀和右膝盖组成的角;
[0053]
肩部角即脖子和左肩、左肩和左手肘组成的角以及脖子和右肩,右肩和右手肘组成的角;
[0054]
膝盖角即右臀和右膝盖、右脚踝和右膝盖组成的角以及左臀和左膝盖、左脚踝和左膝盖组成的角。
[0055]
本发明的另一目的在于提供一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器存储 有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如下步骤:
[0056]
利用realsense镜头采集老人居家环境数据,并将采集的数据发布在云端;下载云端数据进行深度图像 解压得到伪彩色图像,并放入指定位置进行处理;
[0057]
读取处理的相关图像,进行人体骨骼化识别得到人体3d骨架图;
[0058]
基于人体骨骼化识别结果通过特征提取、姿态匹配,获取老人的具体姿态;
[0059]
对得到的人体3d骨架图以及老人的具体姿态进行显示;并判断老人的同一姿态维持时间是否超出预 设阈值,若超出,则进行报警提醒。
[0060]
本发明的另一目的在于提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器 执行时,使得所述处理器执行如下步骤:
[0061]
利用realsense镜头采集老人居家环境数据,并将采集的数据发布在云端;下载云端数据进行深度图像 解压得到伪彩色图像,并放入指定位置进行处理;
[0062]
读取处理的相关图像,进行人体骨骼化识别得到人体3d骨架图;
[0063]
基于人体骨骼化识别结果通过特征提取、姿态匹配,获取老人的具体姿态;
[0064]
对得到的人体3d骨架图以及老人的具体姿态进行显示;并判断老人的同一姿态维持时间是否超出预设 阈值,若超出,则进行报警提醒。
[0065]
本发明的另一目的在于提供一种实施所述居家老人姿态检测方法的居家老人姿态检测系统,所述居家 老人姿态检测系统包括:
[0066]
图像采集模块,包括调用单元、节点发布单元、数据接收与存储单元;用于利用realsense镜头进行老 人居家环境数据采集,并对采集的数据进行发布、处理;
[0067]
人体骨骼化模块,包括vgg特征提取单元、关键点检测单元、paf检测单元、关键点连接单元、坐标 点转换单元以及旋转单元;用于基于采集的图像通过特征提取、关键点检测、paf检测、关键点连接、骨 骼坐标点转换为3d点、3d骨骼点旋转得到人体3d骨架图;
[0068]
姿态识别模块,包括特征提取单元、姿态匹配单元;用于基于提取的人体骨骼图通过特征提取、姿态 匹配进行人体姿态识别;
[0069]
ui模块,包括显示单元以及报警提醒单元;用于显示人体3d骨架图以及人体姿态识别结果;同时用于 进行报警提醒。
[0070]
本发明的另一目的在于提供一种智能家居控制终端,所述智能家居控制终端应用实现所述的居家老人 姿态检测方法。
[0071]
结合上述的所有技术方案,本发明所具备的优点及积极效果为:本发明提供了一个基于深度图像的居 家老人姿态识别系统,家属或者医护人员可以看到老人当前姿态,并且系统可以对老人姿态给出提示,可 以很好的减轻医护人员的工作量,更加的方便医护人员照看老人。
附图说明
[0072]
为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图做简单的介 绍,显而易见地,下面所描述的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动的前提下还可以根据这些附图获得其他的附图。
[0073]
图1是本发明实施例提供的居家老人姿态检测系统架构图。
[0074]
图2是本发明实施例提供的居家老人姿态检测系统结构示意图;
[0075]
图中:1、图像采集模块;2、人体骨骼化模块;3、姿态检测模块;4、ui模块。
[0076]
图3是本发明实施例提供的居家老人姿态检测方法流程图。
[0077]
图4是本发明实施例提供的人体骨骼化模型识别流程图。
[0078]
图5是本发明实施例提供的姿态识别流程图。
[0079]
图6是本发明实施例提供的后端运行流程图。
[0080]
图7是本发明实施例提供的报警提示流程图。
[0081]
图8是本发明实施例提供的三种图像示例图。
[0082]
图9是本发明实施例提供的有人和没有人的图片对比图。
[0083]
图10是本发明实施例提供的openpose识别结果示例图。
[0084]
图11是本发明实施例提供的vgg前十层示意图。
[0085]
图12是本发明实施例提供的模型识别样例图。
[0086]
图13是本发明实施例提供的模型识别样例图。
[0087]
图14是本发明实施例提供的迭代1万次样例图。
[0088]
图15是本发明实施例提供的迭代2万次样例图。
[0089]
图16是本发明实施例提供的人体关键点id示意图。
[0090]
图17是本发明实施例提供的旋转前的3d骨架图。
[0091]
图18是本发明实施例提供的旋转后的3d骨架图。
具体实施方式
[0092]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说 明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0093]
针对现有技术存在的问题,本发明提供了一种居家老人姿态检测方法、系统、存储介质、设备及应用, 下面结合附图对本发明作详细的描述。
[0094]
如图1

图2所示,本发明实施例提供的居家老人姿态检测系统包括:
[0095]
图像采集模块1、人体骨骼化模块2、姿态检测模块3、ui模块4;
[0096]
图像采集模块1,包括调用单元、节点发布单元、数据接收与存储单元;用于利用realsense镜头进行 老人居家环境数据采集,并对采集的数据进行发布、处理;
[0097]
人体骨骼化模块2,包括vgg特征提取单元、关键点检测单元、paf检测单元、关键点连接单元、坐 标点转换单元以及旋转单元;用于基于采集的图像通过特征提取、关键点检测、paf检测、关键点连接、 骨骼坐标点转换为3d点、3d骨骼点旋转得到人体3d骨架图;
[0098]
姿态识别模块3,包括特征提取单元、姿态匹配单元;用于基于提取的人体骨骼图
通过特征提取、姿 态匹配进行人体姿态识别;
[0099]
ui模块4,包括显示单元以及报警提醒单元;用于显示人体3d骨架图以及人体姿态识别结果;同时用 于进行报警提醒。
[0100]
如图3所示,本发明实施例提供的居家老人姿态检测方法包括以下步骤:
[0101]
s101,利用realsense镜头采集老人居家环境数据,并将采集的数据发布在云端;下载云端数据进行深 度图像解压得到伪彩色图像,并放入指定位置进行处理;
[0102]
s102,读取处理的相关图像,进行人体骨骼化识别得到人体3d骨架图;
[0103]
s103,基于人体骨骼化识别结果通过特征提取、姿态匹配,获取老人的具体姿态;
[0104]
s104,对得到的人体3d骨架图以及老人的具体姿态进行显示;并判断老人的同一姿态维持时间是否超 出预设阈值,若超出,则进行报警提醒。
[0105]
如图4所示,步骤s102中,本发明实施例提供的读取处理的相关图像,进行人体骨骼化识别得到人体 3d骨架图包括:
[0106]
基于处理的相关图像利用人体骨骼化识别模型进行识别,得到heatmap和paf变量,通过得到的heatmap 和paf变量进行人体关节点连接,得到2d的人体关键点坐标;
[0107]
结合深度图的深度信息以及相机内参,对得到的2d人体关键点坐标进行坐标变换,得到重建的3d坐标; 对重建的3d坐标进行旋转即可得到的人体3d骨架图。
[0108]
步骤s102中,本发明实施例提供的读取处理的相关图像,进行人体骨骼化识别得到人体3d骨架图包括:
[0109]
(1)读取处理后的相关图像,筛选图像中有老人存在的彩色图及其对应伪彩色图;并将筛选的相关 数据作为训练集;
[0110]
(2)利用openpose模型对彩色图进行识别,得到图像关键点标签以及heatmap和paf作为标签的图像数 据;
[0111]
(3)构建自下而上基于openpose网络的人体骨骼化识别模型,并利用训练集对构建的人体骨骼化识别 模型进行训练,得到最优的人体骨骼化识别模型;
[0112]
(4)利用测试集对最优的人体骨骼化识别模型进行测试,利用测试好的人体骨骼化识别模型进行人 体骨骼化识别,得到人体骨骼关节点;
[0113]
(5)对得到的人体骨骼关节点进行连接;同时基于得到关键点坐标以及深度信息结合摄像头内参获 取三维关节点信息,并将人体骨架图的3d坐标进行旋转得到正向人体3d骨架图。
[0114]
步骤(5)中,本发明实施例提供的将人体骨架图的3d坐标进行旋转包括:
[0115]
计算人体中臀和脖子之间的中点作为人体的中心点,将中心点平移到原点,围绕得到的原点进行旋转;
[0116]
所述围绕得到的原点进行旋转包括:
[0117]
将脊柱即中臀利用x轴逆时针旋转公式绕x轴转到x0z平面;将脊柱利用y轴逆时针旋转公式绕y轴进行 旋转;将左右肩构成的向量利用z轴逆时针旋转公式旋转到y0z平面中;
[0118]
所述x轴逆时针旋转公式如下:
[0119][0120]
所述y轴逆时针旋转公式如下:
[0121][0122]
所述z轴逆时针旋转公式如下:
[0123][0124]
如图5所示,本发明实施例提供的基于人体骨骼化识别结果通过特征提取、姿态匹配,获取老人的具 体姿态包括:
[0125]
获取人体3d骨骼化坐标数据,并基于获取的人体3d骨骼化坐标数据进行特征计算;并将计算好的特 征数据组成一个有序数组,利用基于随机森林的姿态识别模型进行人体姿态识别,得到姿态识别结果。
[0126]
本发明实施例提供的基于获取的人体3d骨骼化坐标数据进行特征计算包括:
[0127]
基于获取的人体3d骨骼化坐标数据计算7种特征值;
[0128]
所述7种特征值包括:
[0129]
前屈角即脖子和鼻子组成的向量以及脖子和中臀组成的向量的夹角;
[0130]
脖子和左臀、左臀和左膝盖组成的角以及脖子和右臀、右臀和右膝盖组成的角;
[0131]
肩部角即脖子和左肩、左肩和左手肘组成的角以及脖子和右肩,右肩和右手肘组成的角;
[0132]
膝盖角即右臀和右膝盖、右脚踝和右膝盖组成的角以及左臀和左膝盖、左脚踝和左膝盖组成的角。
[0133]
下面结合具体实施例对本发明的技术效果作进一步描述。
[0134]
实施例1:
[0135]
1、深度图像的骨架化
[0136]
1.1为了实现深度图片姿态识别的最终目的,有了这些数据之后的模型训练以及测试。
[0137]
1.2深度图像的获取
[0138]
实验用的深度图像通过intel的d435摄像头获得,d435配备了全局的快门和宽视野,非常适合用于获取 深度图像。由于这次实验主要针对老人的姿态识别,所以在征得老人同意得情况下将这个摄像头安装在了 老人屋子里,这样获取到的图片更具有实验价值。
[0139]
因为深度图输出的数据是16位,直接打开是无法看清的,所以在图像采集中将其转化成8位的索引图 片,然后映射到彩色图中,就生成了现在在用的伪彩色图。样例图如图8。
[0140]
摄像头采集的图片会先放在云上,包括了对齐的伪彩色图和彩色图。在采集了几天的数据后,从云上 下载这些图片数据。因为这些图片有很多是老人不在屋子里的,所以需要从下载的数据中进行挑选。筛选 出图像中有老人存在的彩色图和其对应伪彩色图。这里采用图片拍摄时的时间戳来进行对应的。通过这个 可以筛选出了两万多张伪彩色图和以及对应的彩色图片来作为训练识别骨骼化数据的训练集。示例图片如 图9,训练要用的只有存在人物的图片。
[0141]
1.3图像关键点标签获取
[0142]
有了足够得深度图像数据,想要进行模型训练还需要对里面得人进行关节点标记,这里由于摄像头可 以采集到深度图像和彩色图像,在对这两种图片进行对齐操作后,就代表彩色图中的人物关节点信息和深 度图像中的关节点信息是一一对应的。所以本发明可以利用现有的识别彩色图的模型对彩色图进行识别, 并将识别结果作为深度图像的标签,这里采用的识别彩色图的模型是pytorch版的openpose,选用openpose 的原因是openpose模型的识别效果很好,基于openpose进行获取标签可以有很好的精度,而选用pytorch版 本是因为pytorch版本代码相对于c++版本的代码通俗易懂,c++版本的openpose由于集成度非常高,阅读 起来非常困难,要实现保存模型输出是一件非常费时费力的事。
[0143]
通过这个来获取到图片人物的标签。图10是通过pytorch版本的openpose进行识别的结果图。但是本发 明要存储的不是这个图,而是需要存储模型的输出,也就是heatmap和paf作为图片标签。通过numpy数组 的形式存储。
[0144]
为了让存储的标签文件能够和深度图一一对应,在存储文件时要以时间戳命名heatmap和paf文件。训 练时可以通过伪彩色图的文件名(也是时间戳)直接定位到对应的heatmap和paf文件。到这里训练集就准 备完毕了,接下来就可以进行训练了。
[0145]
1.4模型训练
[0146]
1.4.1网络模型
[0147]
深度图的人体骨骼化识别的训练网络采用的是openpose网络。
[0148]
这是一个自下而上的人体姿态检测模型,不同于自上而下的网络模型,自上而下的检测模型主要是通 过先确定图片中的人数,确定人后,再进行关键点的检测,对每个人进行检测识别每个关节点,这样有一 个明显的缺点就是当图片中人数多的时候,要重复的检测每个人,并对每个人进行关键点检测。
[0149]
而openpose是自下而上的检测模型,先识别图片中所有可能的关键点,在模型中的输出是heatmap,以 及识别所有关键点之间的连接关系,这种关键点之间的联系被称为矢量场或者人体关键点亲和场,在模型 输出的是paf。这个模型是同时进行人体关键点的检测和人体关键点的连接。
[0150]
在特征提取阶段采用的是vggnet的前10层作为特征提取,而heatmap和paf预测的网络如图11。
[0151]
其中pafs是用来描述像素点在骨架中的走向,用l(p)来进行表示,关键点的相应用s(p)来进行表示。 首先网络通过vgg

19前10层进行初始化并微调,在经过pretrain

model进行骨架后,会有两个branch,来分 别进行回归l(p以及s(p)。在每一个stage都算一次loss之后,将l以及s以及原始的输入f进行concatenate,送 入下一个stage再进行训练。其中训练的loss采用的是l2范数。s和l的gt都是采用标注的关键点,如果某个关 键点在标注中不存在,就不标注这个点。
[0152]
经过网络,网络分为上下两个分支,每个分支都是6个阶段进行不断的微调,且每个阶段都会将featuremaps进行融合。
[0153]
在给出标注数据计算的时候,每个confidence map都是一个2d的表示,理想情况下,当图像中值包含 一个人时,如果一个关键点是可见的话,对应的confidence map中只会出现一个峰值,而当图像中有多个人 时,对于每一个人k的每一个可见关键点j在对应的confidence map都会有一个峰值。
[0154]
特别是多人姿态估计的时候,上图中关键点之间存在的关系可能存在很多种可能。本发明提出了pafs 部件亲和场同时保持了肢体区域之间的位置关系跟方向关系,每种类型的肢体都会有连接其两个关联部位 对应的亲和场。
[0155]
1.4.2训练模型
[0156]
在前期准备中,由于疫情的原因,没有采集到自己的数据,所以在网上寻找了8个不同的rgb

d对齐 图像数据集,每个数据集抽取部分(因为大部分的对齐数据集是视频帧,太多重复的了),然后放一块作 为训练数据集,总共选取了3000多张图片。同时在训练前思考了两种方向,一个是改变模型的输入,使模 型输入由3通道改为单通道,一个是通过变换,将深度图变成3通道的伪彩色图。经过一定的考虑,最后选 择了将深度图转化成3通道的伪彩色图,这样模型的输入就不用变,可以直接对伪彩色图进行训练。在训 练前也试了通过官方的模型直接对伪彩色图进行识别,效果是非常差的,基本识别不出人。所以还是需要 进行模型的训练。经过训练也是发现这个思路可行,就定下来训练框架。
[0157]
因为官方给的模型有很强的兼容性,所以在训练本发明的模型时可以加载模型进行初始化本发明的 模型。
[0158]
最后正式训练的数据是选用由kinect 435摄像头在老人家中拍摄的图片,训练选取了3w多张有人存在 的伪彩色图。这里采用伪彩色图的主要原因在于openpose模型中输入就是3通道,当然也可以修改模型,然 后直接用深度图进行训练,本发明还是采用更改图片数据,保持模型不变的思路进行训练。先用官方给的 模型运行出每张图片对应的heatmap和paf并把他们保存好。
[0159]
训练前还要先把要训练的深度图,heatmap文件和paf文件的路径索引保存到txt中,这样再训练的时候 就可以直接读取txt并遍历每一行进行加载数据。由于文件的命名都是用时间戳,为了让深度图和heatmap、 paf文件能够一一对应上,不要出现不对应的情况,需要在写txt之前排好序,排序就直接按照文件名(时间 戳)来就好了,这样就可以保证数据能够一一对应上。
[0160]
数据加载用的是pytorch中的utils.data.dataset类,通过__getitem__方法,可
以根据索引序号来获取图片 和标签。数据加载好了就可以开始训练了。
[0161]
训练机器用的是联想小新锐7000,cpu是intel的i5

7300hq,16gb内存,显卡是nvidia的geforce gtx 1050,显存2gb,为了加快训练的过程,使用了cuda10.2组件进行gpu加速。
[0162]
这里主要是看这几个参数,max_iter是最大迭代次数,顾名思义就是本次训练一共要迭代的次数,到 了这个最大迭代次数就结束训练了。display是迭代多少次进行一次打印,主要打印输出loss值,训练时间 等等信息,打印这个可以清晰看到模型在训练过程中loss的变化,这样可以在loss值反常,比如不降反增等 情况下及时停止训练,然后进行排查问题。base_size是批尺寸参数,这里实在是机器限制了,只能取到1, 取到2显存就爆了,这个值取大一点训练出的效果应该更好。
[0163]
确定好了参数后就是训练了,这里为了得到更好的模型,本发明进行了很多次的训练,每次训练要进 行5

6个小时,第一次训练1w多张图片迭代20000次,第二次训练3w多张图片迭代30000次,然后对初始学 习率进行多次微调分别训练。
[0164]
最后将训练的多个模型进行保存,方便之后各个模型之间的对比,然后再系统实现中选用效果最好的 那个模型作为系统人体骨架化的模型。
[0165]
1.5关节点连接
[0166]
有了关键点后,连接是一个很重要的问题,特别是在多人姿态估计中,而paf不见亲和场同时保持了肢 体区域之间的位置关系跟方向关系,每种类型的肢体都会有连接其两个关联部位对应的亲和场。
[0167]
图像中的k以及k分别表示第k个人的肢体c的两个身体部件j1以及j2的预测位置,如果点p落在 肢体c上,那么的值为j1指向j2的单位向量,不在这个肢体上的点p为0,为了在训练中评估f
l
,定义 paf在点p的预测值由公式(2

1)得出:
[0168][0169]
其中的v是肢体的单位向量。在公式(2

2)所计算的范围内,
[0170]
0≤v*(p

x
j1,k
)≤l
c,k and|v

*(p

x
j1,k
)|≤δ
l
ꢀꢀꢀ
(2

2)
[0171]
点p被定义为在肢体c上,其中δ
l
代表肢体的宽度。
[0172]
l
c,k
=||x
j1,k

x
j2,k
||
ꢀꢀꢀ
(2

3)
[0173]
而公式(2

3)代表肢体的长度。点p在部件亲和场预测值为所有人在此点上paf的平均值由公式(2

4) 计算得出。
[0174][0175]
其中的n
c
(p)表示非零向量的个数。
[0176]
而在预测阶段中,对于两个候选的部件点d
j1
和d
j2
,可以沿着线段采样预测得到的paf l
c
以测量两个部 分之间的关联置信度,计算公式如(2

5)所示。
[0177][0178]
其中p(u)代表两个身体部件之间的位置,计算公式为(2

6)所示:
[0179]
p(u)=(1

u)d
j1
+ud
j2
ꢀꢀꢀ
(2

6)
[0180]
实际预测时对u区间进行均匀间隔采样求和来求解近似的积分值。
[0181]
1.6模型测试
[0182]
测试集准备好有人的伪彩色图和没有人的伪彩色图,主要测试哪些数据会出现有人的图片测不到, 没人的图片误识别。
[0183]
测试时选用了350张伪彩色图片,由于场景的单一性,没有出现人物的误识别,也就是不会存在没人 的情况会识别出人物来。图12前面那个人识别的挺不错的,由于时深度图转化的伪彩色图,耳朵和眼睛 的细节都丢失了,所以在眼睛和耳朵的点识别准确度丢失比较严重。而图片中后面那个人由于遮挡太 多,同时图像质量差,只能识别头部的部分点。同时在某些特定的位置会识别不到人,如图中的左边的 人在伪彩色图中已经很难辨别人型了,所以模型并没能检测出来。
[0184]
模型也存在识别效果较差的情况,如图13,左边的人由于站位原因使得整个人的轮廓发生了很大的变 化,肉眼看上去也只能看到头和一只手,当然最主要的原因是这种情况的数据太少了,导致训练集中并没 有训练到这种数据。所以最终的结果是识别不到。
[0185]
这一部分也是对之前训练好的多个模型进行了测试,包括一开始利用3000数据集训练迭代了10000次 的用例,如图14,可以看到效果很不理想,整个人的左半边识别的很差,左脚和左腿以及左臀都没能识别 出来,这样的模型肯定不行,这还是在没有遮挡情况下识别的。
[0186]
将迭代次数增加到2000次,然后进行图像识别,可以看到,相对于图17的结果来说,好了很多,人体 的骨架点基本识别出来了,只看骨架图也能很清晰的看到照片中人的站立姿态。
[0187]
虽然这些都是无遮挡的样例图,但增加迭代次数可以加强模型的识别度,这一点也证明了通过openpose 网络进行训练伪彩色图时可行的,是可以训练出较好的模型的。
[0188]
1.7获取三维关节点信息
[0189]
openpose中识别出的人物关节点有18个。每个id对应一个关键点。关键点对应图如图16。
[0190]
其中0

鼻子,1

脖子,2

右肩,3

右肘,4

右手腕,5

左肩,6

左肘,7

左手腕,8

右臀,9

右膝盖,10
‑ꢀ
右脚踝,11

左臀,12

左膝盖,13

左脚踝,14

右眼,15

左眼,16

有耳朵,17

左耳朵。
[0191]
为了方便后续的数据处理,需要将这些关节点信息存在json中,关键点匹配连接后,会返回两个变量, 一个是candidate,一个是subset。
[0192]
其中candidate是所有关键点的坐标,有一个二位数组组成,里面的每一组数据有4个值组成,前两个是 像素的xy坐标,最后一个是该条数据的索引,方便后面进行关节点连接。
[0193]
subset是一个将candidate中关键点给关联起来的一个二维数组,subset的长度
代表了从图片中识别出的 人的数目。里面的每一条数据长度都是固定的20,其中前18个是人体关键点,位置索引和关节点id一一对 应的。每个位置索引指向的具体值就是candidate下的对应索引。如果这个值是

1,就代表了模型检测这张 图片时,没有把那个人的对应关节点给检测出来。
[0194]
明白了这两个变量,就可以很好的把转化成一个json变量。在pose_keypoints关键字中,存储为一个数 组,每3个数据就是一个关节点数据,前两个是关键点在图像中的坐标,并且是按照id排列的,id为0的关 键点是前三个数据,id为1的关键点是接下来的三个数据。
[0195]
保存好了2d的数据后,因为处理的是深度图像,所以每个像素点中还是有深度信息的,通过这个深度 信息,然后加上相机的变换参数,可以将数据转化成三维点,这样做的主要原因是加上深度信息后,就更 能显示一个人的真实姿态。相机的变换内参主要有camera_factor、camera_cx、camera_cy、camera_fx、 camera_fy。变换原理主要是相机针孔模型,有了深度就可以把拍下来的场景进行3d还原。
[0196]
变换好了将数据存入json中,这样就获得了人体骨架图的3d坐标。同时为了让人体骨架图的3d坐标更 方便查看,决定进行一定的旋转,将3d骨架化图形旋转到正面来,这样旋转不会改变人体关键点之间的相 对位置,骨骼之间的角度也不会发生改变。所以不会改变人体的姿态。
[0197]
首先计算出人体的中臀和脖子之间的中点作为人体的中心点,将这个中心点平移到原点,之后的旋转 就是绕着这个原点进行旋转。而绕原点进行旋转又可以转化为绕着三条轴进行旋转,绕轴旋转的旋转矩阵 如下公式。其中公式(2

7)是绕x轴逆时针旋转的公式。公式(2

8)是绕y轴逆时针旋转的公式。公式(2

9) 是绕z轴逆时针旋转的公式。
[0198][0199][0200][0201]
主要要进行两次次旋转,第一次是将脊柱,也就是中臀(左右臀的中点)和脖子构成的向量,旋转到 z轴中,这里要分两步走,第一步先将脊柱旋转到x0z平面,绕x轴。第二步再旋转到轴中,绕y轴进行旋转。 这样就将脊柱旋转到了z轴中,相当于把人的三维骨架图放直了。下一步就是将人的朝向转过来,也就是 将左右肩构成的向量旋转到y0z平面中。这
样这个三维骨架图就摆正了,摆正得话就很方便看到老人姿态 的具体情况,可以很好的展示出来。图17就是旋转前的,人物谷歌关键点显得拥挤,且偏离坐标系原点。
[0202]
通过旋转,可以把人体三维骨骼点摆到面朝前面,如图18是图17旋转后得三维骨架图。旋转后人体骨 架更加清晰,也方便医护人员进行查看。
[0203]
1.7骨骼化模型的训练和测试,其中还包括了数据的采集和存储方面的东西,在原有的openpose模型输 出的2d图像中加入了深度信息,同时结合相机的视角变换,就可以重构出人体骨骼点的3d坐标。
[0204]
2、骨骼化数据的姿态识别
[0205]
2.1有了人体骨架的三维点后,就可以进行姿态识别了,直接对骨架图进行识别数据量偏多,对骨架图 进行特征提取后再进行姿态识别。
[0206]
2.2特征提取
[0207]
在骨骼化数据获取中得到了人体关节点的3d坐标信息,要想进行人体的姿态识别,还需要进行特征的 提取,这里主要获取了7种特征值。
[0208]
第一个是前屈角,也就是脖子和鼻子组成的向量、脖子和中臀组成的向量,这两个向量的夹角作为前 屈角。第二和第三分别是脖子和左臀、左臀和左膝盖组成的角以及脖子和右臀、右臀和右膝盖组成的角。 第四第五是肩部角,分别是脖子和左肩、左肩和左手肘组成的角以及脖子和右肩,右肩和右手肘组成的角。 第六第七是膝盖角,由右臀和右膝盖、右脚踝和右膝盖组成的角以及左臀和左膝盖、左脚踝和左膝盖组成 的角。
[0209]
虽然人体姿态变化很多,但还是可以找到一些规律的,比如站立时腿不会出现弯曲,且身板很直,坐 的时候腿弯曲程度很大,弯腰时身体时弯的,行走时腿会有轻微的弯曲,且身体有前倾趋势。这些特征都 可以帮助区分老人的姿态。所以那些角度也可以很好的反映老人姿态。
[0210]
通过这七个角度来反映一个人的姿态。确定了特征值后,就需要进行数据分类了,需要挑出准备识别 的各个姿态的数据,需要进行识别的姿态有站立、行走、坐和弯腰这四个姿态,先从下载好的图片中进行 挑选,每个姿态都要挑选出一定量的图片作为训练集。
[0211]
挑选好数据后就可以用上一章中的骨骼化模型跑出每个图片中人的关键点的3d坐标,接着计算每个人 的那七个特征角度,将同一个姿态的特征角度存入csv文件中。这要就初步完成了训练集的准备。
[0212]
生成好了csv文件后还需要对数据进一步的筛选、清洗,主要是对些人体关键点识别丢失的数据,生成 的特征角度有好几个都是无法计算的,就比如没有识别出脖子这个点,那么就有五个特征角度是没有的, 类似这种数据需要删除以保证特征的代表性。
[0213]
2.3随机森林
[0214]
随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一 棵决策树之间是没有关联的。通过多个决策树的结果进行投票获取到最终的结果。在得到森林之后,当有 一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看这个样本应该属于哪 一类(对于分类算法),然后看看哪一类被选择最多,就预测这个样本为那一类。
[0215]
决策树是一个树结构(可以是二叉树或非二叉树)。其每个非叶节点表示一个特征属性上的测试,每 个分支代表这个特征属性在某个值域上的输出,而每个叶节点存放一个
类别。使用决策树进行决策的过程 就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将 叶子节点存放的类别作为决策结果。
[0216]
随机森林的原理在于从特征列表中随机选k个特征值(总共有m个特征值,其中m大于k)然后进行建 立决策树,这样重复多次,这就可以获得多个决策树,测试时候就只需要将测试数据在每个决策树中跑一 遍,就可以获得多个结果,一般将输出结果中次数最多的一个作为算法的最后结果。
[0217]
随机森林的优点有稳定性和抗过拟合能力,稳定性是因为预测的结果只有在半数以上的决策树中出现 差错才会出现错误的预测,即使是出现一个新的数据点,整个算法也不会出现过多的影响,而是只影响一 颗决策树。抗过拟合能力是通过平均决策树,降低了过拟合的风险,也就是多个决策树,即使有一两个出 现过拟合,在总的决策投票中也会被平均下来。
[0218]
2.3.1模型训练
[0219]
这里训练选择的是python的sklearn第三方包,这个包中包含了很多封装好的机器学习方法,比如回归、 降维、分类等方法。有简单高效的数据挖掘和数据分析工具,并且建立在numpy、scipy,matplotlib之上。
[0220]
安装好必要的环境后,就可以开始写训练代码了。首先要做的就是加载数据,要加载的主要是之前计 算保存好的csv文件。每个文件对应一个姿态。
[0221]
读取完数据后就获得一个二位数组,里面每一条数据都是一个8元的向量,其中前面七个是从三维骨 骼点提取的特征,而最后一个数据是表示状态。0表示弯腰、1表示坐、2表示站立、3表示行走。接下来可 以用sklearn包中的train_test_split函数从训练集中随机取一部分作为训练集,剩下一部分是作为测试集数据。 直接使用sklearn包中的随机森林模型,加载训练数据进行训练,随机森林训练速度还是很快的。
[0222]
其中train_test_split函数中的test_size参数是代表从数据集中取20%作为测试集,其他的作为训练集。最 后将模型保存在rf.pkl文件中。
[0223]
2.3.2模型测试
[0224]
首先用之前取出的20%测试集进行模型测试,并且输出模型的准确度,可以看到模型的准确度为73%。
[0225]
模型使用还是比较简单,只需要加载训练好的模型,然后进行预测就好了。
[0226]
2.4svm分类器
[0227]
支持向量机,这是一种机器学习方法,是基于统计学习理论的。会通过找到结构化风险最小来提高学 习机的泛化能力。从而实现置信范围和经验风险的最小化。通过这种方法,可以做到在样本量较少的情况 下可以有良好的统计规律。svm分类器的基本思想就是找到最优的那个分类面使得两个类之间分类间隔最 大。
[0228]
2.4.1模型训练
[0229]
python中的sklearn包中包含了svm的实现,直接导入就可以使用。
[0230]
先把数据加载到pandas的dataframe中,这里在分割源数据和标签时需要将标签的索引重新设置一下, 不然训练过程会报错。从原有数据中截取部分作为训练集,这里用到的函数还是train_test_split函数,将数 据随机分为训练集和测试集。
[0231]
加载训练数据,调用svm中的svc模型,然后进行训练。
[0232]
训练结束后保存模型。
[0233]
2.4.2模型测试
[0234]
利用之前分割出的20%数据作为测试集,用代码直接测试,输出准确率。可以看到svm训练的模型准 确度只有61%。这个准确率还是比随机森林的准确率低。
[0235]
2.5主要是针对上章获取到的3d骨骼化数据进行姿态分析,在分析前需要进行特征提取,选取了七个特 征作为训练特征,确定特征后就选取到一定量的数据进行分类,然后计算并保存下来对应的特征。将同一 姿态的数据放在同一个csv文件中,这样就把训练集准备好了。训练这边选用了两种模型,随机森林模型和 svm分类器,分别进行训练和测试后,通过准确率比较得出,在当前数据集中,随机森林的表现要好一些, 能有70%多的准确率,这个准确率的原因主要是原始数据太多有遮挡的了,生成的3d数据很多都丢失了数 个关键点。如果将数据提纯一下结果会好很多,但却失去了一定的可信度。
[0236]
3、系统实现
[0237]
3.1有了前两部分的模型,就可以开始建立的应用了,这里做的是一个用于给老人的监护人员看的web 应用,通过这个应用能够让监护人员看到老人的行动状态,并且在老人久站或久坐的情况下给出提醒。所 以这个web应用需要整合前两章实现的骨骼化程序和姿态识别程序,通过调用他们获取到图像的姿态,然 后可以进行展示。当然要展示的还有3d骨架图等等。通过展示这些,可以更好的配合监护人员,减轻他们 的工作难度,同时很好的保护了老人的隐私。
[0238]
3.2系统架构
[0239]
本系统主要分为四个功能模块,分别是图像采集,人体骨骼化,姿态检测,系统ui这四个,前三个模 块的输出都是作为下一个模块的输入。
[0240]
图像采集模块是采用realsense镜头,在老人家中进行数据采集,然后发布在实验室云端。目前的解决 方法就是手动去云中下载数据,然后将数据进行解压,解压后的伪彩色图像放入指定文件夹中进行处理。
[0241]
人体骨骼化模块是读入伪彩色图,然后放入模型中去识别,模型会输出heatmap和paf两个变量,通过 这两个变量进行人体关节点连接,可以得到一个2d的人体关键点坐标。结合深度图的深度信息,再加上相 机内参,就可以进行坐标变换,得到重建的3d坐标。本来有了这个3d坐标就可以进行特征提取的,但是为 了让骨架图展示的时候更方便医护人员查看,就加了一步旋转。把人体3d骨架图旋转好后还要进行保存, 以便ui模块直接调用图片查看。流程图为4所示。
[0242]
姿态识别模块首先进行的是特征提取,通过之前讲的那几个特征的计算,利用人体骨架化模块计算出 的3d坐标进行特征计算,并将计算好的特征数据组成一个有序数组,加载到对应模型中进行识别,然后将 识别结果传到ui模块中。这个功能模块的流程图如5所示。
[0243]
ui模块中实现的是要展示出来给医护人员查看的页面端和处理数据的服务器端。前端要做的主要是显 示老人的3d骨架图(旋转后的),以及识别出的姿态。还要在老人久站久坐下给出弹窗提醒,具体多久给 出提醒医护人员可以在页面中设置。后端运行逻辑如图6,而提醒模块的流程图如7所示。
[0244]
3.3系统和软件信息
[0245]
机器:联想小新锐7000
[0246]
系统:windows10 1909
[0247]
conda:4.8.3
[0248]
python:3.5.6
[0249]
django:2.2.12
[0250]
3.4系统后端
[0251]
3.4.1django简介
[0252]
本系统采用的系统后端是python的django,因为前面模型训练的都是python,为了让数据跟方便的处理, 后端也采用python语言开发。这样做的话,整合前两个模型更加方便。可以很好的缩短开发时间。
[0253]
django框架是一个开放源代码的web应用框架,有很好的社区氛围,遇到一些问题都可以在社区中找 到解决方法,这也很好的方便了开发。可以用很少的代码完成一个网站需要的大部分内容,是基于mvc 模型的,也就是model(模型)+view(视图)+controller(控制器)设计模式,这种模式的好处是可以让 后续对程序的修改和扩展简化,并且可以是程序的一些部分重复利用,提高代码的利用率。
[0254]
mvc模型的优势还有部署方便、维护成本低等,基于这些,这次系统采用django作为后端开发框架。
[0255]
3.4.2django开发前准备
[0256]
首先要做的是用django带的django

admin进行创建服务代码,命令为django

admin startproject poseweb。 这样就算是有了web环境,其中比较重要的是创建的manage.py文件,这是一个可以用来管理django项目的 命令行工具。poseweb/settings.py文件是django项目的配置文件。
[0257]
运行命令python manage.py runserver就可以启动django服务了。
[0258]
这样就是成功启动了,在浏览器中访问https://127.0.0.1:8000/就可以看到主页面了。如果想要更改端口 的话,只要在运行命令中指定端口就可以了。接下来就需要创建web应用了,使用命令python manager.pystartapp pose就可以创建一个名为pose的web应用。
[0259]
其中poseweb中的urls是分管url连接的,再pose应用中要单独建立一个urls.py文件,然后在poseweb中 的urls.py中加载这个文件。
[0260]
在pose下的urls.py文件中写上要被访问的url,然后再view.py文件中写对用的逻辑代码,这样就可以将 url访问和具体运行逻辑绑定下来。
[0261]
3.4.3接口实现
[0262]
首先是主页接口,要返回的主要就是主页的html,所以实现很简单,直接使用django中的render函数将 html文件返回就可以了。这样就将主页的接口写好了。
[0263]
系统启动接口,就是在接收到请求后可以启动调用骨架化模块和姿态分析模块,同时将这几个模块连 接起来,并且将最后的输出保存到指定位置。为了让网页系统可以实现想视频播放一样的效果,在运行模 型这里进行了多线程操作,新开一个线程来处理指定文件夹中的图片,并将处理后的图片保存,以及最后 的姿态返回到一个数组中。而多线程的启动时在加载玩模型后进行的,然后将加载好的模型传入子线程中, 就可以避免多次加
载的问题。
[0264]
图片和姿态的访问接口,这部分是返回处理后的3d骨架图和对应的姿态。做法主要是获取到那个独立 线程保存的数组,取数组的最后一个数据就是最新处理出来的图片的姿态,因为处理后的图片保存命名是 从0开始的,所以直接用数组长度减1就可以寻找到最新处理好的图片。将这两个返回就完成了这个接口的 功能。
[0265]
提醒功能的接口。主要实现在某个提醒阈值后能够返回提醒信息。这个提醒阈值需要另一个接口来设 置。这里要做的主要有监控姿态数据,在连续出现站或者坐姿态时,进行判断时间是否超过阈值,超过阈 值就给一个特定的信息给前端。
[0266]
阈值设置接口。主要是设置在老人站或者坐到一定时间后给出提醒。单位是图片的张树,比如设置3 就代表连续三张图片出现同一个姿态时给出提示。
[0267]
3.5系统前端
[0268]
3.5.1框架选取
[0269]
前端选用的是bootstrap开源工具包和jquery框架,其中bootstrap是twitter公司的设计师mark otto和 jacob thornton合作基于html、css、javascript开发的简洁、直观、强悍的前端开发框架,使得web开 发更加快捷。在bootstrap中提供了很多很好用的css和html规范。而jquery是一个快速、简洁的javascript 框架,又很多链式语法和短小清晰的多功能接口,并且具有高效灵活的css选择器,可以对css选择器进 行扩展。
[0270]
3.5.2网页开发
[0271]
网页主要有两个,一个是显示骨架图和姿态的主页面,一个是用于更改阈值的页面。
[0272]
主页面要展示的有3d骨架图,当前人物姿态,启动按钮,是否久站或者久坐。其中主要是启动按钮需 要写js脚本进行和后端交互,这里用的是jquery的ajax进行get请求,后端会在加载完模型后将返回,这时候 后端就开始处理图片了,所以前端需要定时向后端请求数据这里也是用了jquery的setinterval函数,进行每 秒请求数据。
[0273]
更改阈值页面就简单多了,只需要向后端发送数据就好了。后端取到前端的数据,然后更改相关参数 就完成了阈值的更改。
[0274]
3.6系统展示
[0275]
启动服务后,在浏览器中输入对应url可以看到初始界面
[0276]
点击启动姿态分析按钮,就可以让后端加载模型并开始对图像进行分析。
[0277]
当后端处理好图片后,前端就可以访问到处理好的骨架图和姿态识别结果。
[0278]
在阈值设置界面填好数据点击提交会出现弹窗提示。
[0279]
在老人站立或者坐的时间超过阈值时,就会出现提示,标签颜色变成黄色,以此提醒医护人员。
[0280]
3.7本部分主要讲的是系统的实现,包括各个模块的运行流程,包括前后端的技术框架,各个模块之 间的连接,以及最后的结果展示。
[0281]
本发明以实现基于深度图像的老人姿态检测系统为目的,通过realsense镜头获取深度图像,利用 openpose的网络结构进行了人体的骨架化识别,获取到了骨架化结果后通过深度信息,相机内参进行视角 变换,得到三维的骨架化结果,在骨架化结果中进行特征提取,主要是身体的一些角度,有了特征值,就 可以放在分类器中进行识别姿态。
[0282]
姿态识别本发明尝试了两种分类器,对比下来结果更好的是随机森林分类器。有了这些准备,就开始 搭建系统了,主要是连通完成的几个模块,提供交互接口。
[0283]
本发明通过将深度图转化成伪彩色图然后通过openpose网络训练可以获得可用的深度图像识别模型。 利用深度图的深度信息可以将2d的关键点转化成3d的坐标信息,而且利用旋转可以将骨架图很好的展示 出来。通过选取的那7种特征值,配合随机森林分类器可以很好的实现姿态识别。
[0284]
应当注意,本发明的实施方式可以通过硬件、软件或者软件和硬件的结合来实现。硬件部分可以利用 专用逻辑来实现;软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬 件来执行。本领域的普通技术人员可以理解上述的设备和方法可以使用计算机可执行指令和/或包含在处理 器控制代码中来实现,例如在诸如磁盘、cd或dvd

rom的载体介质、诸如只读存储器(固件)的可编程 的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本发明的设备及其模块可以由诸 如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程 逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由 上述硬件电路和软件的结合例如固件来实现。
[0285]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的 技术人员在本发明揭露的技术范围内,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等, 都应涵盖在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1