基于kinect骨骼系统的手势识别研究

时间:2022-10-16 08:18:37

基于kinect骨骼系统的手势识别研究

摘 要:针对使用计算机视觉技术进行手势识别易受环境影响的问题,提出了一种基于kinect的骨骼系统的手势识别方案。采用Kinect进行深度数据采集,建立深度图像,提取人体轮廓,利用骨骼系统确定腕部坐标及灰度值后,提出根据腕部坐标采用最近邻法则和阈值法提取手势区域,可有效去除非手势目标,对平滑后的手势轮廓用不变矩对4种手势进行了识别。实验结果表明,该方法能有效的识别静态手势,且在不同光照和复杂背景的条件下,具有很强的健壮性。

关键词:Kinect;深度;骨骼系统;不变矩

中图分类号:TP391.41

一直以来,手势作为通用的肢体语言,在信息交流中扮演着重要的角色。人机交流中使用手势,可以使交互直观化、自然化。在手势识别的早期阶段,人们常利用光电传感器等设备采集手部数据来进行手势提取,成本高,约束条件多,不便利。随着计算机技术和数字图像处理技术的发展,基于计算机视觉的捕捉技术逐步变成手势识别的主流[1]。在基于计算机视觉的手势识别系统中,通过摄像机组件对采集人的手部动作,与传统技术相比,更加便宜、便利。但是传统的手势识别算法通常使用肤色模型来实现手势识别,易受照度变化、复杂背景、硬件特性的影响,识别准确性不高[2],针对这种情况,本文以Kinect摄像头获取的深度图像数据为基础,提出基于腕部坐标的手势识别算法,按照Hu矩匹配原则可对4种手势进行有效识别,在不同光照条件和复杂背景下均可达到较高的识别准确率,算法鲁棒性强,可使基于机器视觉的人机交互的更加可靠和流畅。

Kinect是一款性价比较高的图像采集装置,其由红外发射器、红外CMOS和彩色CMOS以及其他部件构成,使用结构光技术主动获取深度信息,可以集80x60、320x240、640x480像素三种分辨率、16位的深度帧数据[3],其帧速最高可达30帧/秒,深度值的精度约为3-30毫米。内嵌图像处理器芯片PS1080 Soc,不需要花费大量的硬件资源进行运算,可以以较低的配置达到实时性的手势数据采集要求。

Kinect设备的配置和访问是通过Kinect SDK实现的。Kinect SDK由Kinect驱动、摄像头栈、USBAudio栈和NUI API四个部分组成。NUI API是其重要核心组件,它提供了本文所使用的深度帧数据流信息和骨骼关节点信息的访问接口。

1 手势识别软件结构

基于Kinect的骨骼系统来进行手势识别的软件结构如图1所示。首先利用Kinect摄像头记录人体手势,经Kinect内部处理获得目标场景的深度帧数据,将其转换为灰度图像,然后提取人体轮廓,通过骨骼系统采集的腕部数据辅助阈值分割获得手势图像,再进行图像平滑等处理,最后进行特征提取达到手势识别的最终目的,实现了非接触式的手势识别[4]。

图1 基于Kinect的手势识别系统结构

2 深度值的空间变换

Kinect的红外摄像头在获取目标图像,对采集的图像进行一系列内部处理后,产生16位的深度帧数据供开发者使用。在供用户使用的16位深度帧数据中,系统使用了其中的高13位数据来表示像素点的深度值,最低3位为用户索引占用,因此使用Kinect SDK提供给用户的深度帧数据时须先对其进行移位处理(原始的深度帧数据右移3位),以获得深度空间各点的深度值,将其映射到灰度空间后可显示深度图像。

假设gmax和dm分别表示灰度空间和深度空间的最大值,di表示深度空间第i点的深度值,g(i)表示该点的相应灰度值,由于当物体离深度摄像头太近时摄像头会对距离误判造成digmax,本文提出用gk进行修正,得到如下深度空间到灰度空间的转换公式:

g(i)=f(di)=gmax-gmax×di/dm+gk (1)

图2 RGB图像与深度图像

