一种人体关节运动关键点识别方法及系统

文档序号:27941209发布日期:2021-12-11 13:11阅读:355来源:国知局
一种人体关节运动关键点识别方法及系统

1.本发明属于机器视觉技术、图像处理技术领域,具体涉及一种人体关节运动关键点识别方法及系统。


背景技术:

2.近年来,随着深度学习技术的进一步发展,使用深度学习技术代替传统方法进行人体关节点的目标检测已经成为趋势,但目前大部分针对人体关节点识别的技术多用于姿态识别(包括人体姿势和手姿势识别),一来是因为主流技术未能很精准地对复杂角度下的关节点进行测量,二来使用流行深度学习流行的目标检测技术,存在计算量多、相关模型结构庞杂的问题,严重影响该技术的实际应用。
3.由于人体是具有柔韧度的,随着人体的部位变化,关键点会随着视角、穿着动态的变化,会伴随着遮挡、图像变型、光照条件等环境影响,现有的技术一般是通过openpose模型识别出人体上的关键点,但是识别得到的关键点并不准确,往往与人体实际的关节运动关键点偏差很大,尤其是应用在人体的小关节运动关键点识别以关节点的定位为基础进行关节活动度的测量,需要计算出实际的活动角度,同时模型在计算上的开销不能太大,使得人体关节运动关键点的识别成为一个极具挑战性的研究热点问题。


技术实现要素:

4.本发明的目的在于提出一种人体关节运动关键点识别方法及系统,以解决现有技术中所存在的一个或多个技术问题,至少提供一种有益的选择或创造条件。
5.为了实现上述目的,根据本发明的一方面,提供一种人体关节运动关键点识别方法,所述方法包括以下步骤:s100,采集被测者活动的视频数据;s200,对视频数据进行目标检测,获取包含目标为被测者的子区域的各个图像帧作为关键帧集合;s300,标记出关键帧集合中各个图像帧中目标为被测者的子区域中的活动部件,由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合,并从活动部件集合中提取运动关键点;s400,根据提取的运动关键点确定人体关键点坐标;其中,标记出关键帧集合中各个图像帧中目标为被测者的子区域中的活动部件的方法为以下步骤:对关键帧集合中所有的图像帧进行灰度化并高斯滤波后的灰度图像进行边缘检测获取关键帧集合中各个图像帧的边缘线,由每个图像帧的各个边缘线构成封闭区域,获得每个图像帧的中封闭区域构成的封闭区域集合;在封闭区域集合中,以各个封闭区域的几何中心点作为各个封闭区域的锚点,通过shi

tomasi角点检测算法检测各个封闭区域的各个角点,每个封闭区域都得到各个角点
构成的对应的角点集合;在各个图像帧中,以各个封闭区域的锚点为anchor1,计算各个封闭区域的角点集合中各个角点与anchor1的欧式距离中的最大的距离值maxda1,计算各个封闭区域的角点集合中各个角点与anchor1的欧式距离中的最小的距离值minda1;当关键帧集合中当前图像帧存在前一个图像帧时(注:由于图像帧是从视频数据中按照时间顺序提取的,因此当前图像帧存在前后的图像帧,当前图像帧存在前一个图像帧意义为当前图像帧不是视频数据中第一帧图像;当前图像帧不存在前一个图像帧意义为当前图像帧是视频数据中第一帧图像),在前一个图像帧中,各个封闭区域以自身的锚点anchor1的坐标为圆心、以对应的maxda1为半径的扫描范围内搜索几何中心点在扫描范围中的封闭区域,将各个几何中心点在扫描范围中的封闭区域作为活动部件集合;当关键帧集合中当前图像帧不存在前一个图像帧时,在当前图像帧中,各个封闭区域以自身的锚点anchor1的坐标为圆心、以maxda1为半径的扫描范围内搜索几何中心点在扫描范围中的封闭区域,将各个几何中心点在扫描范围中的封闭区域作为活动部件集合。
6.进一步地,在s100中,被测者活动的视频为由用户拍摄的包含被测者完整活动周期的关节活动的影像;其中,被测者完整活动周期的关节活动为被测者按照待测关节活动的预设规范进行的待测关节活动,待测关节活动的医学规范包括踝关节背屈活动、坐姿状态下双腿各以90度的角度交替转体髋关节、挺胸打开胸腔维持胸椎活动、进行多方位绕肩关节活动中任意一种或多种活动。
7.进一步地,在s200中,对视频数据进行目标检测的算法包括:yolo算法或者r

cnn算法,以yolo算法或者r

