面向人机交互的常见桌面手势识别
2018-10-24朱庆杰陈显军湛永松杨明浩
朱庆杰,潘 航,陈显军,2,湛永松,杨明浩
(1.桂林电子科技大学 广西可信软件重点实验室,广西 桂林 541004;2.桂林电子科技大学 广西高校云计算与复杂系统重点实验室,广西 桂林 541004;3.桂林电子科技大学 广西高校图像图形智能处理重点实验室,广西 桂林 541004;4.中国科学院自动化研究所,北京 100190)
0 引 言
手势交互是一种常见的人机交互方式,也是一种简单、自由的人机交互手段,其有着十分广阔的应用前景[1]。比如人与计算机通过手势进行交互时,人在摄像头下做出一系列手势动作,然后让计算机去响应。为了让计算机学会并初步理解人们的手势行为含义,首先必须要让计算机理解每个手势动作的含义,比如拿起桌子上的杯子喝水这个动作可以分解为“去”、“拿”、“移”这3个手势动作。这只是对手势的初步理解,还有更精细的手部关节的理解等。本文主要研究的是面向人机交互时桌面环境背景下的常见人机交互手势的初步理解。
手势识别技术在人机交互领域有着广泛的应用。从交互设备来说,由最初典型的穿戴数据手套交互到如今的裸手交互,真正实现了从复杂、难学、低效到简单、易学、高效的转变。相关成果比如有学者利用Kinect相机实现简单手语手势识别,并取得了很高的精度[2];有学者基于隐马尔可夫模型和模糊神经网络相结合的HMM-FNN模型来对动态手势识别[3];国外也有学者探究了新的卷积神经网络结构(3D CNN),一般CNN模型只能处理2D图像信息,他们建立了一个3D CNN模型,能同时学习时域和空域的信息[4]。不管是静态手势还是动态手势,有很多学者已经做过相关的工作而且取得了不错的效果。而本文主要针对的是桌面背景下的人机交互环境,并探究了一种动态手势识别算法。桌面背景环境相对简单,但受手势运动的影响背景环境光线的变化会比较大。为此,本文首先对手势图像进行预处理,抛弃背景信息及手部纹理信息的干扰,只保留手部形状信息,并在此基础上探究了一种算法融合了手势的时序信息,最后基于深度神经网络实现对不同手势的分类。
1 算法流程
本文的算法流程如图1所示。
其中,输入端为实时视频帧序列,在实时手势识别中,因为通常情况下两帧之间的时间间隔非常短,没必要对每一帧进行处理,同时这样也会造成性能浪费。本文采取每两帧处理一帧的方法,然后在获取的帧序列中分割手势区域。手的位置信息代表了手的空间特征,不同的手势图像序列则包含了手的时序特征。本文融合后的时空特征影像是一副灰度图,其中手势虚影的明暗程度代表了手势的时序信息,手势所在图像中的位置代表了手势的空间信息。根据构造的动态手势时空特征影像,然后输入卷积神经网络训练,最后根据训练后的模型对手势进行理解与分类。
图1 手势理解算法流程
2 手势时序图像的建模
为了使神经网络更好的识别不同手势,排除其它干扰,本文采取高斯背景建模结合HSV肤色建模的方法去除背景信息,并且抛弃手部纹理信息,只保留手势形状信息。
2.1 高斯背景建模
在桌面背景环境下,手势识别背景相对简单,本文采用单高斯背景建模的方法对背景进行建模。单高斯背景模型建模时,背景图像中固定位置像素点像素值的分布符合高斯分布
B(x,y)~N(μ,σ2)
(1)
式中:B(x,y)表示背景图像中坐标为(x,y)的点的像素值。单高斯背景建模一般分为两步[5]。第一步,初始化背景图像B(x,y),计算了一段时间内若干视频序列中每一像素点的平均灰度值μ及灰度值方差σ2。由此组成背景图像B(x,y)。其中
(2)
(3)
第二步,更新背景图像B(x,y),随着时间增加,光线及背景场景很有可能会变化,背景图像也需要及时更新。背景模型更新公式如式(4)
Bt(x,y)=(1-ρ)·Bt-1(x,y)+ρ·Ft(x,y)
(4)
Bt-1(x,y)表示t-1时刻背景图像,Ft(x,y)表示当前帧,ρ表示背景更新率,用来反映背景图像更新速度,值越大背景图像更新越快。
当使用单高斯背景模型时,运用背景相减法来分割前景。如式(5)所示,(x,y)表示图像中坐标为(x,y)的像素点的灰度值,使用当前帧减去背景来判该点是否为前景
(5)
利用单高斯背景模型除去桌面环境背景实验结果如图2所示。
图2 左边为原始图像,右边为使用单高斯背景模型去除背景后的图像
根据实验结果可知,单高斯背景模型在本实验中并不能很理想的去除背景。由于手来回的移动,造成环境局部光线的变化,从而对背景的判断产生一定影响。如图2所示,手部下面光线较暗的背景区域并没有有效的去除。
2.2 肤色模型建模
彩色图像RGB颜色空间相关特性参见文献[6,7],直接使用RGB模型来对特定颜色建模效果往往不尽人意。相比而言HSV(Hue,Saturation,Value)颜色空间3个分量之间的相关性比较低,与人的视觉感知更为接近。HSV颜色模型是由A. R. Smith创建的一种颜色空间,HSV颜色模型相关定义及特性详细介绍参见文献[7]。在HSV空间中,色调、饱和度以及亮度是分开的,每一种颜色都会对应一个色调值,而且其不受亮度和饱和度的影响,这使得使用HSV空间对颜色建模有着先天的优势。相对于RGB空间,HSV空间能够很好地满足颜色的均匀、完整等特性。从RGB空间到HSV空间的变换如下:
首先将RGB归一化,则R,G,B∈[0,1],RGB空间到HSV空间变换公式为
V=max(R,G,B)
(6)
(7)
(8)
通常情况下,彩色图像的V值不会为零而使H无意义,且H通道决定了物体的色调信息,检测肤色时,我们只关注色调,对饱和度S和亮度V不太关注,故本文只使用HSV色彩空间中H通道来迅速分割出手势区域。
为了建立良好的肤色模型,有的学者从Internet上采集了亚洲及欧美人种的若干幅肤色图像,建立的肤色模型,针对面部、手部、裸露的身体部位都取得了不错的分割效果。而本文的分割对象只限于特定环境下的手部,故为了达到更精准的肤色分割效果,本文肤色图像采集对象仅限于特定环境下的手部,比如不同的手势动作、不同的光线变化(早上、中午、晚上)、不同的实验环境(背景桌面的变化)等。本文采集了不同环境下的手部图像共计88张,手动裁剪出人手肤色区域113块,共计6 007 466个像素。经过计算统计得出这些像素的灰度平均值为128.95,RGB这3个通道的平均值分别为149.23、124.21、99.90。这里R,G,B∈[0,255]。将此结果转换到HSV空间,观察H通道直方图分布如图3所示。
图3 采集的肤色像素中H通道分布直方图
由图中分布结果可以看出,大多数H值分布在0~60的范围。由HSV到RGB空间变换公式可知H值分布在0~60范围内代表了正常情况下人体的正常肤色,而对于极少量的分布在其它区域的H值,考虑其极小的概率密度及实际情况,可以判定这些H值都是噪声引起的。为了使选取的阈值具有良好的手势分割性能,本文结合上述H值分布图并做了大量实验来测试,得出阈值选取6~48的时候结果最优,此阈值不仅能够良好地分割手势,并且具有较好的抗噪能力。使用此肤色模型分割手势后的实验结果如图4所示。
2.3 时序图像建模
动态手势是一个包含多帧的小视频片段,仅仅只用一帧图像无法表述动态手势里包含的时序信息。如果要对这样一段包含多帧的动态手势进分类,直接让卷积神经网络处理起来有些困难,所以本文使用了一种动态手势时域信息提取方法,用一张时空特征影像来表示动态手势。该方法首先根据某一动态手势视频片段分解出多帧原始图像,然后利用高斯背景建模及HSV肤色建模的方法分割出手势,因为不同的手势动作只跟手的形状及运动信息有关,为了排除其它干扰,所以我们对每一帧图像基于背景前景区分二值化处理。处理后的每一帧是一副只保留了手势形状的二值化图像,然后基于连续多帧这样处理后的二值化图像,在时域空间内,根据时间由近及远衰减权重,最后所有帧基于衰减后的权重在当前图像背景区域加权融合。算法流程如图5所示。
图4 对图2中图像使用HSV肤色模型分割后的手势图
图5 动态手势时空特征影像提取过程
为了更准确的表达历史手势随时间的衰减,本文采用指数衰减模型模拟历史手势的衰减,如式(9)
wx=e-βx(x≥0)
(9)
式中:wx表示距离当前帧前面第x帧的权重。为了使权重衰减的不是太厉害,本文取β=0.5。若融合帧数太多的话,则融合后的特征图在时间跨度上较大,当时间跨度比较大时,则最后一帧不是当前帧所要表述的手势的几率也比较大;若融合帧数太少时,则会出现特征影像无法形象表述当前动态手势的问题。考虑到上面两个问题的利害取舍,加上实验测试,本文选取的融合帧数为6帧,既能形象地表述动态手势,又可以降低历史手势对当前手势的影响。代入式(9)得出这6帧的权重为:w0=1、w1=0.60、w2=0.37、w3=0.22、w4=0.14、w5=0.08。
当融合这6帧图像时,本文使用只在背景区域加权融合的算法,且先融合权值最高的图像。首先从要融合的若干图像中选取权值最高的图像M作为待融合的图像,然后在剩余图像中选取权值最高的图像M1,按照像素点遍历,两张图像在点P=(X,Y)处的融合法则如式(10)
(10)
式中:M(P)为M图像中点P的像素值,M1(P)为M1图像中点P的像素值。完成这两张图像的融合后,把融合后的图像替换原来的待融合图像M,然后再在剩余的图像中选取权值最大的图像作为新的M1,然后重复上述步骤,直到融合完所有图像为止。
3 基于卷积神经网络的特征图训练与识别
卷积神经网络(convolutional neural networks, CNN)在近些年逐渐兴起并引起了很大的重视。它是一种效率很高的模式分类方法,由Hubel和Wiesel研究猫脑皮层中相关神经元的功能时发现并提出的。它是一种深度的监督学习下的机器学习模型,主要应用于图像处理领域。
使用卷积神经网络能够高效地对图像进行识别与分类,著名的CNN网络结构有LeNet[8]、AlexNet[9]及VGGNet[10]等。这3个网络结构复杂度依次增加,根据本文的需要,我们选取了AlexNet网络,并在原始网络结构上做出稍微的修改以满足我们的需要。
AlexNet在ImageNet图像分类竞赛中以远超第二名的优异成绩拿到冠军。其网络结构一共分为8层,其中5个卷积层,3个全连接层,输入图像尺寸为227*227*3,最后输出结果总共一千类。ImageNet数据集中所有图像都是静态的,而本文所要完成的是动态手势的分类,为了达到对动态手势识别的目的,本文构建了动态手势的时空特征影像,这是本文网络模型与原始AlexNet网络的主要区别。原始AlexNet网络对图像的纹理细节以及色彩等信息比较看重,而本文主要的目的是对手势的分类,故图像的纹理细节以及色彩信息就没有那么重要。为此,本文构建的时空特征影像为灰度图像,背景为黑色,且没有详细的手部纹理信息,特征影像也不需要很精细的描述。对输入的图像,本文选取了分辨率为64*64*1的尺寸,这样既不会丢失特征影像重要的细节,又会加快模型训练速度及实时手势识别速度,如图6所示。
图6 网络结构
4 实验结果分析及改善
为了测试手势识别分类效果,针对“去”、“拿”、“移”、“放”、“回”、“这”6种常见手势分别采样,本实验每类手势采样1800张,其中每类训练集1500张,测试集300张,总共采样10 800张,然后基于卷积神经网络训练,最后根据训练好的模型做实时手势分类实验。
本实验采取实时处理当前视频帧的方法来对手势进行实时识别,摄像头播放的视频每33 ms播放一帧。本实验采取每两帧处理一帧,也就是说每66 ms读取一帧进行处理,而表述一个动态手势我们用了6帧,故一个动态手势特征图包含的时序信息时间跨度为66*6=396 ms。在本实验中,因为每两帧读取一帧,故每66 ms就会有一个实时的识别结果,而做某一手势动作的用时往往会大于这个时间很多,所以做完一个手势动作往往会有很多识别结果,但理论上这些结果应该都一样,并且跟当前所做的手势动作相符。为了测试实验结果准确率,分别对每种手势进行测试,详细实验结果见表1。
表1 时空特征影像+CNN详细实验结果
为了更好地分析实验结果,我们列出了神经网络概率化结果中Top1的命中率和Top2的命中率,分别用Hit@1和Hit@2表示。从表1中可以看出,手势“移”的识别准确率相对较低,而手势“这”因为该手势相对简单识别准确率最高。而在识别过程中,可能会存在外部的干扰或者因为模型本身识别率不够精确导致这一时刻识别错误,比如做手势“去”的时候,一系列连续的识别结果为:{“去”、“去”、“去”、“去”、“移”、“去”、“去”、},这是一个“去”的手势动作产生的识别结果,因为这应该是一个连续的动作,正常情况下不可能在中间某一两帧突然做出一个其它的手势动作,所以上面的识别结果并不是理想的结果,理想的结果应该为:{“去”、“去”、“去”、“去”、“去”、“去”、“去”、},而其中第5个结果“移”则应该判断为错误的识别结果。为此,我们又考虑了一种基于统计分析的优化方法,来使识别结果更加理想,从而改善识别准确率以及交互体验。
对结果序列进行优化处理时,我们首先设定一个统计范围,然后把当前范围中出现次数最高的结果作为此刻的结果。具体步骤为,设统计范围长度为n,然后统计距离当前时间最近的历史结果序列{t-n+1,t-n+2,…,t},求出出现次数最高的手势识别结果,若有多个出现次数最高的手势,则取离当前时间最近的结果。本文中所取的统计范围长度为5,加上这种统计优化后实时手势识别准确率有了一定的提升。
为了对比实验结果,本文还实验了原始帧+CNN的方法。原始帧图像里面不包含时序信息,但是却包含了手势丰富的纹理信息、色彩信息以及空间信息。该实验同样对每类手势采样1800张,其中每类训练集1500张,测试集300张,总共采样10 800张,然后基于卷积神经网络训练,最后根据训练好的模型进行实时手势识别实验。基于3种不同方法的实验结果对比见表2。
表2 3种不同方法实验结果对比
5 结束语
本文提出了一种桌面背景环境下面向人机交互的常见手势识别的方法,通过对视频中手势动作中的时序信息与空间信息的抽取与融合,得到了能够表述一个动态手势的时空特征影像。不同的手势动作,其时空特征影像有很大差别,故我们可以用不同的特征影像来表述不同的手势动作。最后利用深度学习,构造卷积神经网络对特征影像进行训练,进而实现理解和识别不同的手势的目的。本文中手势分割的准确性对时空特征影像的生成有很大影响,单一的高斯背景建模的方法对手势分割的效果并不是太好,而只使用肤色建模的话又会受到背景中跟肤色颜色相近的物体影响,故本文使用了两者结合的方法,并且取得了不错的分割效果。本文采用基于深度学习的方法来训练不同手势,让机器自动去学习不同手势之间的区别,克服了人为规则对不同手势的描述及区分不够准确的缺点。实验结果表明,本文算法能够对不同的常见动态手势取得良好的分类效果。
本文算法需要改进的地方如下:①加入统计分析优化后,实时识别结果会有2帧左右的延迟;②极端环境下,比如太亮或太暗,手势分割效果不够好。针对第一个问题,这种现象主要由统计范围过大引起的,统计范围越大则延迟越严重,统计范围太小则优化效果不明显,本文在这两者之间做了个取舍,但仍有2帧的延迟。针对第二个问题,本文尚未找到一种良好的自适应的算法来解决此问题。这些都将是我们下一步工作要解决的问题。