周思昀,施水才
(北京信息科技大学 计算机学院,北京 100192)
相较于语言和文字,手势是一种更加自然的交互方式。手势识别技术使用户能够通过手势对计算机下达指令,从而进行一系列操作,在人机交互、智能驾驶等领域均具有重要意义[1-3]。随着计算机的普及,更加自然简单的交互方式成为当下的发展需求。利用手势进行交互,可有效避免使用计算机的复杂性,使得用户不需要进行专业性训练即可与计算机进行交互。此外,手势识别作为非接触式的交互方式,一定程度上更加方便快捷[4]。例如,应用于智能家居领域时,用户不需要与屏幕进行接触即可完成交互。在当下的疫情环境期间,采用非接触式的手势识别输入指令,可避免接触公共设施的屏幕,如快递取件箱输入验证码提取快递,能够有效避免人与人之间的病毒传播。因此,在诸多方面来看,非接触式手势识别的研究对计算机技术的发展有着重要的促进作用,也具有对其应用的现实意义[5]。
使用手势与网页进行交互的过程中,存在着背景复杂度和计算机摄像头所获取的图像像素过低的问题。针对手势检测问题,林海波等人提出一种通过使用深度图像分割出手势目标的方式对手势进行提取[6]。张强等人提出一种基于改进YOLOv3的手势实时识别方法对深度图像进行目标识别[7]。这两种方式都对深度图像信息进行分析,在实际应用中对硬件设备需求较高,因此更适用于交互游戏机或实验室环境。王龙等人采用通过对肤色进行检测获取手势目标的方式,解决了在设备限制的情况下采用计算机视觉的方式对手势进行提取[8-10]。但是,以上实验均在简单背景的实验室环境下进行,对复杂环境的手势识别精准度低于使用深度图像的识别。因此,本文提出了一种针对复杂背景情况下的低像素二维图像手势目标提取方法,采用色彩空间转换后的肤色提取和改进后的边缘提取相结合的方法,利用卷积神经网络进行特征提取和分类,再进一步使用支持向量机(Supportive Vector Machine,SVM)分类方法进行分类,通过分割阈值选取最优结果,有效提升了在复杂背景和计算识别量大的网页交互环境下手势识别的精准度。
针对应用场景进行创新,将手势识别应用于网页交互领域,实验流程如图1所示。
图1 数字手势模型流程
为解决在网页交互使用场景下存在目标图像背景复杂的问题,设计图像预处理方法,对原始图像进行处理,提升训练的精准度。通过自适应曝光增强算法与色彩空间转换,消除亮度对肤色提取的影响,最终实现初始图像中手部的提取。将获得的手部轮廓作为输入数据,使用经过优化后的卷积神经网络(Convolutional Neural Network,CNN)进行特征提取分类,并通过SVM分类实现对手势的分类,进而经过筛选选定合适的结果,最终生成数字手势识别的模型。
手势识别图像拍摄于实验室环境,通过摄像头对6组手势进行拍摄。为了避免因样本量太少而导致训练不足,通常使用如弹性变形、噪声和仿射变换之类的方法进行样本扩展。本文提出的波形失真方法可以在不改变手势结构的情况下结合平移、旋转和缩放来创建伪样本,并实现样本扩展。波形失真是一种通过正弦函数转换原始图像坐标的算法,可表示为:
通过调整正弦函数的幅度A和周期T,可以快速生成大量样本。将正弦波的振幅和周期分别控制在间隔[0,6]和[80,120]中时,旋转角度的字符在±30°之内,水平和垂直平移范围在10%,缩放比例为10%,并随机生成30个伪样本图像,共计获得图像12 000张,其中手势图像9 000张(每种手势基础图像150张,通过旋转缩放创建1 450张),非手势的纯背景干扰图像3 000张,如图2所示。随机抽取900张手势图像和300张背景图像作为测试样本。
图2 训练手势数据
图像预处理对于应用于网页的手势识别系统意义重大。应用于网页交互的手势图像由于用户的不确定性,往往具有背景复杂、亮度不确定的特点。图3为复杂背景下的手势图像。手势图像的背景会对手势获取产生影响。本文中采用优化参数的自适应曝光算法,在图像亮度过低时对图像进行曝光处理,提高了手势目标提取的精准度。此外,对于复杂的背景图像,采用曝光处理能够更好地区分前背景,在肤色检测的步骤中避免背景中存在与肤色相近的颜色而对手势目标的提取产生影响。
图3 复杂背景下的手势
由图4和图5对比可知,采用优化后的自适应曝光算法能够有效避免光线过暗带来的影响,从而顺利实现对手势目标的提取。
图4 未采用曝光算法的手势
图5 采用曝光算法的手势
应用于网页交互的手势识别的识别速度会对用户体验感产生影响。多余信息会对训练速度和后续的识别速度产生影响。为降低训练图像噪点,减少图像细节,对目标图像进行高斯滤波。高斯模糊的实现是将原始图像以正态分布进行卷积。二维高斯函数公式如下:
如图6所示,将图像通过该式(2)转化为被滤波后的图像噪声将明显降低,能够有效减少后续处理工作量。
通过肤色检测提取手势的方法通常受到环境灯光或亮度的影响。本文根据Garcia等人提出的通过色彩空间转换分离强度或亮度的方法[11],选择Ostu阈值筛选算法对肤色进行提取。该方法使用YCbCr和HSV肤色子空间的近似值进行颜色聚类和过滤,以避免不同照明的影响[12]。
图6 高斯滤波处理
RGB转换为YCbCr的公式如下:
式中,Y表示亮度,Cb表示蓝色光分量,Cr表示红色光分量。通过提取其中的Cr分量,对Cr进行Ostu二值化的分割获取掩膜。本文使用的Ostu方法设置阈值是一种自适应阈值二值化方法,采用聚类的思想,将图像中的像素点按照灰度级进行区分。通过分析不同的像素点改变阈值,以实现皮肤颜色的自动检测,最后通过腐蚀膨胀算法整理边缘,过程如图7所示。
图7 图像预处理过程
轮廓检测基于边缘中像素亮度的剧烈变化。根据边缘的原因,对每个像素应用微分方法或微分方法,以检测灰度显著变化的像素并将其标记下来,如图8所示。可见,边缘检测大大减少了数据量,分离了无关信息,并保留了主要结构。
本文通过对卷积神经网络构造进行调整,使用共享权值的稀疏连接并添加稀疏过滤器,有效提升了应用于网页的手势识别训练速度和识别速度。卷积神经网络主要由卷积层和池化层组成,通过设置卷积核在输入的预处理后的图像滚动对图像的特征进行提取[13-14]。卷积神经网络是由神经元组成的网络系统结构,通过对各层之间进行相互连接形成整个神经网络。
图8 轮廓提取
卷积神经网络的采样层可以表示为:
在权值初始化后,传统的卷积神经网络样本按顺序经过卷积层、下采样层和全连接层,通过向下传播的方式获取最后结果。但是,应用于图像识别中的卷积神经网络由于隐藏单元较多,将会出现连接权值过大的问题。此外,迭代次数的选定也将对训练结果产生影响[15]。例如,训练轮数过多可能产生数据过拟合或者局部最优解的问题;训练轮数过少将会影响识别的精准度,导致特征提取不充分等问题。因此,需采用共享权值的稀疏连接并通过稀疏滤波器进行特征提取,以降低神经网络数量级。全连接、稀疏连接对比如图9所示。
图9 全连接与稀疏连接
本文将特征识别分为两个方面,分别对手掌和手指的特征进行提取,最后通过全连接将两种特征进行权值计算生成整个手势的特征。为避免不同指标具有不同的量纲和量纲单位,先对输入的图像数据进行归一化处理,具体计算公式如下:
将手势图像的像素转换成100×100后输入卷积神经网络,网络结构中共设置4层卷积层。第一层卷积层中包含32个稀疏滤波器,卷积核尺寸选择5×5,步长选择为2。随着层数的增加,稀疏滤波器的数量随之增加。在卷积层中,稀疏滤波器将对图像特征进行优化。
具有N个样本的数据集稀疏滤波函数的目标函数为:
总体CNN算法网络架构如图10所示。
图10 CNN网络架构
池化层紧随卷积层后,采用下采样的方式进一步对特征图进行压缩,去除冗余。池化层算法选择方面,根据数字手势识别的特点,特殊特征值比平均特征值更重要。在池化层中选择最大池化的算法对数据进行处理,即在特征图中寻找最大值。这样可以减少计算时间,提高不同空间位置特征的鲁棒性。
池化算法的一般表达式为:
式中,l代表目前池化层数,down(·)代表池化函数。
将下一卷积层中的滤波器个数设置为64,输入数据为上一池化层输出的结果。通过第2层卷积层后,图像尺寸缩小为50×50,后续卷积层做相同处理,最终得到6个大小为6×6的特征映射图。进一步与下层全连接层相连,构成完整的卷积神经网络。
设置3层全连接层对获得特征图进行聚类,可见层数的增加提升了模型非线性表达能力。逐层降低全连接层的输出单元数,已达到对不同数字手势特征图像进行分类的目的,最终由1 024个特征类别抽象为6个数字手势类别。全连接层的激活函数选取修正线性函数(ReLU)的改进函数Leaky ReLu。该函数为非饱和函数,能够有效解决梯度消失的问题。此外,该函数是非线性的,能够反向传播错误并激活多个神经元。若输入值为负,将为所有负值分配一个非零的斜率,避免了ReLu函数在训练过程中由于将负值设置为0导致的问题。
在使用CNN卷积神经网络对数据进行分类后,再使用SVM分类器。当分类结果产生冲突时,采用SoftMax算法输出最大值判决确定最终的结果,如图11所示。卷积神经网络与支持向量机的组合算法能够将训练识别的精准度提升2%~3%。支持向量机分类器是机器学习中常用的二分类处理方法。在样本类别为K的情况下,需要K(K-1)/2个SVM子分类器确定分类结果。
SVM与CNN两种分类器模型具有相对独立性。通过选取适当的阈值TH,对结果的选择进行判定。若SVM的分类结果不小于TH,则选择SVM分类器结果作为手势识别的最终结果;反之,则选择CNN分类器的分类结果。本文采取通过验证集评估的方式估计最优阈值。通过设定不同阈值对测试集进行验证分类结果的正确性,最终确定正确率Pc与阈值TH之间的函数关系Pc(TH),从而获得合适的组合分类器的分割阈值。由于阈值区间可能存在多个峰值,选取(tmin+tmax)/2作为组合算法的最终阈值。
图11 SVM-CNN组合分类器
实验硬件平台为Intel Core i7 2.6 GHz 6核,软件平台为TensorFlow 1.14.0,数据集为百度AI studio数字手势数据集。
在框架下实验使用百度AI studio数字手势数据集对优化后的SVM-CNN组合分类器进行验证。训练过程中,采用随机梯度下降法最小化训练误差。图12为20轮训练下手势识别精准度的区别,在训练到5~6轮时训练数据开始收敛。此外,轮数的提高可以有效提高手势识别的精准度。
由实验结果可知,使用自适应曝光算法调整后的YCrCb色彩空间的肤色检测算法能够准确提取目标手势,避免了光照和复杂背景环境对数字手势识别的影响。采用高斯滤波对图像进行降噪处理,能够在一定程度上减少训练计算量和训练时间。
从表1结果可知,使用SVM-CNN组合的分类器模型对数字手势识别的精准度有所提升。单一的SVM模型对手势的识别正确率为97.28%,而传统的CNN模型具有96.94%的识别率。由于缺少权值共享,上层网络不能很好地服务于下层网络。改进的SVM-CNN分类算法相较于单一模型的分类算法,具有更好的准确性。
如表2所示,在训练时间方面,单一模型的训练速度相较于组合模型的训练速度快。改进的SVM与CNN的组合算法由于添加了分割阈值进行判定结果选择,速度相较于单一模型来说并不具有优势,但是识别效果具有显著提升。此外,SVM与CNN的组合算法应用了稀疏矩阵和权值共享,降低了计算的复杂程度,一定程度上缩短了训练时间,因此时间差距并不明显。
图12 不同训练轮数下识别精准度变化(SVM+CNN)
表1 算法正确率对比
表2 训练时间对比
为达到实时效果,通常视频采用28 fps作为标准,即每秒钟播放28帧图像。实验中对手势模型的测试结果为如表3所示。
表3 各手势识别时间
该结果通过对本文所提出模型使用Python自带图形化工具tKinter创建交互界面,实时获取手势数据并计算平均识别时间获得。不同的手势由于提取特征的不同,在识别时间上略有差距。本文实验模型识别时间在50 ms左右,距离实时处理略有差距,但为实时识别处理垫底研究基础,在实际应用中可考虑适当提高硬件性能以达到实时效果。手势识别的准确率平均可达95.76%,识别精准度较高。通过对手势添加指令能够有效获取当前鼠标位置并对鼠标进行移动,或下达对网页放大缩小的指令。
本文根据应用于网页交互的手势识别的特点改进手势提取算法,有效通过图像预处理和肤色识别对目标手势进行提取和跟踪,并实现使用SVMCNN组合算法正确识别手势0~5。通过实验可以看出,使用SVM-CNN的组合算法对手势进行识别具有可行性。在模型训练过程中,需要测试不同的参数,以提高训练模型准确性,如更改不同的学习率和使用不同的激活函数。
未来研究将集中研究更有效的手势跟踪和手势识别方法,记录和识别手势运动的轨迹。在将手势识别应用于网页交互的过程中,可继续获取每一次交互产生的数据,并对此进行进一步的学习,以完善该应用。此外,可研究其他关于动态手势在运动过程中产生的动态模糊的问题的健壮和有效方法,以便将系统组件集成到具有主动视觉系统的拟人化自主机器人的手势接口和虚拟环境应用中。