cnn算法的锚框的目标区域作为包含被测者的子区域。
8.进一步地,在s300中,标记出各个图像帧中目标为被测者的子区域中的活动部件,由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合的方法为:通过参考文献:《wu b , nevatia r . detection of multiple, partially occluded humans in a single image by bayesian combination of edgelet part detectors[c]// tenth ieee international conference on computer vision. ieee, 2005》中的方法标记出各个图像帧中目标为被测者的子区域中的活动部件,由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合。
[0009]
进一步地,在s300中,由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合的方法为以下步骤:在活动部件集合中的封闭区域中,依次计算各个封闭区域的各个角点与对应封闭区域的几何中心点的欧式距离中的最大的距离值构成最大距离值集合maxd(由每个封闭区域的各个角点与对应封闭区域的几何中心点的最大距离构成最大距离值集合maxd),依次计算各个封闭区域的各个角点与对应封闭区域的几何中心点的欧式距离中的最小的距离值构成最小距离值集合mind(由每个封闭区域的各个角点与对应封闭区域的几何中心点的最小距离构成最小距离值集合maxd);计算运动衡量值u1=(|avg(maxd)

maxda1|+|avg(mind)

minda1|)
÷
2;其中,avg()函数表示取集合中各个元素的算术平均值(运动衡量值为识别出角点之间是否发生过运动);从各个封闭区域的角点集合中筛选出各个角点与锚点之间的欧氏距离dl满足活动条件的角点形成运动特征点集合,或者从各个封闭区域的角点集合中筛选出各个角点与
锚点之间的欧氏距离dl大于或等于所有各个角点与锚点之间的欧氏距离dl的平均值的角点形成运动特征点集合。
[0010]
进一步地,在s300中,活动条件为:,其中,dis
i4
表示角点集合中第i4个角点与当前角点的距离值,或者dis
i4
表示角点集合中第i4个角点与封闭区域的锚点的距离值,dl为当前角点与封闭区域的锚点之间的欧氏距离,n3为角点集合中角点的数量,i4为累加变量,i4∈[1,n3]。
[0011]
进一步地,在s300中,从活动部件集合中提取运动关键点的方法为以下步骤:在封闭区域中,计算运动特征点集合中各个角点与锚点之间的欧氏距离的算术平均值bn;计算锚点与各个角点的运动灰度差值k1:;其中,gr(i5)为运动特征点集合中第i5个点的灰度值,ga为锚点的灰度值,n4为运动特征点集合中的点的总数量,g(i5)的值取0或1,i5为累加变量,i5∈[1,n4];取运动灰度差值k1最小的值所对应的角点作为运动方向点(即取各角点中与锚点的运动灰度差值k1最小的角点);以锚点到运动方向点的方向作为运动方向;令封闭区域的锚点到运动方向点的射线为ls,从封闭区域的锚点开始取射线ls上长度为max(maxd)+max(mind)的线段lsd,其中,max()函数表示取集合中各个元素的最大值;当lsd与活动部件集合中任意一个除了当前封闭区域之外的封闭区域存在交集时,记存在交集的封闭区域为patt,则标记当前封闭区域的锚点为运动关键点,并且标记所述封闭区域patt与当前封闭区域为互相连接的两个活动部件(此处运动关键点对应于人体的关节,活动部件对应于与关节连接的两个人体的运动的部分)。
[0012]
进一步地,g(i5)取值的方法为:当关键帧集合中当前图像帧存在后一个图像帧时(注:由于图像帧是从视频数据中按照时间顺序提取的,因此当前图像帧存在后一个图像帧意义为当前图像帧不是视频数据中最后一帧图像;当前图像帧不存在后一个图像帧意义为当前图像帧是视频数据中最后一帧图像),在以运动特征点集合中第i5个点为圆心、以bn为半径的范围内,如果有任意一个后一个图像帧中的封闭区域的几何中心点在所述范围内,则g(i5)取值为1, 否则为0;(注:有可能封闭区域的几何中心点并不在以运动特征点集合中第i5个点为圆心、以bn为半径的范围内,只是封闭区域的一部分在所述范围内,所以有此限定)在以运动特征点集合中第i5个点为圆心、以bn为半径的范围内,当关键帧集合中当前图像帧不存在后一个图像帧时,如果有任意一个当前图像帧中的封闭区域的几何中心点在所述范围内,则g(i5)取值为1, 否则为0。
[0013]
进一步地,在s400中,将获取的运动关键点的坐标位置映射回被测者活动的视频数据的图像帧从而得到的人体关键点坐标作为修正关键点坐标。
[0014]
进一步地,在s400中,将运动关键点标记为人体关节运动的关键目点,包括照物部位、头部位、脚部位、臀部的根节点、头节点、左手腕、右手腕、左脚跟和右脚。
[0015]
进一步地,还包括步骤s500,通过openpose模型识别人体关键点,将openpose模型识别得到的人体关键点的坐标重新设定为修正关键点坐标从而改变openpose模型识别得到的人体关键点的位置(由于现有的openpose模型识别出人体上的关键点,识别得到的关键点并不准确,再此对openpose模型识别出人体上的关键点进行位置修正)。
[0016]
进一步地,还包括步骤s500,将提取的运动关键点确定为人体关键点坐标,并显示在空间坐标系上;分别用直线将所有的互相连接的两个活动部件中的运动关键点位置两两连接,分别形成第一关节轴以及第二关节轴;计算所述第一关节轴以及第二关节轴之间的夹角,识别待测关节的活动方向。
[0017]
本发明还提供了一种人体关节运动关键点识别系统,所述一种人体关节运动关键点识别系统包括:处理器、存储器及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述一种人体关节运动关键点识别方法中的步骤,所述一种人体关节运动关键点识别系统可以运行于桌上型计算机、笔记本、掌上电脑及云端数据中心等计算设备中,可运行的系统可包括,但不仅限于,处理器、存储器、服务器集群,所述处理器执行所述计算机程序运行在以下系统的单元中:数据采集单元,用于采集被测者活动的视频数据;关键帧集合提取单元,用于对视频数据进行目标检测,获取包含目标为被测者的子区域的各个图像帧作为关键帧集合;运动关键点提取单元,用于标记出关键帧集合中各个图像帧中目标为被测者的子区域中的活动部件,由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合,并从活动部件集合中提取运动关键点;关键点确定单元,用于根据提取的运动关键点确定为人体关键点坐标。
[0018]
本发明的有益效果为:本发明提供一种人体关节运动关键点识别方法及系统,提高了人体关节运动关键点的识别精度,实现人体关节运动关键点的智能化检测,检测更为简单快捷,极大的减少了计算的开销和复杂度,提高了关键点识别的鲁棒性。
附图说明
[0019]
通过对结合附图所示出的实施方式进行详细说明,本发明的上述以及其他特征将更加明显,本发明附图中相同的参考标号表示相同或相似的元素,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图,在附图中:图1所示为一种人体关节运动关键点识别方法的流程图;图2所示为一种人体关节运动关键点识别系统结构图。
具体实施方式
[0020]
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。
[0021]
如图1所示为一种人体关节运动关键点识别方法的流程图,下面结合图1来阐述根据本发明的实施方式的一种人体关节运动关键点识别方法,所述方法包括以下步骤:s100,采集被测者活动的视频数据;s200,对视频数据进行目标检测,获取包含目标为被测者的子区域的各个图像帧作为关键帧集合;s300,标记出关键帧集合中各个图像帧中目标为被测者的子区域中的活动部件,由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合,并从活动部件集合中提取运动关键点;s400,根据提取的运动关键点确定为人体关键点坐标。
[0022]
进一步地,在s100中,被测者活动的视频为由用户拍摄的包含被测者完整活动周期的关节活动的影像;其中,被测者完整活动周期的关节活动为被测者按照待测关节活动的预设规范进行的待测关节活动,所述预设规范为医学规范,医学规范包括踝关节背屈活动、坐姿状态下双腿各以90度的角度交替转体髋关节、挺胸打开胸腔维持胸椎活动、进行多方位绕肩关节活动中任意一种或多种活动。
[0023]
优选地,所述医学规范包括:(一)肩关节(shoulder joint)1.伸

