刘芬,吴志攀
(1.惠州城市职业学院信息学院,惠州516025;2.惠州学院信息科学技术学院,惠州516007)
目前,在不少领域都出现了人体动作识别的应用,例如视频游戏、虚拟现实、智能监控等方面都运用了人体识别技术,这是因为识别技术的快速发展和人们在该领域中的需求,传统的人机交互已经不能满足人在这方面的要求,这促使着人体动作识别在该方面的研究需要加强深入。然而,我国目前在人体动作识别这方面还不够成熟,而其他国家已经在这方面有所涉及。例如,在视频游戏领域,微软公司推出了XBOX 游戏机,让玩家享受到了体感游戏的乐趣;在虚拟现实领域,Facebook 的Oculus Rift、HTC 的HTC Vive、微软的HoloLens 全系眼镜,都说明了国外在动作识别方面下了功夫。人体动作识别具有便利性,使用的工具少、只需要少量传感器和良好的识别算法,能够实现效果良好的人机交互。
文献[1-2]提出了基于Wi-Fi 信号、Arduino 芯片等的人体动作识别系统设计与实现,但不具有Kinect 的便利性;文献[3-7]基于Kinect 进行了相关动作识别的研究与应用;文献[8]提出了关节角度识别,为降低维度识别提供了依据;文献[9-13]提出了基于SVM 的人体动作识别算法研究,但存在着一定的误识率。
Kinect 是微软公司于近年来推出的一款非接触式体感设备,它主要由红外设备、RGB 摄像设备、深度摄像设备以及麦克风设备等组成,具有全身骨骼跟踪和行为轨迹捕捉等功能。Kinect 利用一系列的传感器对人体进行数据采集,运用机器学习的方法获得骨骼信息,本文对其骨骼信息进行特征提取,最后利用一种基于统计学习理论的支持向量机(Support Vector Machine,SVM)分类算法对所提取的特征向量进行人体动作识别。人体动作识别的总体流程图如图1 所示。
图1 人体动作识别的总体流程图
人体动作识别的基础是利用好人体在某个关键时间点的关节点,可以使用Kinect 获取在某一时刻的静态人体姿势。因为Kinect 能在其视野中得到人体的骨骼点,进而对骨骼点利用算法计算出它的三维坐标。在摄像头视角的三维空间的坐标系中,能够建立三维人体模型。Kinect 能识别20 个骨骼点,分别是头、左右手、左右手腕、左右肘、左右肩、肩部中心、脊椎中心、髋部中心、左右髋、左右膝、左右脚踝和左右脚,如图2所示。在Kinect 建立人体模型之后,紧随着需要得到描述人体动作的特征向量。因为从Kinect 获取的所有关节点直接分析较为复杂且冗余,所以本文将对三维人体模型进行简化,省略了腿部的骨骼,只研究人的手、手臂和肩膀,这是因为这些部位在人做出动作时是最灵活的,研究这些部位具有代表性。
图2 Kinect人体三维骨骼点模型
动作数据的特征提取具体步骤是:构造人体运动向量,这些向量之间的夹角用来表示肢体的旋转,相对模比值来表示肢体的相对位移,两类参数生成描述动作的融合特征提取,并产生融合特征空间向量以供SVM 进行动作分类识别。动作数据的特征提取过程如图3 所示。
假设已知三维空间的两点为 pi(xi,yi,zi) ,pj(xj,yj,zj),则它们之间的距离dx,y,z如公式(1)所示:
若需要求解关节的角度,在三维空间中则需要至少三个关节点的坐标,假设为pi,pj和pk,计算出两两距离假设为dij,dik和djk,再使用余弦定理可求得各关节点两两夹角为公式(2)所示。
本文将提取出人体动作运动向量的夹角和模比值作为融合特征值,并生成融合特征空间向量以供SVM分类使用。
图3 动作数据的特征提取
SVM 的基本思想:假设在m 维空间里有很多样本点,如果能有一种方法能找到m-1 维的最优超平面,这个平面可以恰好把空间中的样本点平均分在最优超平面的两边,那么这个m-1 的超平面就可以被用来对随机样本点进行分类。
特征空间存在线性可分和线性不可分情况(线性可分分类平面示意图如图4 所示,线性不可分分类平面示意图如图5 所示),这些情况都可以被SVM 进行分类。面对线性可分情况时,可直接使用SVM 找出特征的最优分类超平面来进行分类。而线性不可分的特征空间,需要在找出最优分类超平面之前加一个步骤,SVM 将使用核函数的方法,将特征空间转换到更高维的空间中,因为在更高维的空间中,不可分的问题会变得可分,可分之后在按照线性可分的步骤就可以进行分类。
线性可分的特征空间下的向量机如公式(3)所示,其中,i=1,2,3,....l;w、b 指的是分类平面系数;xi指的是第i 个训练样本,yi指的是第i 个训练样本所属类别;ai指的是第i 个训练样本对应的是拉格朗日系数,且ai≥0;xs表示某个特定的支持向量,ys表示xs所属类别。
图4 线性可分分类平面示意图
图5 线性不可分分类平面示意图
线性不可分的特征空间下的向量机如公式(4)所示,其中ζi是引入的松弛变量,用于控制离群点。这样,通过让部分样本距离分类平面小于1,牺牲了一些分类的准确性,从而让算法对分类的识别更加广泛。
本文对UCF101 数据集中人体动作部分100 个样本进行了训练与识别,分别随机选取了左挥、右挥、上举和上举各30 个动作用作SVM 的测试,剩余的各70个动作用作验证,SVM 算法识别率尚可,统计结果如表1 所示。
表1 SVM 算法识别统计结果
SVM 算法分类结果超平面示意图(部分)如图6所示。
图6 SVM算法分类结果超平面示意图
本文提出了一种基于Kinect 与SVM 的人体动作识别算法,Kinect 可获得深度图像进而取得人体骨骼点信息;同时SVM 具有优秀的分类能力,面对线性和非线性高维特征空间时能有较高的分类能力,有效避免了维数灾难。具体步骤是先采用Kinect 传感器对人体动作进行捕捉生成深度图像,经处理建立三维人体模型,提取出其运动向量的夹角和模比值作为特征值,最后使用SVM 对该特征值进行人体动作分类识别。采用UCF101 数据集和MATLAB 程序对人体动作识别的整个过程进行了实验分析与验证,该算法具有很高的鲁棒性和识别率,但人的动作是复杂多样的,且每个人的身高、肢体长度、行为动作等客观条件不同,这使得要能达到复杂人体动作识别,还需要做更多的研究。