APP下载

基于Kinect深度信息的虚拟手驱动算法研究

2019-07-16

关键词:关键点手部骨架

(山东科技大学 电子信息工程学院,山东 青岛 266590)

人机交互技术是研究人与计算机之间相互作用方式的技术,其重点在于通过改善使用者与计算机间的交互方式,提高交互的真实性与沉浸感[1-2]。由于传统的鼠标、键盘等输入设备的限制,使用者向计算机发送请求依旧是单通道的形式[3],输入输出的不平衡也导致使用者无法直接、主动地与研究对象进行自然交互。若能将人手用于交互操作,直接通过人手与仿真环境交互,发挥其多自由度的优势,将极大地提高用户在人机交互中的真实性感受,人手控制交互的技术不仅具有理论意义,在实际应用中也具有很大的研究价值。

早期的人手控制交互研究,主要致力于开发专用的硬件设备对手势进行采集,Grimes[4]申请的“Data Glove”数据手套专利,利用弯曲传感器实现了获取手指运动的结果。Davis等[5]通过贴片标记的方式获取手势数据,得到区分识别7种不同手势的结果。该类研究受到所用设备昂贵、受标记物等多种因素影响限制。Kinect作为带有深度信息的体感输入设备[6],价格低廉且无需借助外部标记即可对裸手识别。近年来,基于Kinect进行手势识别的研究有诸多进展,针对手势实现静态与动态识别主要可概括为支持向量机算法[7-9]、隐马尔可夫模型[10-13]和动态时间规整[14-16]等方法。但该类研究仅对固定手势进行识别,忽略了手部的实时运动信息。

国内外也出现了针对手部特征信息提取的研究,以期获取更为丰富的手部追踪数据。Kirac等[17]利用区块识别法实现了基于Kinect的实时手位估计,将人手划分为21个区域做动态识别处理;Raheja等[18]利用手指与掌心检测算法实现了利用Kinect追踪指尖与手掌位置;Braun等[19]利用随机决策森林与机器学习的方法实现了Kinect对人手的实时追踪。Metrilus Gmbh公司[20-21]利用大量数据归纳的决策树特征值并训练Aiolos追踪库,实现了手指关节点位置定位。现有研究仅对原始数据作特征值分析处理,利用手部数据驱动虚拟手参与交互的研究存在不足。

本研究利用Aiolos库与朴素贝叶斯算法追踪获取手部特征信息,通过数据的跨平台传输与运动变换驱动虚拟手。结果验证本研究中的手部特征点数据较Kinect官方SDK骨架追踪特征点数有大幅提升,利用追踪数据驱动虚拟手摆脱了传统交互限制,可发挥人手多自由度优势,对于虚拟现实研究中交互性与沉浸感的提高具有重要意义。

1 基于Kinect深度信息的虚拟手驱动算法流程

基于Kinect的虚拟手驱动算法流程主要通过Kinect获取人手深度图像,结合Aiolos追踪库获取关键点数据,在虚幻引擎环境下逐帧更新数据流驱动虚拟手运动。可分为原始数据采集、Aiolos数据追踪处理、数据流跨平台传输和虚幻引擎平台下的虚拟手驱动等4个模块。设计流程如图1所示。

图1 基于Kinect深度信息的虚拟手驱动算法流程Fig.1 The algorithm process of driving virtual hand based on Kinect depth data

2 基于Kinect的数据获取与处理

深度图像与追踪骨架等原始数据通过Kinect SDK采集[22],深度数据由校准方程标定,Aiolos库在原始数据基础上完成初始化,校正骨架后通过腕部JointType_Wrist节点完成手部区域的分割提取[23],采用贝叶斯算法与Aiolos决策树识别匹配独立手指骨架,获取手部关键点数据。并通过指数平滑和EMA算法完成对点位的运动预测,降低抖动与伪影误差对追踪结果产生的影响。

2.1 原始数据的获取