屈a.活动面:矢状面;b.检查体位:双肩中立位;c.测量:以测量器轴心贴于肩峰,测量臂之一平行腋中线放置,另一臂沿上臂纵轴移动,读两臂之夹角;d.正常活动范围:180
°
~0
°
~45
°
;2.外展一内收a.活动面:冠状面;b.检查体位:双肩中立位;c.测量:测量角轴心置于肩关节后,一测量臂与身体中线平行,一臂随上臂运动,读两臂之夹角;d:正常活动范围:外展180
°
,内收0
°
;3.外旋-内旋a.活动面:矢状面或水平面;b.检查体位:a.矢状面:肱骨外展90
°
,肘屈曲90
°
,前臂旋前手掌向足;b.水平位:上臂靠近躯干,将肘关节屈曲90
°
;c.测量:a.矢状面:测量器轴心对准肘关节,将一臂置于与腋中线平行位,另一臂于前臂纵轴随之活动,测两臂间夹角;b.水平位:测角器轴心置于肘关节固定臂放与地面垂直,另一臂置与尺骨纵轴随之运动;d.正常活动范围:内旋90
°
,外旋90
°

[0024]
(二)肘关节(elbow joint)伸

屈a.活动面:矢状面;b.检查体位:中立位;
c.测量:测角器轴心对准肘关节外侧,测量臂之一置于肱骨纵轴,另一置于桡骨纵轴,测两臂之夹角;d.正常活动范围:145
°
~0
°
~5
°

