姬晓飞,王治博,王 昱
(沈阳航空航天大学 自动化学院,沈阳 110136)
目前的互动演示系统多依赖专业硬件,在使用方式、功能性、应用场景以及系统造价上均有不足。主要的演示系统多采用电磁笔与射频面板相结合来完成交互功能,导致系统结构复杂,需要在交互区域边界放置射频阵列天线,受限于工艺原因,对交互场景与尺寸均有一定要求;并且一旦电磁笔丢失、损坏以及低电量等情况发生,系统将彻底失灵,且造价较高。随着虚拟环境的发展和实现,促使人们追求更加自然方便的互动方式。手势作为最直接和自然的交互方式更适合应用于人机交互[1]。基于机器视觉的手势识别利用图像分析技术从摄像头中检测、跟踪、识别手部动作,并对其行为进行解读,最终做出相应的反应。将此项技术应用于互动演示系统中将彻底解决目前互动演示系统的瓶颈问题,具有广阔的应用前景。
十几年前,基于硬件的手势识别较为普遍,用户必须戴传感手套,虽然获取了较高的精度和稳定性,但系统价格昂贵并且不方便使用[2]。随着科技的不断发展,基于视频的手势识别技术也取得了很大的进步。Kamalpreet Sharma等采用离散小波变换(Discrete Wavelet Transform,DWT)和颜色直方图从手势图像中提取特征[3],利用支持向量机(Support Vector Machine,SVM)识别手势图像,但手部尺寸及光线背景等可变因素仍会影响算法性能。Pathak B等使用一种基于肤色分割的方法[4],其主要根据肤色在YCbCr色彩空间上的聚类特征,来实现手势与背景图像之间的分离,然后识别获得的视频序列中的关键帧,将关键帧引入运动检测编码(Motion Detection Code,MDC),通过对检测到的手势几何形状进行计算的方式提取特征,然后通过支持向量机进行识别。但这种方法对复杂场景没有很好的适应性。近年来深度传感技术快速发展,通过利用深度信息可以提高复杂背景下手部检测的准确性,进而提高手势识别的准确性。Escobedo-Cardenas E等提出基于Kinect深度信息采集设备的词袋模型[5]。采用词袋模型对Kinect采集的手势深度信息视频进行全局和局部特征表示,获得较好的效果。
传统的人工设计特征的方法繁琐且耗时,不能直接从图像中检索有用特征,对原始图像的处理能力较弱,且对于复杂背景的适应性较差。Ying Xin X等引入卷积神经网络(Convolutional Neural Network,CNN)实现自动提取手势的空间语义特征进行手势识别的方法[6]。其准确度比手动提取特征的方法有了大幅度的提升。Molchanov P等提出一种基于3D-CNN的驾驶员手势识别系统,结合时空信息,应用时空视频增强技术降低了系统模型对训练库的过拟合[7]。通过引入深度学习技术进行手势识别使在复杂场景下的手势识别提供了可能。熊才华等人设计了一种在ResNet-50网格基础上进行改进的Faster R-CNN手势识别算法[8],该算法利用ResNet-50中的残差功能模块提高了Faster R-CNN网络的表征学习能力,能适应更广泛的识别环境,但是依然没有改变R-CNN[9]类网络需要先进行区域预测而导致计算量很大的缺点。相比较而言,在相同的VOC2007数据集上,YoloV3[10]实现了相近识别准确度的同时,运算量只有Faster R-CNN的六分之一左右。刘亚玲设计了一种基于VGG-net架构的手势识别算法[11],该算法输入层分辨率仅为224×224×3像素,导致在小目标物体识别和细节分辨上与YoloV3的416×416×3像素的输入层分辨率相比有明显差距。在目前的目标检测领域中,YoloV3在识别速度与准确性上均具有非常好的效果。本文在引入基于深度学习的手势识别基础上,设计并实现在现有的电脑、投影仪系统中,仅仅加入视频采集模块,就可以实现人与投影画面之间交互的互动演示系统,该系统具有墨迹注释、翻页等功能。实验表明,该系统交互流畅自然,方便用户的使用。
基于视频的手势识别互动演示系统硬件构成主要包括摄像机、主机和投影仪。系统先由摄像机实时采集视频,将图像传输到主机,主机对获取的图像进行处理和分析,最后将运行结果显示在投影图像上,完成整个交互过程。系统结构与应用场景示意如图1所示。
图1 系统结构与应用场景示意图
系统的软件主要处理过程如下:首先对输入视频进行交互区域检测,提取交互前景目标,通过分析投影图像特征判断出交互区域。然后在交互区域内通过检测和识别手部动作特征进行手势检测与识别,在手势检测程序中采用深度学习网络提取深度特征,并进行识别和定位。只要当交互区域内目标满足手势识别判据时,识别系统立即将识别结果传送给系统交互模块,跟踪与交互模块根据识别信息操作虚拟硬件实现相应的功能。处理流程如图2所示。
图2 系统软件流程图
基于视频手势识别的互动演示系统主要有以下几个关键技术模块:交互区域检测、手势检测与识别、跟踪与交互,下文将一一进行详细介绍。
投影仪投影区域即是系统交互区域,但因为图像采集设备采集的图像不能与投影图像恰好一致,这样就会对后期交互定位产生不利影响,所以需要对采集图像中的投影图像进行寻找和定位。目前,比较成熟的方法有模板匹配法、特征算子法和域变换法等。模板匹配法一般有平均绝对差、序贯相似性检测等算法。模板匹配方法的优点是匹配精度高,但是计算量大,抗干扰能力差。不适合用于对实时性要求较高的场合。特征算子法一般有SIFT、Sobel等算法,其一般方法是:首先提取图像的特征,再生成特征描述子,但是此方法要求投影图像边缘有比较复杂的纹理,有一定的局限性。域变换法一般有:傅里叶变换、小波变换等。其利用信号在不同域内表现特征分布的不同完成匹配,其缺点是计算比较复杂,并且对信号特征本身也有一定要求。 本文结合实际需要还设计了一种利用投影图像与背景图像上的亮度差异进行定位的方法,但要求投影图像有较高的亮度,对较深颜色的图像定位效果较差。本文同时利用特征算子法和亮度差法,在弥补各自不足的同时,利用两种方法的检测结果提高定位准确率,并且这两种算法都比较简单,对系统运行的实时性影响较低。
手势检测与识别是在已检出的交互区域中检测手势的位置与类型。在这里,我们决定采用两种差异较大的手势:一个是手指手势对应墨迹注释功能,另一个是握拳手势对应翻页功能,如图3所示。视频采集设备在交互区域的正前方。
图3 手指和握拳手势示例
在本文中使用基于卷积神经网络的方法来检测和识别目标手势。CNN由一个或多个互相连接的卷积层组成,是标准多层神经网络[12],合理的架构设计能够准确迅速识别2D视频中的特定目标[13-14]。CNN有两种类型,一种是基于区域候选的R-CNN系列算法(R-CNN,Fast R-CNN,Faster R-CNN),它们是两阶的,需要首先生成候选区域,然后再在候选区域上做分类与回归。第二种是一阶算法,只用单独的CNN同时识别不同手势的类别与位置。第一种相较于第二种具有准确度高的优点,第二类算法虽然准确度稍差一些,但是实时性好。经过实际测验,本文最终采用了YOLO算法[15],YOLO算法是一阶算法,运算速度快,而且提供端到端的手势检测。为了满足本文的实际应用需求,在原有的网络结构上进行了相应的改进,使其在实际测试中实现15帧每秒左右的处理速度,基本实现了实时处理。本系统改进后的网络结构,如表1所示。
2.2.1 YoloV3网络结构
YoloV3采用了单流的卷积神经网络结构。原YoloV3为了在多重空间尺度下拥有良好的适应性,在Darknet-53网格结构基础上,分别在32×32,16×16,8×8进行旁路输出和升采样再连接的操作。为了更好适应本系统的实时性需求,在识别输出部分做了如下改动:去掉旁路分支,加入均值池化层,增加全连接层,最后用softmax分类器。
表1 卷积神经网络结构表
2.2.2 YoloV3检测流程
YoloV3将一整幅图像作为网络的输入,首先将图像分为N×N个网格,然后计算检测目标的几何中心属于哪个网格。每个网格要预测n个边界框,网络对每个边界框有5个预测值:a,b,v,i和可信评价值,坐标a,b代表了边界框的几何中心相对于网格中心的偏置值。坐标v,i代表了预测边界框的宽度和高度。可信评价值同时包含了所预测的边界框中含有手势的可信度和位置预测的准确度。首先设定阈值过滤可信评价值较低的边界框,再对剩余边界框进行非极大值抑制,最后得到结果。
2.2.3 YoloV3模型训练过程
(1)首先通过LabelImg将拍摄好的手势图像打标签,生成xml格式文件;(2)Yolo通过对训练图像数据集做K均值聚类,得到几类合适的候选框尺寸,生成锚点文件;(3)读取全部训练手势标签生成分类文件;(4)确定训练参数,例如:优化器类型、学习率和分包尺寸等参数。
当出现特定手势后,系统需要跟踪该手势的运动,做出相应的响应。比如该手势进行画线的操作,投影中也相应的进行画线操作。为了跟踪特定手势的运动,本文通过对识别得到的位置信息进行卡尔曼跟踪[16],以提高系统对目标位置信息丢失与错误的冗余能力。然后通过系统接口[17]发起系统事件,实现交互功能。
目前本系统中主要实现两种功能,分别对应在Powerpoint演示片内进行的墨迹注释和翻页功能。首先介绍一下墨迹注释功能的实现过程:(1)当系统检测到手指手势时通过win32 api.SetCursorPos(x,y)语令移动鼠标至手势检测模块所获得的用户手势位置。(2)通过win32 api.keybd_event(VK_CODE[word])语令发起键盘输入事件,开始墨迹注释。(3)对手势进行卡尔曼跟踪并发起鼠标操作事件win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN),通过手势轨迹进行墨迹注释。(4)当手势改变就发起鼠标操作事件win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP),结束墨迹注释。
同样,若检测到握拳手势就执行一次翻页操作并暂停翻页功能2秒钟,防止出现误操作。
本系统主要分为三大部分:交互区域检测、手势检测与识别、跟踪与交互。下面分别介绍各个部分的测试过程与功能示例。
本文结合实际需要,经过实际测试决定同时采用基于边缘特征和亮度差的算法,完成交互区域定位功能。经过实际测试,sobel算子的边缘检测算法效果良好,检测结果与实际投影图像差异较小,实际效果如图4所示。
图4 Sobel算子边缘检测效果
亮度差法通过计算整幅图像的平均亮度并通过与行平均亮度进行比较来查找投影图像边缘。文中利用计算相邻区域的平均亮度之比的方法来查找投影图像边缘。经过测试,当亮度比为0.8时,边缘查找效果良好。实际效果如图5所示。
最后,同时使用两种方法的识别结果,计算4个角点像素的位置平均值,使用平均值作为最终的检测结果。通过对多种投影图像进行测试,得到了良好的检测结果。
本文选定了手指和握拳两种手势作为标志手势,完成系统的指定功能。经过对YoloV3网络做适应性改进后,为了使训练网络达到指定要求建立了一个420幅图像的手势识别训练库。为了更好提升系统的泛化能力,在使用训练库训练之前首先载入经过VOC2007数据集训练的网络权值,然后选定Adam优化器经过100次训练,系统识别达到了比较好的效果,示例如图6和7所示。
图5 亮度差法边缘检测效果
图6 手指手势识别结果
图7 握拳手势识别结果
本系统总共实现了两种交互功能,分别是在Powerpoint中进行墨迹注释和翻页。经过对不同背景、不同纹理复杂度与亮度的投影图像进行测试,系统表现出了良好的鲁棒性。其中Powerpoint墨迹注释功能示例如图8所示。
图8 墨迹注释功能示例
本文在投影演示系统的基础上,通过增加视频采集设备设计了一套基于手势识别的互动演示系统,该系统具有根据手势进行重点标注、翻页等功能。基于卷积神经网络的手势特征识别与定位模块,对复杂背景具有很强的适应能力。通过调用系统接口实现了通过手势进行实际系统操作的功能。本系统提高了用户演示过程中的使用体验,并且硬件结构简单,可靠性强。唯一的不足是卷积神经网络对计算机配置要求较高,目前本系统只能识别静态手势,后期如果扩展可交互手势的类别,手势识别的准确率会有所下降,下一步将进一步研究基于卷积神经网络的动态手势识别方法,进一步提高系统的应用范围。