Kinect是微软开发设计的一款带有深度信息的运动感应设备,提供自然用户界面,检测人体运动、手势、语音命令及人脸识别,可在不借助手动控制设备的情况下与虚拟环境进行交互。其获取深度数据所采用的TOF技术主要通过测量光脉冲之间的传输延迟时间来计算深度信息。

Kinect的数据流主要由中间层即Kinect SDK处理,用于应用层与硬件层的通讯和数据传输。Kinect SDK可分为Kinect驱动程序、Kinect运行时环境与多平台API。以深度信息追踪骨架为例,SDK通过程序驱动传感器工作,然后通过骨架追踪中间件识别深度图像中人体位置,跟踪用户站立(25节点)或坐姿(10节点),每个关节相对于Kinect传感器定位在三维空间中,作为Kinect传感器的偏移量给出。以使用时的视角定义X轴指向右侧,Y轴指向上方,Z轴从设备指向用户。深度数据用像素表示,X轴数据范围-2.2~2.2 m,总范围4.2 m,Y轴范围是-1.6~1.6 m,Z轴范围是0~4 m。由于Kinect深度数据与骨骼追踪数据测量方法的不同,需要采用坐标映射的方法将骨骼追踪点数据从骨架数据空间转换到深度图像的二维空间中。获取的实时三维坐标数据传递给应用层,实现传感器硬件到应用层间数据流的双向传输功能。

获取原始数据需要对Kinect参数初始化[24]。深度与骨架帧数据源暴露元数据并赋予对应读取器访问深度帧元数据的权限。帧数据源开启运行读取器,通过事件注册或轮询方式访问从传感器逐帧获取图像。当帧数据被Kinect捕获,帧事件逐帧发送帧引用,直至帧数据获取完毕。

Kinect获取原始数据信息中的深度值是相对距离,假设原始图像某点p的深度值为dr,则实际深度距离d的标定校准方程[25]为:

d=Ktan(Hdr+L)-O。

(1)

其中,实际的深度距离以cm为单位,K=12.36 cm,H=3.50×10-4rad,L=1.18 rad,O=3.70 cm。校正数据正切近似值平方和的偏差为0.33cm2。利用上述校准函数获取真实深度数据后,可通过坐标映射求得p点的实际位置,设(i,j)为p点投射到Kinect原始图像上的像素位置,(x,y,z)为p点在空间中的实际位置。利用投射点结合深度数据的(i,j,d)求解实际位置(x,y,z)的转换式如公式(2)~(4)所示。

(2)

(3)

z=d。

(4)

其中,u×v为Kinect获取到的深度图像平面尺寸,转换控制常量c取值为0.002 1,此转换过程中p点实际位置重构的精度控制到1 cm以内。控制台负责Kinect数据流的获取,校准后的深度数据转换成EmguCV的Image〈Bgr,byte〉结构体在子线程窗口显示。骨架数据标记腕部JointType_Wrist关节点,由Aiolos库作手部特征值数据的追踪处理。

2.2 Kinect结合Aiolos库的数据追踪

Aiolos追踪库是由提供深度信息咨询服务、定制多类型基于深度传感器3D实时应用解决方案的Metrilus公司开发的手指追踪库。该类库配合Kinect SDK使用,依赖于SDK提供的身体骨骼追踪数据,Aiolos库在Kinect获取的骨架数据基础上完成初始化,并通过深度图像标记的腕部JointType_Wrist节点将人手深度信息与背景分割。为了保证追踪点数据定位准确,本研究使用最小二乘法拟合,将获取到的骨架追踪数据在空间方向上校正,使其与Kinect投射平面保持平行。

校正平面的法向量定义为(a,b,c),骨架数据的校正即为针对骨骼节点的旋转变换。假设校正平面绕X轴旋转角度为α,绕Y轴旋转角度为β时与投射平面平行,则旋转角度分别为:

(5)

(6)

(7)

(8)