[0025]
(三)桡尺关节(radioulnar joint)旋前

旋后a.活动面:额状面;b.检查体位:肱骨内收至胸部,肘屈曲90
°
,前臂桡侧朝向病人头部,作为0
°
位;c.测量:可采用罗盘式测角器或双叉式测角器,测量旋前时,将前臂完全旋前,轴心对准尺骨茎突,将一臂干与肱骨纵轴平行,另一臂杆横过腕关节背面,测量旋后方法类同;d.正常活动范围:旋前:0
°
~90
°
;旋后:0
°
~ 90
°

[0026]
(四)腕关节( wrist joint)1.伸-屈a.活动面:矢状面;b.检查体位:前臂及手均置于旋前位。;c.测量:测角器轴心对准尺骨茎突,一臂沿尺侧缘同前臂纵轴平行,另一臂同第2.掌骨纵轴平行并随第5掌骨移动(测量器也可置于桡侧);d.正常活动范围:伸:0
°
~70
°
;屈:0
°
~90
°
;2.桡偏-尺偏a.活动度:水平位;b.检查体位:肘关节屈曲90
°
位,前臂旋前,腕关节0
°
位;c.测量:测量角置于手背,轴心置于第3掌骨的近体部上方,一臂沿前臂中线放置,另一臂沿第3掌骨纵轴平行放置;d.正常活动范围:桡偏:0
°
~ 25
°
;尺偏:0
°
~35
°

[0027]
(五)掌指关节(metacarpophalangeal joints)伸

屈a.活动面:矢状面;b.检查体位:手置任一平静位,拇指与手指伸展;c.测量:测角器轴心对准测量的掌指关节上方,其一臂置于手背,另一臂置于测量手指背侧并与其纵轴平行;d.正常活动范围:0
°
~90
°

[0028]
(六)指间关节(interphalangeal joints)伸-屈a.活动面:矢状面;b.检查体位:手置于任一平静位;c.测量:测量器轴心对准被测量的关节上方,一臂置于近侧指背面,在最大限度屈曲和伸展位时记取读数;d.正常活动范围:近侧指间关节:0
°
~ 100
°

远侧指间关节:0~80
°

[0029]
(七)拇指( thumb)1.拇指桡侧外展;a.活动面:在与手掌平行的平面上运动;b.体位:手置于任一平静位,手指伸展;c.测量:测量角轴心于腕掌关节,一臂在示指,另一臂在拇指,测两臂间夹角;d.正常活动范围:0
°
~60
°
;2.拇指尺侧内收:a.活动面:在与手掌平行的平面上活动;b.检查体位:手置于任一平面,手指伸展;c.测量:测量角轴心及两臂位置同上;d.正常活动范围:0
°
;3.拇指掌侧外展:a.活动面:矢状面;b.检查体位:手置于任一平静位,手指外展;c.测量:测量器轴心及两臂放置方法同前;d.正常活动度:0
°
~90
°
;4.拇指掌侧内收a.活动面:矢状面;b.检查体位:手置于任一平静面;c.测量:方法同前;d.正常活动度:0
°
;5.拇指掌指关节屈曲a.活动面:矢状面;b.检查体位:手指伸展位,手置于任一平静位;c.测量:测量器轴心置于掌指关节,一测量臂于第1掌骨,另一臂于拇指第1节;d.正常活动度:0
°
~60
°
;6.拇指掌指关节伸直a.活动面:矢状面;b.检查体位:同前;c.测量:方法同前;d.正常活动度:0
°
~10
°
;7.拇指指间关节伸

屈a.活动面:矢状面;b.检查体位:手指伸直位;c.测量:测量器于指间关节,固定臂于拇指第一节,另一臂于拇指末节;d.正常活动度:80
°
~0
°
~10
°
;8.拇指对掌
a.活动面:在与手掌面平行的平面上活动;b.检查体位:手置于任一平静位,手指伸展;c.活动形式:此运动由外展、旋转、屈曲三种因素组成;9.手指间运动外展.内收在手掌面以中指为中心,指的离开运动为外展,合拢运动为内收。
[0030]
(八)髋关节(hip joint)1.屈