图2中,左图为现实场景的RGB图像,右图为场景相应的深度图像。对比两图可知:深度图像中像素点灰度值不是表示物体相应颜色而是代表目标物与Kinect摄像头的距离,且数值大小可以反映目标物距离摄像头的远近程度,目标距摄像头越近,颜色值愈趋于白色。

3 人体轮廓提取

由式(1)可知,不同物体深度值相等时会有相同灰度值,这会对手形提取造成干扰。本文利用Kinect提供的用户索引实现人体轮廓与周围物体分离,以消除大多数物体对手势区域提取的影响。

Kinect对人体轮廓识别,是先在传感器的附近区域扫描,根据人体的结构特征获得疑似人体区域[5],接着使用边缘检测、阀值处理、目标特征点分类等方法,将人体从拍摄图像中剥离出来,最后加上用户索引,组成深度帧数据供开发者使用。已知深度帧数据后3位是用户索引,取值范围为0到6。数值为0时表示此像素点不属于人体,在此用PlayerIndexBitmask变量获得用户索引数据,将人体轮廓从场景中分离出来。

设由深度帧数据获得灰度图像尺寸为w×h,设灰度图像第i点的坐标为(xi,yi)则i=w×yi+xi,由公式(2)可获得人体轮廓,如图3所示。

(2)

g(i)和dp(i)分别为该点的灰度值和深度帧数据值。

图3 人体轮廓图

4 基于骨骼系统的手势识别

4.1 根据骨骼系统获取腕部坐标

由于手腕点与深度摄像头的距离并不固定,仅根据深度图像难以对其精确的定位,在此使用骨骼追踪系统对它进行捕捉。

Kinect骨骼追踪系统对景深图像进行技术处理,使用矩阵变换,机器学习等方式来确定骨骼点的坐标[6]。SDK提供的骨骼跟踪引擎可以给每位用户提供全身共20个关节点在骨骼空间坐标系的位置信息,可追踪的关节点图4所示:

图4 骨骼关节点示意图

在通常情况下,骨骼系统可以对视野内的6个人体进行捕捉,但只会选择其中两个用户进行全身骨骼数据追踪,并且选择过程有着很大的随机性。本文通过SDK提供SkeletonPoint类型的Position对象获取人体骨骼中间点坐标(xM,yM,zM),在比较多个人体zM的值后,选取zM值最小的(即离摄像头最近的)人体作为用户,再利用Joint对象对其左腕和右腕的空间位置进行捕捉。

由于Kinect捕获到的左腕坐标(xL,yL,zL)和右腕坐标(xR,yR,zR)是骨骼空间数据,只有转换到深度空间里,才能真正确定手腕在深度图像中的位置。针对这种情况,微软的SDK提供了Map Skeleton Point To Depth方法来辅助开发者对骨骼关节点数据进行两个空间之间的转换,转换后的腕部坐标位置分别为(xiL,yiL)和(xiR,yiR)。

4.2 手势区域分割

本文使用图像处理中的阈值法[7]进行手势区域分割。根据骨骼系统获取的左右手腕点在深度图像中的坐标位置(xiL,yiL)和(xiR,yiR)可以得到相应的深度值dL和dR,通过公式(1)求出手腕点的灰度值GL和GR,得出如下手势轮廓提取公式:

(3)

式中g(i)为图像第i点的灰度值,G为左手腕灰度值GL或右手腕灰度值GR,d1、d2为裕量值,根据实验结果分别取3和5,gmin和gmax为整幅图像灰度最小值和最大值,一般分别取0和255。

使用公式(3)对深度图像所有像素点进行处理后得到手势图像如图5a所示。

a 图像分割后的手势图像

b 图像去除非手势目标前后的手势图像

c 边界平滑与边缘提取后的手势轮廓

图5 手势图像

4.3 基于腕部坐标最邻近法则的手势轮廓提取

