论文部分内容阅读
摘要:为了能够在智能化识别动作的过程中提高识别的效率和准确率,避免在以整体特征为基础研究受到衣着等因素的影响,本文根据Kinect的骨骼跟踪功能,建立人体关节点融合的简化骨架模型。提出关于角度和重心的判别模型,借助matlab达到自动识别功能。
关键词:自动识别,层次分析法,Kinect,角度,骨架模型
1 引言
人体行为动作及姿态的识别目前仍处于初级阶段。人体结构的复杂性以及运动的复杂性,加之客观环境的多样性,使得人们对于动作特征、肢体关键信息的提取变得愈加困难。目前人体动作识别的方法大都集中在动作特征的提取与识别上,这类方法大都通过建立人体姿态的轮廓特征图像、从而对特征图像进行分析与识别,常用的有静态轮廓图像、步态能量图像(GEI)、主动能量图(AEI)、帧差能量图(FDEI)。这些特征图像可以很好的表达人体动作姿态的整体特征,但往往计算量较大,效率不高。在获得轮廓图或能量图时易受衣着、背包等的影响,识别的准确率会降低。本文提出建立基于人体关键关节点的棒状模型,利用人体的肢体角度和重心因素,建立判别函数,通过判别值的匹配达到识别的目的。其优势在于不受人体总体特征的限制,直接研究与人体运动有关的肢体幅度的变化,不需要复杂的运算,识别率较高。
2 基于Kinect的人体简化模型的建立
是一款3D体感摄影机,同时导入了即时动态捕捉、影像辨识、麦克风输入、语音辨识等功能。它拥有3个摄像头,分别是红外线发射器、RGB摄像头、红外线接收器。可以接收彩色图像数据流、深度图像数据流和音频数据流三种数据流[1]。
Kinect能够在深度图像的基础上实现人体骨骼的追踪。在Kinect的骨骼追踪中,通过实时捕捉一共可以准确获得20个人体骨骼关节点的三维坐标信息。连接关节点,可以形成“火柴人”。本文建立人体模型时正是在Kinect的骨骼图像基础上,将20个关节点进行融合、相连,形成简化的人体棒状模型。
2.1 简化的棒状人体模型建立
由文献[2]可知,20个关节点可以按对动作影响程度不同分为3个层次,分别为身体躯干关节点、四肢关节点、以及手与脚。
针对研究的行走、奔跑、蹲下起立、跳跃四个典型动作,我们各做了96组实验,第一层关节点中,有96%组实验证明左肩、右肩、左臀、右臀、脊柱相对于人体躯干的位置固定不变,对角度的形成没影响;第二层关节点中,有94%组实验证明左腕、右腕虽然对角度的形成有较大的影响,但对动作分类无影响;第三层关节点中,左手、右手、左脚、右脚对我们研究的动作提供的信息太少,只能在手势识别中进行详细研究。
基于上述原因,我们将左、右手和腕融合为一点;左、右肩和肩膀中央融合为一点;左、右臀和臀部中央融合为一点;左、右脚和踝关节融合为一点。将20个骨骼关节点精简为11个关键的骨骼关节点,分别为头、肩膀中央、左肘、右肘、左腕、右腕、臀部中央、左膝、右膝、左踝、右踝,形成了人体的头、躯干、上臂、前臂、大腿和小腿的部分,如图1所示:
在该模型中,我们定义臀部中心为空间坐标的原点中心,原点到头部的方向为Y轴的方向,Kinect的红外摄像头与臀部中心连线并指向臀部中心的方向为Z轴的正向,垂直于YOZ平面的方向为X轴的方向。
2.2 肢体角度参数的建立
实验过程中,人的运动方向是Kinect的红外摄像方向始终呈90度,在定义角度之前,我们做出如下说明:
1)以人运动的方向为正方向,肢体的摆动方向与正方向一致,定义为前,摆向与正方向相反,定义为后;
2)实验时四种动作的姿势如上图2所示。
我们定义了7个角度参数,前臂与身体躯干的角度,后臂与躯干的角度,前后腿之间的角度,前臂肘关节处角度,后臂肘关节处角度,前腿膝关节处角度,后腿的膝关节处角度。
2.3 重心参数的建立
与传统的基于图像像素的质心求法不同的是,本文利用臀部中心的离地高度与头部离地的高度的数值比作为重心的参数。在识别过程中,人与Kinect之间的距离会发生,若以臀部中心作为人体重心,则该重心的高度(y坐标值)会随之变化。而以比值作为重心参数,则因各点高度同比例变化,重心参数不随与Kinect距离变化。因此该比值可以很好的代替重心,如图3所示。
2.4 参数在Kinect中的获取
2.4.1 定义关节点和骨骼向量
在Kinect中,通过定义骨骼向量来计算肢体的空间角度。如图所示:
对人体简化模型的骨骼定义向量,第一层关节点(b1,b2,b3)组成的骨骼定义为向量{α1,α2},第二层关节点(b4,b5,b6,b7)组成的骨骼定义为向量{α3,α4,α5,α6},第三层关节点(b8,b9,b10,b11)组成的骨骼定义为向量{α7,α8,α9,α10}。
2.4.2 余弦函数计算角度因素和计算重心参数
1)计算角度
以φ1为例简述角度的算法。φ1角是由向量α2和α3组成的向量角,包含关节点b2,b3,b4,假设各关节点坐标为b2:(x2,y2,z2,),b3:(x3,y3,z3,)b4:(x4,y4,z4,)则向量α2=(χ3-χ2,y3-y2,z3-z2),向量α3=(χ4-χ2,y4-y2,z4-z2,),由反余弦函数可计算φ1的值:
(2)其中 ,并且 ;
同理,我们依次求出我们所需的7个角度。
2)计算重心
假设各点坐标如下: ,
则重心参数: (3);
3 动作判别框架
人体模型和判别函数的建立对整个识别过程至关重要。下图给出了整个研究过程中每一个关键的步骤,研究的三条主线(如虚线框所示)也十分的清晰:①建立人体棒状模型,并建立判别函数②实验采集数据并建立判别规则;③利用Kinect的骨骼图像,获取角度和重心参数,利用Matlab软件实现动作的自动识别。 4 层次分析法在建立判别函数中的应用
层次分析法是一种定性与定量分析相结合的多目标决策分析方法。它能够将实测的数据、专家评分以及分析者的客观判断有机的结合起来达到综合评价或判别。本文采用方根法计算判断矩阵的最大的特征值和对应的特征向量。步骤如下:
1)矩阵A按行求连乘的积并开m次方,得向量 ,
其中 (4);
2)对 做归一化处理,得到权重向量 ,
其中 (5);
3)对A中的每列元素求和,得到向量 ,
其中 (6);
4)计算 (7)。
5)一致性检验是为了验证结果是否合理。检验公式为
(8);其中Rc表示一致性比例, (9)表示一致性指标,IR表示平均随机一致性指标,可查表获得[5]。当Rc<0.1时,表示结果符合一致性检验。
4.1 建立动作判别函数
4.1.1 影响因素的无量纲化处理
(1)角度的无量纲化。我们有两种无量纲化处理的结果:
其中,εiw、μiw表示角度无量纲化后处理的结果,φi表示实测的角度值,φmax/min表示人体处理自然正常静止站立时各肢体角度,φ参照值表示人体运动时各肢体角度的极限值,参照文献[2];
(2)因为重心参数为长度的比值,无需进行无量纲化处理。
4.1.2 判别函数的建立
本次研究中,当人静止站立时,重心参数η= ,考虑到η在行走或奔跑时的变化不大,与站立时相近,在跳跃或蹲下起立时变化显著,在建立判别函数时,把该因素的两倍作为分母,这样能够显著区分重心变化与基本不变的两个大类运动。在区分了大类运动的基础上,再根据运动的幅度(角度表示)综合值来判断具体运动,基于上述分析,提出判别模型如下:
其中,wj表示权重,εj、μj表示角度无量纲后的数值,η为重心参数,F1、F1综合判别指标。(10)式用以判别重心是否显著变化的大类,即行走、奔跑为一类;跳跃、蹲起为一类,(11)式用以对上述F1的判别结果确定具体的运动。
5 建立判别函数
5.1 建立判断矩阵及权重的确定
根据专家打分和两两对比确定重要性顺序,并赋予标度值。建立判别矩阵A:
计算可知CR=0.08<0.1,计算结果符合一致性检验。由上述结果,得到具体的动作判别函数:
①大类运动判别函数:
其中的
②具体运动判别函数:
其中
5.2 建立动作的判别规则
第一步:判别函数的主体就是将输入的多个参数值转换为一个计算值F,利用我们所做的大量的实验数据,逐个代入,可以得到某一确定动作的F1、F2值范围。
表3:动作判别规则表
第二步:由表3可知值并不是一个连续的范围值,在跳跃动作与蹲起动作之间还有一些值重复覆盖,存在某些值无法判断动作类型。这时,我们可以借助特殊关节点的坐标进一步判断。实验时,当发生跳跃时,手腕关节点一般会高于头部,在蹲下起立的过程中会低于头部。可以利用这一性质,对落入重合区域的动作进行判断,规则可以用下图解释:
6 实例
Kinect可以通过动作捕捉的技术获取人体的20个关节点生成人体的骨架模型。本章研究的重点就是基于这些关节点的坐标信息计算关键的肢体角度和重心参数,最后通过与Matlab的联合使用,利用判别动作的函数达到自动识别动作的目的。
6.1 Kinect提取关键关节点信息
在使用Kinect设备时,启用骨骼跟踪的应用程序,Kinect便会自动进行设备所设置的20个关节点的跟踪工作,自动形成骨架图像,如图8所示。骨架图像中包含所有关节点的空间坐标信息。通过建立缓冲区和相关方法的调用,借助Matlab的应用程序可以直接获取所需关节点的坐标信息等数据流。
目前为止,获取数据流的方式主要有轮询模型和时间模型。轮询模型通过设置规定的等待时间,以一种“拉”动的方式加载数据。事件模型通过注册数据流事件后以调用事件的属性获取数据。本文采用轮询模型加载所需的数据,方法为:SkeletonStream.OpenNextFrame(T)[1],加载的数据包含了人体简化模型的11个关节点的坐标:
6.2 动作的判别实现
本文首先在自制的人体动作数据库进行动作判别模型的验证。数据库包含了室内采集的4种典型动作,每种动作分别由6人完成,每人均重复5次,运动的方向均与摄像头的方向成90度,采集速率为25fps,每组动作均有96组,约有1000帧数据。
本文随机选取约4/5的实验样本作为初始的实验数据,代入判别函数
归纳,获得了动作函数值的范围,1/5的实验作为测试样本,进行判别函数
的验证,最终的结果较为乐观,总体的识别率达到了79%。具体结果如下:
通过实验我们发现,本文所阐述的方法识别率较好,与DWT(动态规整法)、支持向量机(SVM)等方法比较,不需要大量的数据作为数据库进行一维或者二维的匹配,判别简单,计算量小;最初需要大量实验数据总结判别函数值,之后的每一次判别不需要与数据库中的每一角度值匹配,只需判断最终的判别值即可,判断时间为0.7—1.5s,均值为1.04秒;与基于动态时序的判别方法比较,不需要获得连续的视频或帧图像,计算的速度较快。
7 本文不足及展望
本文在研究过程中存在着许多不足,在此提出,并希望之后可以有所改进:
(1)利用Kinect的骨骼跟踪生成人体模型的过程总,受制于Kinect有限的视场角,有时会出现骨骼点的丢失,导致后续的步骤无法进行。而且在该过程中,有时会生成大量冗余的数据,降低了识别的效率。
(2)在利用层次分析法确定权重时,在建立判断矩阵过程中,人的主管影响较大,容易导致结果不准确。针对该问题,我们可以采用可拓层次分析法进行改进。
(3)本文在做实验的过程中,只针对侧面的动作(即运动方向与摄像机方向成90度)进行分析,且实验中的部分动作存在不准确、不一致的缺点。因此,本文的研究结果只适用侧面动作的识别。由于动作的影响因素复杂又微妙,因此目前还没有特定的识别方法。
参考文献:
[1]余涛.应用开发实践--用最自然的方式与机器对话[M].北京.机械工业出版社.2013.01-150
[2]曾莹.基于角度及轮廓特征的步态识别[D].湖南.中南大学.2008
课题项目:项目名称:基于图像识别的人体姿态分析技术研究 项目编号:2014R409012
关键词:自动识别,层次分析法,Kinect,角度,骨架模型
1 引言
人体行为动作及姿态的识别目前仍处于初级阶段。人体结构的复杂性以及运动的复杂性,加之客观环境的多样性,使得人们对于动作特征、肢体关键信息的提取变得愈加困难。目前人体动作识别的方法大都集中在动作特征的提取与识别上,这类方法大都通过建立人体姿态的轮廓特征图像、从而对特征图像进行分析与识别,常用的有静态轮廓图像、步态能量图像(GEI)、主动能量图(AEI)、帧差能量图(FDEI)。这些特征图像可以很好的表达人体动作姿态的整体特征,但往往计算量较大,效率不高。在获得轮廓图或能量图时易受衣着、背包等的影响,识别的准确率会降低。本文提出建立基于人体关键关节点的棒状模型,利用人体的肢体角度和重心因素,建立判别函数,通过判别值的匹配达到识别的目的。其优势在于不受人体总体特征的限制,直接研究与人体运动有关的肢体幅度的变化,不需要复杂的运算,识别率较高。
2 基于Kinect的人体简化模型的建立
是一款3D体感摄影机,同时导入了即时动态捕捉、影像辨识、麦克风输入、语音辨识等功能。它拥有3个摄像头,分别是红外线发射器、RGB摄像头、红外线接收器。可以接收彩色图像数据流、深度图像数据流和音频数据流三种数据流[1]。
Kinect能够在深度图像的基础上实现人体骨骼的追踪。在Kinect的骨骼追踪中,通过实时捕捉一共可以准确获得20个人体骨骼关节点的三维坐标信息。连接关节点,可以形成“火柴人”。本文建立人体模型时正是在Kinect的骨骼图像基础上,将20个关节点进行融合、相连,形成简化的人体棒状模型。
2.1 简化的棒状人体模型建立
由文献[2]可知,20个关节点可以按对动作影响程度不同分为3个层次,分别为身体躯干关节点、四肢关节点、以及手与脚。
针对研究的行走、奔跑、蹲下起立、跳跃四个典型动作,我们各做了96组实验,第一层关节点中,有96%组实验证明左肩、右肩、左臀、右臀、脊柱相对于人体躯干的位置固定不变,对角度的形成没影响;第二层关节点中,有94%组实验证明左腕、右腕虽然对角度的形成有较大的影响,但对动作分类无影响;第三层关节点中,左手、右手、左脚、右脚对我们研究的动作提供的信息太少,只能在手势识别中进行详细研究。
基于上述原因,我们将左、右手和腕融合为一点;左、右肩和肩膀中央融合为一点;左、右臀和臀部中央融合为一点;左、右脚和踝关节融合为一点。将20个骨骼关节点精简为11个关键的骨骼关节点,分别为头、肩膀中央、左肘、右肘、左腕、右腕、臀部中央、左膝、右膝、左踝、右踝,形成了人体的头、躯干、上臂、前臂、大腿和小腿的部分,如图1所示:
在该模型中,我们定义臀部中心为空间坐标的原点中心,原点到头部的方向为Y轴的方向,Kinect的红外摄像头与臀部中心连线并指向臀部中心的方向为Z轴的正向,垂直于YOZ平面的方向为X轴的方向。
2.2 肢体角度参数的建立
实验过程中,人的运动方向是Kinect的红外摄像方向始终呈90度,在定义角度之前,我们做出如下说明:
1)以人运动的方向为正方向,肢体的摆动方向与正方向一致,定义为前,摆向与正方向相反,定义为后;
2)实验时四种动作的姿势如上图2所示。
我们定义了7个角度参数,前臂与身体躯干的角度,后臂与躯干的角度,前后腿之间的角度,前臂肘关节处角度,后臂肘关节处角度,前腿膝关节处角度,后腿的膝关节处角度。
2.3 重心参数的建立
与传统的基于图像像素的质心求法不同的是,本文利用臀部中心的离地高度与头部离地的高度的数值比作为重心的参数。在识别过程中,人与Kinect之间的距离会发生,若以臀部中心作为人体重心,则该重心的高度(y坐标值)会随之变化。而以比值作为重心参数,则因各点高度同比例变化,重心参数不随与Kinect距离变化。因此该比值可以很好的代替重心,如图3所示。
2.4 参数在Kinect中的获取
2.4.1 定义关节点和骨骼向量
在Kinect中,通过定义骨骼向量来计算肢体的空间角度。如图所示:
对人体简化模型的骨骼定义向量,第一层关节点(b1,b2,b3)组成的骨骼定义为向量{α1,α2},第二层关节点(b4,b5,b6,b7)组成的骨骼定义为向量{α3,α4,α5,α6},第三层关节点(b8,b9,b10,b11)组成的骨骼定义为向量{α7,α8,α9,α10}。
2.4.2 余弦函数计算角度因素和计算重心参数
1)计算角度
以φ1为例简述角度的算法。φ1角是由向量α2和α3组成的向量角,包含关节点b2,b3,b4,假设各关节点坐标为b2:(x2,y2,z2,),b3:(x3,y3,z3,)b4:(x4,y4,z4,)则向量α2=(χ3-χ2,y3-y2,z3-z2),向量α3=(χ4-χ2,y4-y2,z4-z2,),由反余弦函数可计算φ1的值:
(2)其中 ,并且 ;
同理,我们依次求出我们所需的7个角度。
2)计算重心
假设各点坐标如下: ,
则重心参数: (3);
3 动作判别框架
人体模型和判别函数的建立对整个识别过程至关重要。下图给出了整个研究过程中每一个关键的步骤,研究的三条主线(如虚线框所示)也十分的清晰:①建立人体棒状模型,并建立判别函数②实验采集数据并建立判别规则;③利用Kinect的骨骼图像,获取角度和重心参数,利用Matlab软件实现动作的自动识别。 4 层次分析法在建立判别函数中的应用
层次分析法是一种定性与定量分析相结合的多目标决策分析方法。它能够将实测的数据、专家评分以及分析者的客观判断有机的结合起来达到综合评价或判别。本文采用方根法计算判断矩阵的最大的特征值和对应的特征向量。步骤如下:
1)矩阵A按行求连乘的积并开m次方,得向量 ,
其中 (4);
2)对 做归一化处理,得到权重向量 ,
其中 (5);
3)对A中的每列元素求和,得到向量 ,
其中 (6);
4)计算 (7)。
5)一致性检验是为了验证结果是否合理。检验公式为
(8);其中Rc表示一致性比例, (9)表示一致性指标,IR表示平均随机一致性指标,可查表获得[5]。当Rc<0.1时,表示结果符合一致性检验。
4.1 建立动作判别函数
4.1.1 影响因素的无量纲化处理
(1)角度的无量纲化。我们有两种无量纲化处理的结果:
其中,εiw、μiw表示角度无量纲化后处理的结果,φi表示实测的角度值,φmax/min表示人体处理自然正常静止站立时各肢体角度,φ参照值表示人体运动时各肢体角度的极限值,参照文献[2];
(2)因为重心参数为长度的比值,无需进行无量纲化处理。
4.1.2 判别函数的建立
本次研究中,当人静止站立时,重心参数η= ,考虑到η在行走或奔跑时的变化不大,与站立时相近,在跳跃或蹲下起立时变化显著,在建立判别函数时,把该因素的两倍作为分母,这样能够显著区分重心变化与基本不变的两个大类运动。在区分了大类运动的基础上,再根据运动的幅度(角度表示)综合值来判断具体运动,基于上述分析,提出判别模型如下:
其中,wj表示权重,εj、μj表示角度无量纲后的数值,η为重心参数,F1、F1综合判别指标。(10)式用以判别重心是否显著变化的大类,即行走、奔跑为一类;跳跃、蹲起为一类,(11)式用以对上述F1的判别结果确定具体的运动。
5 建立判别函数
5.1 建立判断矩阵及权重的确定
根据专家打分和两两对比确定重要性顺序,并赋予标度值。建立判别矩阵A:
计算可知CR=0.08<0.1,计算结果符合一致性检验。由上述结果,得到具体的动作判别函数:
①大类运动判别函数:
其中的
②具体运动判别函数:
其中
5.2 建立动作的判别规则
第一步:判别函数的主体就是将输入的多个参数值转换为一个计算值F,利用我们所做的大量的实验数据,逐个代入,可以得到某一确定动作的F1、F2值范围。
表3:动作判别规则表
第二步:由表3可知值并不是一个连续的范围值,在跳跃动作与蹲起动作之间还有一些值重复覆盖,存在某些值无法判断动作类型。这时,我们可以借助特殊关节点的坐标进一步判断。实验时,当发生跳跃时,手腕关节点一般会高于头部,在蹲下起立的过程中会低于头部。可以利用这一性质,对落入重合区域的动作进行判断,规则可以用下图解释:
6 实例
Kinect可以通过动作捕捉的技术获取人体的20个关节点生成人体的骨架模型。本章研究的重点就是基于这些关节点的坐标信息计算关键的肢体角度和重心参数,最后通过与Matlab的联合使用,利用判别动作的函数达到自动识别动作的目的。
6.1 Kinect提取关键关节点信息
在使用Kinect设备时,启用骨骼跟踪的应用程序,Kinect便会自动进行设备所设置的20个关节点的跟踪工作,自动形成骨架图像,如图8所示。骨架图像中包含所有关节点的空间坐标信息。通过建立缓冲区和相关方法的调用,借助Matlab的应用程序可以直接获取所需关节点的坐标信息等数据流。
目前为止,获取数据流的方式主要有轮询模型和时间模型。轮询模型通过设置规定的等待时间,以一种“拉”动的方式加载数据。事件模型通过注册数据流事件后以调用事件的属性获取数据。本文采用轮询模型加载所需的数据,方法为:SkeletonStream.OpenNextFrame(T)[1],加载的数据包含了人体简化模型的11个关节点的坐标:
6.2 动作的判别实现
本文首先在自制的人体动作数据库进行动作判别模型的验证。数据库包含了室内采集的4种典型动作,每种动作分别由6人完成,每人均重复5次,运动的方向均与摄像头的方向成90度,采集速率为25fps,每组动作均有96组,约有1000帧数据。
本文随机选取约4/5的实验样本作为初始的实验数据,代入判别函数
归纳,获得了动作函数值的范围,1/5的实验作为测试样本,进行判别函数
的验证,最终的结果较为乐观,总体的识别率达到了79%。具体结果如下:
通过实验我们发现,本文所阐述的方法识别率较好,与DWT(动态规整法)、支持向量机(SVM)等方法比较,不需要大量的数据作为数据库进行一维或者二维的匹配,判别简单,计算量小;最初需要大量实验数据总结判别函数值,之后的每一次判别不需要与数据库中的每一角度值匹配,只需判断最终的判别值即可,判断时间为0.7—1.5s,均值为1.04秒;与基于动态时序的判别方法比较,不需要获得连续的视频或帧图像,计算的速度较快。
7 本文不足及展望
本文在研究过程中存在着许多不足,在此提出,并希望之后可以有所改进:
(1)利用Kinect的骨骼跟踪生成人体模型的过程总,受制于Kinect有限的视场角,有时会出现骨骼点的丢失,导致后续的步骤无法进行。而且在该过程中,有时会生成大量冗余的数据,降低了识别的效率。
(2)在利用层次分析法确定权重时,在建立判断矩阵过程中,人的主管影响较大,容易导致结果不准确。针对该问题,我们可以采用可拓层次分析法进行改进。
(3)本文在做实验的过程中,只针对侧面的动作(即运动方向与摄像机方向成90度)进行分析,且实验中的部分动作存在不准确、不一致的缺点。因此,本文的研究结果只适用侧面动作的识别。由于动作的影响因素复杂又微妙,因此目前还没有特定的识别方法。
参考文献:
[1]余涛.应用开发实践--用最自然的方式与机器对话[M].北京.机械工业出版社.2013.01-150
[2]曾莹.基于角度及轮廓特征的步态识别[D].湖南.中南大学.2008
课题项目:项目名称:基于图像识别的人体姿态分析技术研究 项目编号:2014R409012