伸a.活动面:矢状面;b.检查体位:仰卧、侧卧或站立位;c.测量:测量器轴心置于股骨大粗隆上,一臂于股骨纵轴平行位置,另一臂置于与躯干平行位置上;d.正常活动度:伸:0
°
~15
°
:屈:伸膝时:0
°
~90
°
;屈膝时:0
°
~125
°
;2.外展-内收a.活动面:冠状面;b.检查体位;仰卧或站立位;c.测量:测量器轴心于髂前上棘,一臂置于股骨正中线,另一臂于两髂前上棘连线之垂线;d.正常活动范围:外展:0
°
~45
°
;内收:0
°
~ 20
°
;3.外旋-内旋a.活动面:水平面;b.检查体位:仰卧,在髋屈曲位测量时,髋和膝均要屈曲近90
°
;c.测量:测量器的轴心对准膝关节,其双臂置于胫骨前面,与胫骨纵轴平行。当髋内旋或外旋时,测量器一臂置于胫前位置,另一臂则停留于原位置;d.正常活动范围:内旋:0
°
~45
°
;外旋:0
°
~45
°

[0031]
(九)膝关节( knee joint)屈-伸a.活动面:矢状面;b.检查体位:可仰卧或坐在椅子或桌子边缘;c.测量:测量器轴心对准膝关节外侧,一臂置于大腿外侧,与股骨纵轴平行,另一臂于小腿外侧,与胫骨纵轴平行;d.正常活动范围:0
°
~130
°

[0032]
(十)踝关节(ankle joint)1.屈-伸(跖屈-背屈)a.活动面:矢状面;b.检查体位:可坐位或仰卧位,膝关节屈曲,以允许踝关节最大限度背屈;c.测量:测量器轴心置于足底处的腓骨纵轴线上,一臂置于小腿外侧,另一臂与第5跖骨纵轴平行放置;
d.正常活动范围:背屈:0
°
~20
°
;跖屈:0
°
~45
°
;2.内翻

外翻a.活动面:冠状面;b.检查体位:取坐位或仰卧位,踝关节呈中立位;c.测量:测量器轴心置于足跟底,一臂置于踝内侧或外侧与小腿纵轴平行,另一臂置于足跖面(测量内翻时将测量器置于踝外侧,测量外翻时则反之);d.正常活动范围:内翻:30
°
,外翻:20
°
;3.内收

外展a.活动面:水平面;b.检查体位:取坐位或仰卧位,关节中立位0
°
;c.测量:前足部关节放置测量角轴心,一臂置于第1~2跖骨间的足轴,另一臂初始亦然,当内收和外展时随之活动,两臂夹角即为预测角。
[0033]
(十一)足趾( toes)1.足趾活动a.活动面:矢状面;b.检查体位:足趾中立位,患者取坐位或仰卧位;c.测量:a.mp.轴心于mp关节,一臂于第1跖骨,另一臂于跖趾第1节;b.ip:轴心于ip关节,一臂于跖趾第1节,另一臂跖趾末节;d.正常活动范围:mp:伸0
°
~ 60
°
,屈0
°
~ 35
°
;ip:伸0
°
,屈0
°
~60
°
;2.足趾:a.活动面:矢状面;b.检查体位:取坐位,足趾中立位0
°
;c.测量:mp:轴心于mp关节,一臂置于2~5跖骨,另一臂于第2~5趾第1节处;pip:轴心于pip关节,一臂于第2~5趾第1节,另一臂于第2~5第2节;dip:轴心于dip关节,一臂于第2~5趾第2节,另一臂于第2~5趾末节;d.正常活动范围:mp:伸40
°
,屈0
°
~ 35
ꢀ°
;pip:伸0
°
,屈0
°
~ 35
°
;dip:伸0
°
,屈0
°ꢀ
~50
°

[0034]
(十二)腰椎关节(joint of lumbar vertebrae)1.伸-屈:a.活动面:矢状面;b.检查体位:腰椎直立位;c.测量:测量器轴心于l

5椎体位置,一臂于l

5垂线,另一臂于l

5~c

7连线上;d.正常活动范围:前屈90
°
,后伸30
°
;2.侧屈:a.活动面:冠状面;b.检查体位:腰部直立位;c.测量:方法同伸

屈测量;d.正常活动范围:左45
°
,右45
°
;3.旋转:
a.活动面:水平面。
[0035]
进一步地,在s200中,对视频数据进行目标检测的算法包括:yolo算法或者r