追踪库以大量输入数据作为样本,通过贝叶斯算法训练特征值,朴素贝叶斯分类器是一种基于独立假设贝叶斯定理的简单概率分类器。假设样本每个特征与其他特征都不相关,根据先验概率和计算给定的待分类实例属于各个类别的条件概率联合求得后验概率,选取计算所得后验概率最高的类别,进行非确定性的决策。提升Aiolos库提供的决策树搜索手部特征信息的速度与精度。假设区域内任意点p可由训练样本集合进行描述,分类给定训练数据(a1,a2,…,am)的条件下,找出最可能的类特征值点c(p)。由极大后验假设可求出:

(9)

朴素贝叶斯算法假设给定目标点是在样本数据之间,相互条件独立。基于此,应用贝叶斯公式可将公式(9)修正为:

(10)

其中,P(c)为c的先验概率,P(aj|c)为训练样本中不同特征点组合出现概率估计。通过测量两点间深度差异,分析像素位置特征。针对像素位置x:

(11)

Aiolos决策树追踪手部骨架,根据特征值获取手部关键点数据,并通过坐标映射函数进行坐标映射。对深度值进行归一化处理,可保证关键点不受深度数据的影响。关键点序列与空间位置信息以键值对形式存储,某帧手部特征关键点空间位置提取数据如表1所示。

表1 手部特征关键点空间位置提取数据Tab.1 Spatial location data of the key points of a hand

受原始深度图像产生的抖动和伪影误差的影响,关键点数据追踪结果的不可靠性会升高,基于此,本研究引入指数平滑和EMA算法对追踪数据过程进行优化。在追踪关键点位置不变的理想情况下,仅考虑受到深度图像抖动影响,假设当前关键点为点p,更新前关键点为点q,则指数平滑后下一帧关键点p′为:

p′=q+s(p-q),

(12)

其中,s是平滑因子常量,根据需求在0≤s≤1范围内取值负责指数平滑。指数移动平均(exponential moving average,EMA)算法用于追踪数据丢失时预测关键点数据位置,借助关键点数据值丢失前的帧队列进行预测:

St=wyt+(1-w)st-1,

(13)

其中,t为读取当前队列所在帧,y为观察值,权重因子w取值范围为0

图2 手部关键点数据追踪对比图Fig.2 The contrast diagram with the key points of hand

通过对比可知,使用传统KinectSDK方式如图2(a)中圆形区域所示,共可获取4个手部关键节点,仅可根据节点间距离的阈值判断当前张开握拳手势,识别节点较少,手势单一。如图2(b)所示,根据本研究所提出的方法可获取15个手部关键节点,并进一步细分为5组节点模拟手部关节,丰富的节点数据控制虚拟手骨骼节点的旋转位移,有利于更精细化地驱动虚拟手。

3 驱动虚拟手设计

虚拟手驱动处理以虚幻引擎为开发环境,采用数据表形式进行数据流传输。通过虚幻引擎提供的UDataTable读写组件,可将引擎外部的大量复杂数据整理为通用字符序列存放于临时CSV文件中,由引擎逐帧读取数据流,该设计可有效地解决数据多样性与平台差异性的问题,提高处理效率。

3.1 数据流跨平台读写和动态加载

CSV文件将表格数据以文本形式存储,避免类似二进制数字被解译为复杂数据,具有良好的跨平台性能。手部关键点数据写入文件时,需要声明包含有CSV文件路径名称的字符串变量;在每帧遍历关键点数据时,通过文件流处理中的字符串追加函数,将数据与控制台显示同步写入。

虚幻引擎的UDataTable组件通过自定义行结构,用于导入器识别DataTable数据表。传统的UDataTable组件仅支持读取静态数据,由于CSV文件数据会随着外部数据更新而发生改变,这里提出采用C++动态加载*.csv文件的思路。通过动态加载至虚幻引擎的数据流,由关卡蓝图完成数据遍历,经过运动变换得到旋转矢量存储在对应的Orientation变量中,获取到手部控制数据即可对仿真环境的虚拟手进行驱动设计。

