发明内容
本发明的目的是针对人体连续动作的识别,提出了一种基于改进维特比算法的连续动作识别方法。该方法首先通过建立以人体关节为基准的坐标系消除人旋转平移等因素造成的动作差异性。其次通过按照人体模型的约束对人体骨架坐标进行进一步处理,消除因为人体形的差异,然后通过K-means对骨骼数据进行编码,然后为每个动作训练对应的隐式马尔科夫模型,接着通过活跃关节的变化、速度快慢、角度大小进行连续动作序列的分割,然后为每个子序列筛选出较好的候选动作,最后通过改进的维特比算法找出最佳路径,进而得到最佳的动作序列。
本发明的目的是通过下述技术方案实现的。
本发明的一种基于改进维特比算法的连续动作识别方法,其特征在于:其包括训练过程和识别过程。
所述训练过程的具体实施步骤如下:
步骤一、对训练数据中的人体全身动作视频数据进行预处理。
将每一种人体全身动作的训练数据称为一个训练样本集;一个训练样本集中的训练样本数量用R表示,R≥20。分别对每个训练样本集中的每个人体全身动作视频数据做预处理,得到一条单一动作编码序列。
所述人体全身动作视频是通过三维体感摄像机拍摄获得的单个人体全身动作。
所述人体全身动作视频为RGB-D格式视频。
所述对每个训练样本集中的每个人体全身动作视频数据做预处理,得到一条单一动作编码序列的具体操作步骤为:
步骤1.1:利用人体骨架提取工具从每个人体全身动作视频的每帧图像中提取人的骨架信息。
所述骨架信息为人体关节点在三维体感摄像机所建立的原始坐标系上的三维坐标值。所述人体关节点的个数用符号m表示,m≥10。
所述人体关节点包括头部关节点、脊柱关节点、肩膀中心节点、左肩膀关节点、右肩膀关节点、左肘关节点、右肘关节点、左腕关节点、右腕关节点、左手关节点、右手关节点、臀部关节点、左髋骨关节点、右髋骨关节点、左膝关节点、右膝关节点、左踝关节点、右踝关节点、左脚关节点、右脚关节点。
步骤1.2:建立矫正坐标系。
以脊柱关节点为坐标原点,以左肩膀关节点和右肩膀关节点的连线为X轴,以垂直于X轴并指向所述三维体感摄像机的方向为Z轴,重建右手坐标系,第三轴为Y轴,则重建的三维坐标系称为矫正坐标系。
步骤1.3:获得每个人体全身动作视频的每帧图像中的全部人体关节点在矫正坐标系中的坐标值,得到矫正骨架信息。
步骤1.4:为了解决因不同人体型不同造成的对矫正骨架信息的影响,对步骤1.3得到的矫正骨架信息进行归一化处理,具体为:
步骤1.4.1:建立人体模型。所述人体模型定义了每两个相邻并连接的关节点之间的距离。
步骤1.4.2:按照人体模型中定义的相邻并连接的关节点之间的距离,调整矫正骨架信息,具体操作位:首先保证脊柱关节点位置不变;然后对于其它关节点,在保证相邻并连接的两个相邻关节点连线与矫正坐标系所成角度不变的情况下,调整各个关节点的位置,使相邻并连接的两个关节点的距离与人体模型中与之对应的相邻并连接的两个关节点之间的距离相等。
经过步骤1.4的操作,得到归一化处理后的矫正骨架信息。
步骤1.5:得到每个人体全身动作视频对应的单一动作编码序列。
将每个人体全身动作视频的每帧图像对应的归一化处理后的矫正骨架信息中的m个人体关节点的三维坐标信息,组成一个3×m维的向量;然后通过K均值聚类算法对训练数据中全部人体全身动作视频中的各帧图像对应的3×m维向量进行聚类,并将各帧图像用一个距离最近的聚类中心的序号来表示,该序号称为聚类编码。因此,一个人体全身动作视频用一组代表各帧图像的聚类编码的有序序列表示,该有序序列称为单一动作编码序列。
通过步骤1.5的操作,将每个人体全身动作视频表示为一个单一动作编码序列。
步骤二、建立HMM分类器。
在步骤一操作的基础上,建立HMM分类器。所述HMM分类器的模型参数为λ={N,M,AN×N,BN×M,π,o}。其中,N表示模型的隐式状态数,5≤N≤10;M为显式状态数量,即步骤一第5步中所述对训练数据中全部人体全身动作视频中的各帧图像对应的3×m维向量进行聚类后的聚类数量;AN×N为N×N的状态转移概率矩阵;BN×M为N×M混淆矩阵,即隐式状态转移到显式状态的概率矩阵;π为初始隐式状态分布N维向量;o为最终隐式状态分布N维向量,表示最终的隐式状态的分布情况,用于辅助判断动作的起始位置。
步骤三、训练HMM分类器。
在步骤二操作的基础上,同时训练Q个HMM分类器,Q表示训练数据中人体全身动作类别的数量;即:对应每一种人体全身动作,训练一个HMM分类器。用φq表示第q种人体全身动作对应的HMM分类器,1≤q≤Q。
使用第q种人体全身动作的训练样本集对HMM分类器φq进行训练的过程为:
步骤3.1:给参数AN×N,BN×M,π,o赋初始值,满足AN×N,BN×M,π,o中的元素值均为正数,且AN×N,BN×M,π,o中同一行的元素值之和为1。
步骤3.2:将步骤一得到的第q种全身动作视频对应的全部单一动作编码序列,作为观测序列,输入到HMM分类器φq中,使用前向后向算法对HMM分类器φq里的参数AN×N,BN×M,π,o进行训练。训练过程中使用的迭代公式如公式(1)至公式(5)所示。
其中,为当前迭代得到的最终隐式状态分布N维向量;γT(i)表示T时刻隐式状态为i的概率,1≤i≤N;T为观测序列的长度;γT(i)的值可通过公式(2)得到,公式(2)中当t=T时,即得到γT(i)。
其中,γt(i)表示t时刻隐式状态为i的概率;1≤t≤T;ξt(i,j)表示隐式状态在t时刻为i且在t+1时刻为j的概率,1≤i,j≤N,ξt(i,j)=P(qt=i,qt+1=j|O,λ),qt表示t时刻的隐式状态,qt+1表示t+1时刻的隐式状态,O表示观测序列;λ表示HMM模型的所有参数。
其中,为当前迭代得到的初始隐式状态分布N维向量;γ1(i)可通过公式(2)得到,公式(2)中当t=1时,即得到γ1(i)。
其中,为当前迭代得到的AN×N第i行第j列的元素值。
其中,为当前迭代得到的BN×M第i行第k列的元素值;1≤k≤M;Ot表示t时刻的观测值。
所述识别过程的具体实施步骤如下:
步骤四、对待识别人体全身连续动作视频(用x表示)进行预处理,得到待识别人体全身连续动作视频x的连续动作编码序列。
所述待识别人体全身连续动作视频x包括1个以上人体全身动作。
步骤4.1:利用人体骨架提取工具从待识别人体全身连续动作视频x的每帧图像中提取人的骨架信息,其包含的关节点与步骤1.1中所述骨架信息中包含的关节点相同。
步骤4.2:建立矫正坐标系。
以脊柱关节点为坐标原点,以左肩膀关节点和右肩膀关节点的连线为X轴,以垂直于X轴并指向所述三维体感摄像机的方向为Z轴,重建右手坐标系,第三轴为Y轴,则重建的三维坐标系称为矫正坐标系。
步骤4.3:获得待识别人体全身连续动作视频x的每帧图像中的人体关节点在矫正坐标系中的坐标值,得到矫正骨架信息。
步骤4.4:为了解决因不同人体型不同造成的对矫正骨架信息的影响,对第4.3步得到的矫正骨架信息进行归一化处理,得到归一化处理后的矫正骨架信息。
步骤4.5:得到待识别人体全身连续动作视频x对应的连续动作编码序列。
将待识别人体全身连续动作视频x对应的归一化处理后的矫正骨架信息中的m个人体关节点的三维坐标信息,组成一个3×m维的向量;然后利用步骤一第5步得到的K个聚类中心,将待识别人体全身连续动作视频x的各帧图像用一个距离最近的聚类中心的序号来表示,得到连续动作编码序列。
步骤五、通过步骤三得到的Q个HMM分类器,得到待识别人体全身连续动作视频x包含的动作类别序列,具体过程为:
步骤5.1:依次从待识别人体全身连续动作视频x的每一帧图像中找出活跃关节。具体为:
分别计算当前图像帧中的每个关节与前一图像帧中的对应关节的距离,并将距离最大的关节作为备选活跃关节;如果备选活跃关节与前一帧图像的活跃关节不是同一关节,则判断d2≤2×d1是否成立,如果成立,则将前一帧图像的活跃关节确定为当前帧图像的活跃关节;否则,将当前帧的备选活跃关节确定为当前帧图像的活跃关节。其中,d1表示前一图像帧中的活跃关节与当前图像帧中的对应关节的距离;d2表示当前图像帧中的备选活跃关节与前一图像帧中的对应关节的距离。此方法可以避免因为同时有两个关节在运动而造成的活跃关节在二者之间来回变换。
步骤5.2:对待识别人体全身连续动作视频x进行分割。具体为:
步骤5.2.1:当相邻两帧图像的活跃关节发生变化时,在两帧图像之间进行分割;分割后的每一段视频称为一个图像子序列。
步骤5.2.2:对于步骤5.2.1得到的每个图像子序列,按照动作快慢进行分割。具体为:用D表示当前图像子序列中每帧图像的活跃关节的平均活动距离,所述活动距离为图像中的活跃关节与前一图像帧中的对应关节的距离。如果同时满足以下3个条件:①前一帧活跃关节的活动距离不大于0.3×D;②当前帧活跃关节的活动距离大于0.3×D;③当前帧之前的连续e帧图像活跃关节的活动距离均不大于0.3×D;则在当前帧与前一帧图像之间做分割。其中,5≤e≤15。经过步骤5.2.2的操作,得到更多图像子序列。
步骤5.2.3:对于步骤5.2.2得到的每个图像子序列按照动作变化角度进行分割。具体为:用p1表示前一帧活跃关节;用p2表示当前帧活跃关节;用p3表示后一帧活跃关节;如果向量与向量的夹角大于60度,则在当前帧与下一帧之间做分割。
经过步骤5.2的操作,完成对待识别人体全身连续动作视频x的分割,得到的图像子序列的数量用符号H表示,H≥1。
步骤5.3:选出候选动作。
依次对步骤5.2得到的每一个图像子序列分别进行如下操作:从步骤四得到的连续动作编码序列中,找到当前图像子序列对应的编码序列,并将其分别输入到步骤三得到的Q个HMM分类器,选择概率值最高的C个HMM分类器对应的动作作为候选动作,记为Lh={lh,g|g=1,2,...,C},Lh表示第h个图像子序列的候选动作集合;lh,g表示第h个图像子序列的第g个候选动作;C表示每个图像子序列的候选动作数量。其中,3≤C≤5。
步骤5.4:确定动作类别序列。通过改进的维特比算法依次对每个图像子序列求解最优动作类别。具体为:
步骤5.4.1:通过公式(6)依次计算待识别人体全身连续动作视频x的第h个图像子序列为候选动作集合中第J个候选动作的能量值(用符号Ωh,J表示)。其中,1≤h≤H;1≤J≤C。
其中,U表示第U个图像子序列的动作不是候选动作集合中第J个候选动作,但第U+1个图像子序列到当前图像子序列的动作都为候选动作集合中第J个候选动作,U∈[1,J-1];lU,J表示第U个图像子序列的第J个候选动作;δ是一个常数惩罚项,δ=0.6;λh,J,I可通过公式(7)计算得到;Θh,J,I可通过公式(10)计算得到。
其中,可通过公式(8)计算得到;可通过公式(9)计算得到。
其中,Φh,J表示第h个图像子序列由第g个候选动作第J个候选动作对应的HMM分类器输出的概率;Φh,I′表示第h个图像子序列由第I′个候选动作对应的HMM分类器输出的概率。
其中,表示第K个图像子序列由第J个候选动作对应的HMM分类器输出的概率。
其中,Φ<U+1,h>,J表示从U+1个图像子序列到第h个图像子序列由第J个候选动作对应的HMM分类器输出的概率;η是一个常数因子,η;可通过公式(11)计算得到;οJ,end(h)可通过公式(12)计算得到。
其中,beg(U+1)表示第U+1个图像子序列对应的编码序列里第一个编码值;BJ,i,beg(U+1)表示第J个候选动作对应的HMM分类器的混淆矩阵第i行第beg(U+1)列的元素值;πJ,i表示第J个候选动作对应的HMM分类器的初始隐式状态分布概率向量第i个元素值。
其中,end(h)表示第h个图像子序列对应的编码序列里最后一个编码值;BJ,i,end(h)表示第J个选动作对应的HMM分类器的混淆矩阵第i行第end(h)列的元素值;σJ,i表示第J个选动作对应的HMM分类器的最终隐式状态分布概率向量第i个元素值。
步骤5.4.2:对于待识别人体全身连续动作视频x的每个图像子序列,从步骤5.4.1计算得到的其候选动作集合中候选动作的能量值中选择最大值,将最大值对应的候选动作,作为该图像子序列的动作类别。
经过步骤五的操作,即可得到待识别人体全身连续动作视频x包含的动作类别序列。
有益效果
本发明提出的基于改进维特比算法的连续动作识别方法与已有技术相比较具有如下优点:
(1)能够较好的消除不同人做同一动作的差异性;
(2)能够准确地识别出视频中包含的多个动作;
(3)能够对人体全身动作进行识别;
(4)处理时间远远小于视频时间。
具体实施方式
下面结合附图和具体实施例对本发明方法的实施方式做详细说明。
训练数据包括400条人体全身动作视频,人体全身动作视频是通过微软的KINECT工具拍摄获得的RGB-D格式视频。共8个动作,每个动作采集50个视频,这些人体全身动作视频中只包含单个动作,并且同一个动作的视频由体形不同的表演者拍摄。测试数据为10个,每个测试数据包含2个以上连续动作。连续动作由训练数据中的10个动作随机组合而成。
本实施例采用基于改进维特比算法的连续动作识别方法对测试数据中的视频进行动作识别,其操作步骤包括训练过程和识别过程。
训练过程的具体实施步骤如下:
步骤一、对训练数据中的人体全身动作视频数据进行预处理。
将每一种人体全身动作的训练数据称为一个训练样本集;一个训练样本集中的训练样本数量用R表示,R=50。分别对每个训练样本集中的每个人体全身动作视频数据做预处理,得到一条单一动作编码序列。
所述对每个训练样本集中的每个人体全身动作视频数据做预处理,得到一条单一动作编码序列的具体操作步骤为:
步骤1.1:利用人体骨架提取工具从每个人体全身动作视频的每帧图像中提取人的骨架信息。
所述骨架信息为人体关节点在KINECT工具所建立的原始坐标系上的三维坐标值。所述人体关节点的个数用符号m表示,m=20。
所述人体关节点包括头部关节点、脊柱关节点、肩膀中心节点、左肩膀关节点、右肩膀关节点、左肘关节点、右肘关节点、左腕关节点、右腕关节点、左手关节点、右手关节点、臀部关节点、左髋骨关节点、右髋骨关节点、左膝关节点、右膝关节点、左踝关节点、右踝关节点、左脚关节点、右脚关节点。
步骤1.2:建立矫正坐标系。
以脊柱关节点为坐标原点,以左肩膀关节点和右肩膀关节点的连线为X轴,以垂直于X轴并指向KINECT工具的方向为Z轴,重建右手坐标系,第三轴为Y轴,则重建的三维坐标系称为矫正坐标系。
步骤1.3:获得每个人体全身动作视频的每帧图像中的全部人体关节点在矫正坐标系中的坐标值,得到矫正骨架信息。
步骤1.4:为了解决因不同人体型不同造成的对矫正骨架信息的影响,对步骤1.3得到的矫正骨架信息进行归一化处理,具体为:
步骤1.4.1:建立人体模型。所述人体模型定义了每两个相邻并连接的关节点之间的距离。
步骤1.4.2:按照人体模型中定义的相邻并连接的关节点之间的距离,调整矫正骨架信息,具体操作位:首先保证脊柱关节点位置不变;然后对于其它关节点,在保证相邻并连接的两个相邻关节点连线与矫正坐标系所成角度不变的情况下,调整各个关节点的位置,使相邻并连接的两个关节点的距离与人体模型中与之对应的相邻并连接的两个关节点之间的距离相等。
经过步骤1.4的操作,得到归一化处理后的矫正骨架信息。
步骤1.5:得到每个人体全身动作视频对应的单一动作编码序列。
将每个人体全身动作视频的每帧图像对应的归一化处理后的矫正骨架信息中的m个人体关节点的三维坐标信息,组成一个3×m维的向量;然后通过K均值聚类算法对训练数据中全部人体全身动作视频中的各帧图像对应的3×m维向量进行聚类,并将各帧图像用一个距离最近的聚类中心的序号来表示,该序号称为聚类编码。因此,一个人体全身动作视频用一组代表各帧图像的聚类编码的有序序列表示,该有序序列称为单一动作编码序列。
通过步骤1.5的操作,将每个人体全身动作视频表示为一个单一动作编码序列。
步骤二、建立HMM分类器。
在步骤一操作的基础上,建立HMM分类器。所述HMM分类器的模型参数为λ={N,M,AN×N,BN×M,π,o}。其中,N表示模型的隐式状态数,N=5;M为显式状态数量,即步骤一第5步中所述对训练数据中全部人体全身动作视频中的各帧图像对应的3×m维向量进行聚类后的聚类数量;AN×N为N×N的状态转移概率矩阵;BN×M为N×M混淆矩阵,即隐式状态转移到显式状态的概率矩阵;π为初始隐式状态分布N维向量;o为最终隐式状态分布N维向量,表示最终的隐式状态的分布情况,用于辅助判断动作的起始位置。
步骤三、训练HMM分类器。
在步骤二操作的基础上,同时训练Q个HMM分类器,Q=8。用φq表示第q种人体全身动作对应的HMM分类器,1≤q≤Q。
使用第q种人体全身动作的训练样本集对HMM分类器φq进行训练的过程为:
步骤3.1:给参数AN×N,BN×M,π,o赋初始值,满足AN×N,BN×M,π,o中的元素值均为正数,且AN×N,BN×M,π,o中同一行的元素值之和为1。
步骤3.2:将步骤一得到的第q种全身动作视频对应的全部单一动作编码序列,作为观测序列,输入到HMM分类器φq中,使用前向后向算法对HMM分类器φq里的参数AN×N,BN×M,π,o进行训练。训练过程中使用的迭代公式如公式(1)至公式(5)所示。
所述识别过程的具体实施步骤如下:
步骤四、对待识别人体全身连续动作视频x进行预处理,得到待识别人体全身连续动作视频x的连续动作编码序列。
步骤4.1:利用人体骨架提取工具从待识别人体全身连续动作视频x的每帧图像中提取人的骨架信息,其包含的关节点与步骤1.1中所述骨架信息中包含的关节点相同。
步骤4.2:建立矫正坐标系。
以脊柱关节点为坐标原点,以左肩膀关节点和右肩膀关节点的连线为X轴,以垂直于X轴并指向KINECT工具的方向为Z轴,重建右手坐标系,第三轴为Y轴,则重建的三维坐标系称为矫正坐标系。
步骤4.3:获得待识别人体全身连续动作视频x的每帧图像中的人体关节点在矫正坐标系中的坐标值,得到矫正骨架信息。
步骤4.4:为了解决因不同人体型不同造成的对矫正骨架信息的影响,对第4.3步得到的矫正骨架信息进行归一化处理,得到归一化处理后的矫正骨架信息。
步骤4.5:得到待识别人体全身连续动作视频x对应的连续动作编码序列。
将待识别人体全身连续动作视频x对应的归一化处理后的矫正骨架信息中的m个人体关节点的三维坐标信息,组成一个3×m维的向量;然后利用步骤一第5步得到的K个聚类中心,将待识别人体全身连续动作视频x的各帧图像用一个距离最近的聚类中心的序号来表示,得到连续动作编码序列。
步骤五、通过步骤三得到的Q个HMM分类器,得到待识别人体全身连续动作视频x包含的动作类别序列,具体过程为:
步骤5.1:依次从待识别人体全身连续动作视频x的每一帧图像中找出活跃关节。具体为:
分别计算当前图像帧中的每个关节与前一图像帧中的对应关节的距离,并将距离最大的关节作为备选活跃关节;如果备选活跃关节与前一帧图像的活跃关节不是同一关节,则判断d2≤2×d1是否成立,如果成立,则将前一帧图像的活跃关节确定为当前帧图像的活跃关节;否则,将当前帧的备选活跃关节确定为当前帧图像的活跃关节。其中,d1表示前一图像帧中的活跃关节与当前图像帧中的对应关节的距离;d2表示当前图像帧中的备选活跃关节与前一图像帧中的对应关节的距离。此方法可以避免因为同时有两个关节在运动而造成的活跃关节在二者之间来回变换。
步骤5.2:对待识别人体全身连续动作视频x进行分割。具体为:
步骤5.2.1:当相邻两帧图像的活跃关节发生变化时,在两帧图像之间进行分割;分割后的每一段视频称为一个图像子序列。
步骤5.2.2:对于步骤5.2.1得到的每个图像子序列,按照动作快慢进行分割。具体为:用D表示当前图像子序列中每帧图像的活跃关节的平均活动距离,所述活动距离为图像中的活跃关节与前一图像帧中的对应关节的距离。如果同时满足以下3个条件:①前一帧活跃关节的活动距离不大于0.3×D;②当前帧活跃关节的活动距离大于0.3×D;③当前帧之前的连续e帧图像活跃关节的活动距离均不大于0.3×D;则在当前帧与前一帧图像之间做分割。其中,e=8。经过步骤5.2.2的操作,得到更多图像子序列。
步骤5.2.3:对于步骤5.2.2得到的每个图像子序列按照动作变化角度进行分割。具体为:用p1表示前一帧活跃关节;用p2表示当前帧活跃关节;用p3表示后一帧活跃关节;如果向量与向量的夹角大于60度,则在当前帧与下一帧之间做分割。
经过步骤5.2的操作,完成对待识别人体全身连续动作视频x的分割,得到的图像子序列的数量用符号H表示,H≥1。
步骤5.3:选出候选动作。
依次对步骤5.2得到的每一个图像子序列分别进行如下操作:从步骤四得到的连续动作编码序列中,找到当前图像子序列对应的编码序列,并将其分别输入到步骤三得到的Q个HMM分类器,选择概率值最高的C个HMM分类器对应的动作作为候选动作,记为Lh={lh,g|g=1,2,...,C},Lh表示第h个图像子序列的候选动作集合;lh,g表示第h个图像子序列的第g个候选动作;C表示每个图像子序列的候选动作数量。其中,C=4。
步骤5.4:确定动作类别序列。通过改进的维特比算法依次对每个图像子序列求解最优动作类别。具体为:
步骤5.4.1:通过公式(6)依次计算待识别人体全身连续动作视频x的第h个图像子序列为候选动作集合中第J个候选动作的能量值Ωh,J。其中,1≤h≤H;1≤J≤C。
步骤5.4.2:对于待识别人体全身连续动作视频x的每个图像子序列,从步骤5.4.1计算得到的其候选动作集合中候选动作的能量值中选择最大值,将最大值对应的候选动作,作为该图像子序列的动作类别。
经过步骤五的操作,即可得到待识别人体全身连续动作视频x包含的动作类别序列。