cnn算法。
[0036]
进一步地,在s300中,标记出各个图像帧中目标为被测者的子区域中的活动部件,由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合的方法为:通过参考文献:《wu b , nevatia r . detection of multiple, partially occluded humans in a single image by bayesian combination of edgelet part detectors[c]// tenth ieee international conference on computer vision. ieee, 2005》中的方法标记出各个图像帧中目标为被测者的子区域中的活动部件,由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合。
[0037]
进一步地,在s300中,标记出关键帧集合中各个图像帧中目标为被测者的子区域中的活动部件,由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合,并从活动部件集合中提取运动关键点的方法为以下步骤:s301,设关键帧集合为cri={frame
i1
},其中,frame
i1
为关键帧集合cri中第i1个图像帧,令n1为关键帧集合cri中图像帧的数量,i1为变量,i1∈[1, n1];令i1的初始值为1,i1为关键帧集合中图像帧的序号;对关键帧集合cri中所有的图像帧进行灰度化并高斯滤波后的灰度图像进行边缘检测获取关键帧集合cri中各个图像帧的边缘线,每个图像帧的各个边缘线构成封闭区域,由第i1个图像帧中所有的封闭区域构成集合part
i1
={pat
i2
},pat
i2
为集合part
i1
中第i2个封闭区域,i2为变量,i2∈[1, n2];令i2的初始值为1,n2为集合part
i1
中封闭区域的数量;s302,以pat
i2
的几何中心点为封闭区域pat
i2
的锚点,通过shi

tomasi角点检测算法检测pat
i2
的各个角点,得到各个角点构成pat
i2
的角点集合gr1={gr
i3
},gr
i3
为pat
i2
的角点集合gr1中第i3个角点;令n3为gr1中角点的数量,令i3的值为1,i3∈[1, n3];以图像帧frame
i1
中封闭区域pat
i2
的锚点为anchor1,计算pat
i2
的角点集合gr1中各个角点与anchor1的欧式距离中的最大的距离值maxda1,计算pat
i2
的角点集合gr1中各个角点与anchor1的欧式距离中的最小的距离值minda1;当关键帧集合cri中存在图像帧frame
i1
‑1时,在图像帧frame
i1
‑1中在以锚点anchor1的坐标为圆心、以maxda1为半径的扫描范围内搜索几何中心点在扫描范围中的封闭区域,将各个几何中心点在扫描范围中的封闭区域作为活动部件集合;frame
i1
‑1为关键帧集合cri中第i1