3.2 基于蓝图的虚拟手驱动

与传统预设动画序列的方式不同,该设计通过Transform Bone控制器驱动虚拟手,该控制器主要应用在虚幻引擎的捏脸系统中,通过修改特定骨骼变形调整模型蒙皮的形态。在获取手部关键点且经过运动变换得到数据流后,借助Transform Bone控制器分别绑定虚拟手模型的各骨骼节点,灵活处理各骨骼节点的平移、旋转运动,避免了预设动画序列单一性,满足外部数据驱动设计实时性与多样性要求。基于虚拟手建模导入虚幻引擎的骨架网格物体包含腕部与手指多个骨骼节点,将Kinect识别的腕部JointType_Wrist节点平移与旋转数据作用于虚拟手根骨骼,控制虚拟手在世界坐标系的移动与旋转;以根节点为原点建立局部坐标系,通过关键点运动变换后存储在Orientation变量中的旋转信息作为手指控制数据,绑定Transform Bone控制器函数驱动手指骨骼,在局部坐标系下相对于根节点运动。手部控制数据驱动虚拟手运动的蓝图设计如图3所示,获取到手部关键点数据通过运动变换后的旋转平移数据存储,对应作用在各自Transform Bone控制器上,动态控制虚拟手各骨骼关节的坐标点和旋转矢量变化,从而实现虚拟手驱动。

图3 手部控制数据驱动虚拟手的蓝图设计Fig.3 The blueprint design of virtual hand driven by hand control data

4 结果验证

为对Kinect获取数据驱动虚拟手可行性进行验证,本研究采用VS 2015作为数据获取开发环境,并以虚幻引擎作为驱动虚拟手平台。使用Kinect采集300帧人手实时运动状态图像,通过对获取到的原始数据深度校准标定和平滑优化去除抖动后,实现了对手部特征关键点数据追踪,数据流经跨平台传输和运动变换处理后驱动虚拟手的结果与带有追踪关键点的红外图像数据对比如图4所示。

六组手势包含了手部伸展、握拳及各种手指屈伸状态,代表了虚拟手的屈伸与收展运动情况,可验证多种手部运动状态下虚拟手骨骼关节的图形表示,以及利用手部追踪数据驱动虚拟手的可实施性。实验结果表明,通过校准方程和最小二乘法拟合后,可对原始图像准确迅速获取手部追踪数据,手部追踪在弯屈状态下丢失的数据由EMA算法预测弥补,跨平台数据流传输和骨骼绑定驱动效果可满足人手直接参与交互的要求。

图4 六组带有关键点的红外图像与虚拟手驱动效果对比图Fig.4 Six groups of infrared image with key points and the effect of driving virtual hand

5 结语

基于Kinect传感器可获取深度信息的特点,研究了手部追踪数据驱动虚拟手算法,利用Kinect获取手部关键点数据实现对虚拟手驱动。相较于Kinect SDK骨架追踪数据,本方法获取到的手部关键点数据更为丰富,对于人手多自由度运动还原有较大提高。利用数据驱动虚拟手可突破传统交互的限制,在不借助手动控制设备情况下与虚拟环境进行自然交互。该研究应用于矿井灾害动态演化技术验证平台,可以提高平台的交互性和沉浸感。同时也可广泛应用在虚拟现实项目开发中。

猜你喜欢

关键点手部骨架
手部皮肤软组织缺损修复的皮瓣选择
浅谈管状骨架喷涂方法
聚焦金属关键点
肉兔育肥抓好七个关键点
骨架密度对炭/炭多孔骨架压力浸渗铜的影响
两种皮瓣修复手部软组织缺损的比较
发生于手部的硬下疳一例
医联体要把握三个关键点
内支撑骨架封抽技术在突出煤层瓦斯抽采中的应用
复明胶囊疑致手部肿痛1例