实验中发现,直接按公式(3)进行图像分割时,当手腕关节点和身体某部位深度值相等时,手势图像中易出现其他轮廓,如图5b左图所示,这会对后期的特征提取造成干扰。在此提出使用基于腕部坐标的最邻近法则,对程序进行优化,以提高识别的准确度。即把腕部点正下方8cm处作为长方形下底边的中点,在深度图像中做长为W,高为H的长方形,计算出长方形区域在深度图像中的范围,并将此范围内的所有的像素点按公式(3)提取出来作为手势区域,而把正方形范围外的灰度值置gmin,以去除非手势目标,在确定长方形的范围时需根据人体腕部坐标将其转换成像素位置,转换方法如下:

假设已标定的kinect深度摄像头相当于理想情况下的针孔模型,则深度图像坐标系上像素位置为(xi,yi)点与其在以深度摄像头光心为原点建立的摄像头坐标系下的对应点(x,y,z)之间关系为:

(4)

(4)中d为(xi,yi)点的深度值,K为深度摄像头内部参数,由s,u0,v0,fx,fy决定。其中,s=0为倾斜因子,u0=161和v0=122为图像中心坐标,fx=fy=295为焦距[8]。本文根据GB/T12624-2006对11码掌围和长度的规定,根据实验效果,取长方形长W=25cm,高H=35cm。以右手为例,采用基于腕坐标最邻近法则提取的手势轮廓如图5b的右图所示。

由于阈值处理后获得的二值图像其边缘存在大量毛刺,本文中采用形态学操作的闭运算进行图像平滑。图像处理技术中的闭运算是个先膨胀,再腐蚀的过程。它能在填充物体内细小空洞、连接邻近物体、平滑其边界,同时不会明显改变轮廓面积[9]。试验结果表明,所选取结构元素的膨胀次数和腐蚀次数都为1次时,可以达到良好的去毛刺效果。去毛刺后再使用emgucv进行边缘提取,图5c左图为边界平滑后的手势图像,右图为提取的手势轮廓。

4.4 模板匹配与手势识别

本文设定了4个用于识别的右手手势模板,如图6所示,对于其大小没有严格的量化标准。由于左右手互为镜像,因此可以根据对称性获取相应的左手手势模板。用emgucv对模板进行边缘提取后,提取手势轮廓的Hu矩进行手势识别。

Hu矩指的是利用二阶矩和三阶规范化中心矩非线性组合而成的七个典型的不变矩{hu1,hu2,hu3,hu4,hu5,hu6,hu7},具有旋转,缩放和平移不变性,前三个低阶矩反应了图像边缘的低频信息,后四个高阶矩体现了目标边缘的高频信息[10]。所得Hu矩如表1所示。

手势1 手势2 手势3 手势4

图6 右手手势模板

表1 手势模板的hu矩

手势

不变距 手势1 手势2 手势3 手势4

hu1 9.14E-3 1.33E-2 1.08E-2 5.51E-3

hu2 5.34E-6 8.76E-5 3.90E-5 2.47E-6

hu3 4.93E-8 6.79E-8 5.78E-8 7.13E-11

hu4 6.82E-11 5.86E-10 9.13E-10 1.24E-8

hu5 -1.24E-19 -2.30E-19 -3.68E-18 1.11E-17

hu6 8.19E-15 3.74E-12 -5.50E-12 1.93E-11

hu7 1.58E-20 3.69E-18 5.51E-18 3.42E-18

为了防止7个不变矩变化范围过大,同时考虑到数据出现负值的情况,对数据采用取绝对值再取对数的方法,实际使用的不变矩为[11]:

hui=lghui (5)

(5)中hui表示第i个不变矩,i=1,2,…,7。

相似性有多种度量方式,在本文中,使用距离度量d(α,β)对Hu矩进行匹配,d(α,β)的公式如下[12]:

(6)

式中,huκi表示第i个不变矩,i=1,2,…,7

κ=α,β。

5 实验结果与分析

本文实验数据来自Kinect摄像头采集的320x240像素、30f/s手部深度图像。图像采集过程中让手心正对摄像头、前臂朝上、手掌与摄像头平面平行或倾斜一个很小的角度,在Kinect官方规定的最佳侦测范围采集不同距离、位置以及旋转角度的手部形态图像,如图7所示。

图7 捕捉的手部图像

在光强为17 lux的条件下,每个手势采集150幅图像,手势识别结果如表2所示:

表2 手势识别结果

手势1 手势2 手势3 手势4