1个图像帧;当关键帧集合cri中不存在图像帧frame
i1
‑1时,在图像帧frame
i1
中在以锚点anchor1的坐标为圆心、以maxda1为半径的扫描范围内搜索几何中心点在扫描范围中的封闭区域,将各个几何中心点在扫描范围中的封闭区域作为活动部件集合;在活动部件集合中的封闭区域中,依次计算各个封闭区域的各个角点与对应封闭区域的几何中心点的欧式距离中的最大的距离值构成最大距离值集合maxd,依次计算各个封闭区域的各个角点与对应封闭区域的几何中心点的欧式距离中的最小的距离值构成最小距离值集合mind;则计算运动衡量值u1=(|avg(maxd)

maxda1|+|avg(mind)

minda1|)
÷
2;其中,avg()函数表示取集合中各个元素的算术平均值;
s303,从集合gr1中筛选出各个角点与锚点之间的欧氏距离dl满足活动条件的角点形成运动特征点集合;活动条件为:,其中,dis
i4
表示集合gr1中第i4个角点与当前角点的距离值,或者dis
i4
表示角点集合gr1中第i4个角点与pat
i2
的锚点之间的距离值,dl为当前角点与pat
i2
的锚点之间的欧氏距离,u1为运动衡量值;s304,计算运动特征点集合中各个角点与锚点之间的欧氏距离的算术平均值bn;计算锚点与各个角点的运动灰度差值k1:;或者,计算锚点与各个角点的运动灰度差值k1为:将锚点与各个角点的运动灰度差值k1的值设置为锚点到各个角点的直线段,各个直线段上所有像素点的平均灰度值;取运动灰度差值k1最小的值所对应的角点作为运动方向点;以锚点到运动方向点的方向作为运动方向;其中,gr(i5)为运动特征点集合中第i5个点的灰度值,ga为锚点的灰度值,n4为运动特征点集合中的点的总数量,g(i5)为运动辨识函数;g(i5)的值为:在以运动特征点集合中第i5个点为圆心、以bn为半径的范围内,当关键帧集合cri中存在图像帧frame
i1+1
时,如果存在任意一个图像帧frame
i1+1
中的封闭区域的几何中心点,则g(i5)取值为1, 否则为0;当关键帧集合cri中不存在图像帧frame
i1+1
时,如果存在任意一个图像帧frame
i1
中的封闭区域的几何中心点,则g(i5)取值为1, 否则为0;s305,令封闭区域pat
i2
的锚点到运动方向点的射线为ls,从pat
i2
的锚点开始取射线ls上长度为max(maxd)+max(mind)的线段lsd,其中,max()函数表示取集合中各个元素的最大值;s306,当lsd与集合part
i1
中任意一个除了pat
i2
之外的封闭区域存在交集时,记存在交集的封闭区域为patt,则标记pat
i2
的锚点为运动关键点,并且标记所述封闭区域patt与pat
i2
为互相连接的两个活动部件;s307,当i2<n2时,将变量i2的值增加1并转到步骤s302,当i2≥n2,将变量i2的值设置为1,将角点集合gr1中的元素清空并转到步骤s308;s308,当i1<n1时,将变量i1的值增加1,将角点集合gr1中的元素清空并转到步骤s302,当i1≥n1,转到步骤s309;s309,输出各个运动关键点及其对应的各个互相连接的两个活动部件。
[0038]
进一步地,在s400中,将获取的运动关键点的坐标位置映射回被测者活动的视频数据的图像帧从而得到的人体关键点坐标作为修正关键点坐标。
[0039]
进一步地,在s400中,将运动关键点标记为人体关节运动的关键目点,包括照物部位、头部位、脚部位、臀部的根节点、头节点、左手腕、右手腕、左脚跟和右脚。
[0040]
进一步地,还包括步骤s500,通过openpose模型识别人体关键点,将openpose模型识别得到的人体关键点的坐标重新设定为修正关键点坐标从而改变openpose模型识别得到的人体关键点的位置。
[0041]
进一步地,还包括步骤s500,将提取的运动关键点确定为人体关键点坐标,并显示在空间坐标系上;分别用直线将所有的互相连接的两个活动部件中的运动关键点位置两两连接,分别形成第一关节轴以及第二关节轴;计算所述第一关节轴以及第二关节轴之间的夹角,识别待测关节的活动方向。
[0042]
优选地,在本公开的实施例中,一种人体关节运动关键点识别方法的c++语言的部分关键源代码如下:#采集被测者活动的视频数据;random_order = i2.random.permutation(numsample).tolist();isvalidationarray = [framei1[i]['isvalidation'] for i in range(numsample)];if(validation == 1):totalwritecount = isvalidationarray.count(0.0);;else:totalwritecount = len(framei1);print totalwritecount;writecount = 0;for count in range(numsample);#对视频数据进行目标检测;if (framei1[i1]['isvalidation'] != 0 and validation == 1);continue;print os.path.join(path_header, framei1[i1]['img_paths']);img = cv2.imread(os.path.join(path_header, framei1[i1]['img_paths']));elif "mpi" in framei1[i1]['framei1set']:img_i1 = framei1[i1]['img_paths'][

13:

3];height = img.shape[0];width = img.shape[1];if(width < 64):width = 64;meta_framei1 = i2.zeros(shape=(height,width,1), dtype=i2.uint8);for i in range(len(framei1[i1]['framei1set'])):meta_framei1[i2][i] = ord(framei1[i1]['framei1set'][i]);print 'type()=', type(ord(framei1[i1]['framei1set'][i]));#获取包含目标为被测者的子区域的各个图像帧作为关键帧集合i2 = i2 + 1;
height_binary = float2bytes(framei1[i1]['img_height'])for i in range(len(height_binary)):meta_framei1[i2][i] = ord(height_binary[i])width_binary = float2bytes(framei1[i1]['img_width'])print 'type(width_binary)=',type(width_binary)for i in range(len(width_binary)):meta_framei1[i2][4+i] = ord(width_binary[i])i2 = i2 + 1;meta_framei1[i2][0] = framei1[i1]['isvalidation']meta_framei1[i2][1] = framei1[i1]['numotherpeople']meta_framei1[i2][2] = framei1[i1]['pati2']print 'type() =', type(framei1[i1]['isvalidation'])# 标记出关键帧集合中各个图像帧中目标为被测者的子区域中的活动部件,anchor1_index_binary = float2bytes(framei1[i1]['anchor1_index']);for i in range(len(anchor1_index_binary));meta_framei1[i2][3+i] = ord(anchor1_index_binary[i]);count_binary = float2bytes(float(writecount));for i in range(len(count_binary)):meta_framei1[i2][7+i] = ord(count_binary[i]);totalwritecount_binary = float2bytes(float(totalwritecount));for i in range(len(totalwritecount_binary)):meta_framei1[i2][11+i] = ord(totalwritecount_binary[i]);nop = int(framei1[i1]['numotherpeople']);i2 = i2 + 1;objpos_binary = float2bytes(framei1[i1]['objpos']);for i in range(len(objpos_binary)):meta_framei1[i2][i] = ord(objpos_binary[i]);i2 = i2 + 1;scale_provided_binary = float2bytes(framei1[i1]['scale_provided']);for i in range(len(scale_provided_binary)):meta_framei1[i2][i] = ord(scale_provided_binary[i]);i2 = i2 + 1;#由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合joints = i2.asarray(framei1[i1]['joint_self']).t.tolist() # transpose to 3*16;for i in range(len(joints)):row_binary = float2bytes(joints[i]);for j in range(len(row_binary)):meta_framei1[i2][j] = ord(row_binary[j]);
i2 = i2 + 1;if(nop!=0):if(nop==1):joint_other = [framei1[i1]['joint_others']];objpos_other = [framei1[i1]['objpos_other']];scale_provided_other = [framei1[i1]['scale_provided_other']];print 'joint_other=',joint_other;else:joint_other = framei1[i1]['joint_others'];objpos_other = framei1[i1]['objpos_other'];scale_provided_other = framei1[i1]['scale_provided_other'];print 'joint_others2 =', joint_other;for i in range(nop):objpos_binary = float2bytes(objpos_other[i]);for j in range(len(objpos_binary)):meta_framei1[i2][j] = ord(objpos_binary[j]);i2 = i2 + 1;scale_provided_other_binary = float2bytes(scale_provided_other);for j in range(len(scale_provided_other_binary)):meta_framei1[i2][j] = ord(scale_provided_other_binary[j]);i2 = i2 + 1;#从活动部件集合中提取运动关键点;for n in range(nop):joints = i2.asarray(joint_other[n]).t.tolist() # transpose to 3*16;print 'joints=',joints;print 'joint_other[n]=', joint_other[n];for i in range(len(joints)):row_binary = float2bytes(joints[i]);for j in range(len(row_binary)):meta_framei1[i2][j] = ord(row_binary[j]);i2 = i2 + 1;img4ch = i2.concatenate((img, meta_framei1, mask_miss[...,none], mask_all[...,none]), axis=2);elif "mpi" in framei1[i1]['framei1set']:img4ch = i2.concatenate((img, meta_framei1, mask_miss[...,none]), axis=2)。
[0043]
本发明的实施例提供的一种人体关节运动关键点识别系统,如图2所示为本发明的一种人体关节运动关键点识别系统结构图,该实施例的一种人体关节运动关键点识别系统包括:处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,
所述处理器执行所述计算机程序时实现上述一种人体关节运动关键点识别系统实施例中的步骤。
[0044]
所述系统包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序运行在以下系统的单元中:数据采集单元,用于采集被测者活动的视频数据;关键帧集合提取单元,用于对视频数据进行目标检测,获取包含目标为被测者的子区域的各个图像帧作为关键帧集合;运动关键点提取单元,用于标记出关键帧集合中各个图像帧中目标为被测者的子区域中的活动部件,由每个图像帧中的活动部件构成一个与当前图像帧对应的活动部件集合,并从活动部件集合中提取运动关键点;关键点确定单元,用于根据提取的运动关键点确定为人体关键点坐标。
[0045]
所述一种人体关节运动关键点识别系统可以运行于桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备中。所述一种人体关节运动关键点识别系统,可运行的系统可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,所述例子仅仅是一种人体关节运动关键点识别系统的示例,并不构成对一种人体关节运动关键点识别系统的限定,可以包括比例子更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述一种人体关节运动关键点识别系统还可以包括输入输出设备、网络接入设备、总线等。
[0046]
所称处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器 (digital signal processor,dsp)、专用集成电路 (application specific integrated circuit,asic)、现场可编程门阵列 (field

programmable gate array,fpga) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述一种人体关节运动关键点识别系统运行系统的控制中心,利用各种接口和线路连接整个一种人体关节运动关键点识别系统可运行系统的各个部分。
[0047]
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述一种人体关节运动关键点识别系统的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smart media card, smc),安全数字(secure digital, sd)卡,闪存卡(flash card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0048]
尽管本发明的描述已经相当详尽且特别对几个所述实施例进行了描述,但其并非旨在局限于任何这些细节或实施例或任何特殊实施例,从而有效地涵盖本发明的预定范围。此外,上文以发明人可预见的实施例对本发明进行描述,其目的是为了提供有用的描述,而那些目前尚未预见的对本发明的非实质性改动仍可代表本发明的等效改动。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1