总数 150 150 150 150

识别为手势1 149 12 7 10

识别为手势2 1 132 0 0

识别为手势3 0 3 142 9

识别为手势4 0 1 0 128

准确率 99.3% 88% 94.6% 85.3%

漏检数 0 2 1 3

漏检率 0% 1.3% 0.67% 2%

实验结果表明,手势在平移、比例变换和在长方形范围内旋转的条件下,识别率可以达到85%以上。在实验中,手势1取得了较高的识别度,主要是因为该手势的轮廓相对其他几种手势比较简单集中。而手势4由于五指的轮廓较为复杂,增加了手势识别难度,导致了识别率相对降低。从总体上看,静态手势最终识别效果还是让人满意的。

为了验证手势识别方案在不同光照强度下的健壮性,在不同光照强度、相同距离的条件下,每个手势做了100次实验,表3给出了不同照度下各个手势的识别率。

表3 不同光照下识别准确率

光强

手势 105 lux 40 lux 3 lux

手势1准确率 100% 100% 100%

手势2准确率 95% 93% 97%

手势3准确率 91% 96% 97%

手势4准确率 87% 93% 94%

图8是不同复杂场景下手势区域提取的对比。

图8 复杂场景下手势提取效果

由表3可知,4种手势在相同距离,不同光照下识别的准确率达到87%以上,室内的光强弱程度对手势识别的影响并不明显。图8表明在复杂的背景下手势识别系统依旧能准确的对手势区域进行提取。因此,本文所采用的手势识别方案有很强的健壮性。

6 结束语

本文使用Kinect提供的骨骼系统和深度图像进行手势识别,提出根据腕部坐标用最邻近法则提取手势区域,解决了照度变化和复杂背景下手势区域分割的难题,避免了肤色区域重合对手势提取的影响,实验表明对简单手势有着较快、较高的识别率,且有较强的健壮性。但本文采用的模版匹配算法还存在一定的局限性,对复杂手势识别的准确率有待进一步提高,可考虑采用SVM等算法获得更好的复杂手势的识别效果。

参考文献:

[1]曾芬芳,王建华,别小川.基于神经网络的手势识别[J].机器人,1999,1(01):40-4.

[2]关然,徐向民.基于计算机视觉的手势检测识别技术[J].计算机应用与软件,2013(30):155-164.

[3]Jing T,Jin Z.Scanning 3D full human bodies using Kinects[J].Visualization and Computer Graphics,2012,18(04):643-50.

[4]黄季冬.动态手势识别技术研究与实现[D].武汉:华中科技大学,2012.

[5]Shotton,Real-Time J.Human pose recognition in parts from single depth images[C].Colorado Springs:IEEE Computer Society,2011,1298-9.

[6]Jarrett Webb.Beginning Kinect Programming with the Microsoft Kinect SDK[M].Berkeley:Apress,2012.

[7]韩思奇,王蕾.图像分割的阈值法综述[J].系统工程与电子技术,2002,24(06):91-4.

[8]陈晓明.基于Kinect深度信息的实时三维重建和滤波算法研究[D].上海:上海交通大学,2012.

[9]刘军华,雷超阳.基于灰度形态学的车牌定位算法[J].交通科学与工程,2012,28(04):65-71.

[10]卢阿娟,陈普春.基于颜色聚类和Hu不变矩的道路交通标志检测[J].物联网技术,2013(05):43-6.

[11]王华莹.基于机器视觉的车辆检测和车距测量方法研究[D].大连:大连理工大学,2011.

[12]程小鹏.基于特征提取的手势识别技术研究[D].武汉:武汉理工大学,2012.

作者简介:方华(1965-),女,副教授,博士研究生,主要研究方向:自动控制技术和机器视觉;刘诗雄(1985-),男,硕士,硕士研究生,主要研究方向:机器视觉;田敬北(1975-),男,壮族,讲师,主要研究方向:机器视觉。

作者单位:广西科技大学工程训练中心,广西柳州 545000;广西科技大学电子与信息工程学院,广西柳州 545000

上一篇:一种融合多特征与子快的抗遮挡算法 下一篇:云计算安全性问题研究