牟云环
(陕西国防工业职业技术学院陕西西安710300)
近年来,针对传统绘画技艺存在操作过程复杂、设备繁多和无法撤销的问题,国内外学者研究了如何将这些绘画技艺数字化的方法[1-3]。
沙画创作作为一种新的艺术创作方式,各种背景音乐与沙子动画的结合给观众带来了全新的视听感受[3-6]。然而,沙画演示过程需要演出者携带沙画方桌、细沙和投影设备。且对现场光线和环境有较高的要求,给沙画演出带来了不便[7-9]。因此,本文使用虚拟现实技术模拟了沙画展示的过程,不仅能方便沙画的表演,且还能产生逼真的视觉效果。虚拟现实即使用计算机技术模拟真实世界的各种场景,使人在该种虚幻场景中产生触觉、视觉和听觉等身临其境的感受。
文中使用Leap Motion设备[10]、3Ds Max和Unity 3D等软件,设计与实现了基于手势识别的虚拟沙画展示系统。首先,使用Leap Motion设备获取的手势及其运动信息[11],并提取基于角域划分的特征向量[12-14],再使用该特征向量进行手势识别[15-16]与跟踪;然后使用3Ds Max技术建立虚拟手模型,并使用粒子运动系统模拟落沙效果。测试结果表明,该系统能正确的识别出各种手势,并能满足基本的沙画绘制过程,得到了较为满意的结果。
Leap Motion是一款由两个摄像头和3个红外LED组成的、支持多种操作系统的手势控制电脑体感控制设备。其使用两个摄像头的视觉差和三角测量法来检测手、手指的3D坐标信息,且其精度能达到0.01 mm。文中使用Leap Motion采集手指和手势信息,并使用TBD技术跟踪实现手指骨骼跟踪,整体流程如图1所示。
图1 手势识别与跟踪流程
使用Leap Motion Controller提供的API接口,可以获取Finger、Hand和Tool等数据。当采集到手势数据后,使用Leap Motion Controller对象的Listen子类触发onFrame()函数[17],即可获取帧数据,并传递给手势识别模块进行识别。
Leap Motion检测到人手后,会给其设置一个身份ID,故采集到的数据不仅包括手势坐标和运动数据,且还包括人手ID。当该人手离开Leap Motion的视野范围时,系统会立即注销该ID。文中采集的手势信息,如图2所示。
图2 Leap Motion采集的数据
使用Leap Motion设备可以识别出5只手指,但当手指出现重叠或紧挨时,容易丢失手指信息;再者,识别结果也容易受袖子边缘和手镯等物件影响。导致设备在不同的执行状态下,对相同手势的识别结果可能并不相同。这将严重影响虚拟沙画绘制的精度,故本文使用了一种基于角域划分的特征提取方法。
该特征提取方法先根据手掌方向向量和指尖方向将手掌所在的平面划分为5个角域,每个角域恰好分配一支手指。针对实际情况中某些角域可能含有多只手指,而某些角域不含有手指的问题。该方法将两个在同一个角域的手指中的一个分配给距离该角域最近的空角域内。使用该方法提取的特征向量,如表1所示。
表1 特征向量提取
Leap Motion设备自带了挥手、花圈和点击等手势,但这几种手势无法实现沙画演示的目的。因此,本文重新设计了如图3所示的几种沙画表演中常用的手势。从左到右依次为:撒、划、抹、擦和点。使用Leap MotionVisualizer可分别得到,如图4所示的手势效果。
文中使用tracking-by-detection技术实现手指跟踪,该方法主要用于跟踪手指尖端的3D坐标信息,具有较高的精度与灵敏度。
假设传感器的成像平面为 Δx×Δy,并用ζt表示t时刻是否存在目标,ζt=1即存在人手;否则,不存在人手,前t帧获取的数据可表示为:k1:t={k1,k2,…,kt},并可用式(1)表示传感器单元(i,j)的量测。
将检测到人手且其基本保持静止的时刻作为运动的开始状态,将人手由运动状态变化至速度为0的时刻作为结束状态。则沙画绘制过程中手指的坐标与时间关系为:
图3 本文设计的手势
图4 Leap MotionVisualizer手势效果展示
又由于Leap Motion设备采集的数据信息为离散数据,故可用式(3)表示手指的运动方向:
由此可得到,手指运动素的方向变化率为:
同理,可得到手指的运动速度为:
由该方法得到的手指运动轨迹,如图5所示。
图5 手指运动轨迹示意
文中使用Leap Motion设备获取的手势及其运动信息,并提取基于角域划分的特征向量,再使用该特征向量进行手势识别与跟踪完成虚拟沙画展示系统。系统整体工作流程,如图6所示。从图中可知,为了实现更真实的沙画展示功能,本系统使用3Ds Max技术建立虚拟手模型,并使用粒子运动系统模拟落沙效果。
图6 虚拟沙画演示系统整体流程
文中使用3Ds Max软件和纹理贴图法建立手模型的具体步骤为:
1)构建手的外观模型:首先构建一个多边形box,并调整各条边直至形成手掌轮廓结构;然后,切割出各手指并调整指节长度;最后,细化切分后的多边形网格,增强虚拟手的逼真度[18]。
2)问题贴图:首先对虚拟手的多边形网格进行UV处理;然后,使用Photoshop绘制纹理贴图。
3)使用3Ds Max软件添加骨骼参数,并绑定骨骼与蒙皮。
使用上述流程即可实现仿真手的构建,图7为本文实现的仿真手效果及贴图前后的对比。
图7 仿真手模型及贴图前后效果
文中使用粒子系统实现沙画演示过程中的落沙效果,粒子系统是使用计算机图形学技术模拟现实生活中的火焰、云朵和落叶等一系列无规则景物的视觉效果技术。其基本思想是:使用微小的具有颜色、大小和形状的粒子表示无规则物体,并使用大量的此种粒子构成粒子团,从而使用粒子的产生和凋零过程来模拟景物的运动。
Unity 3D采用模块化管理方法集成了功能强大的粒子系统,故本文使用该软件并配合粒子曲线编辑器实现复杂粒子运动的效果。具体实现步骤为:
1)使用“Particle System”子菜单栏创建粒子系统;
2)根据需要选择Inspector视图中“Particle System”组件的模块控制粒子的行为特征。如本系统使用初始化、Emission、Shape、Rendere和Size over Lifetime等模块实现落沙效果;
3)设置各粒子的生命周期和运动状态等基本属性以满足预期效果,如图8所示分别模拟了沙子落下和堆积的效果。
图8 沙子落下(上)及堆积(下)效果模拟
4)当系统识别出“撒沙”的手势时,启动粒子系统并使用SandPainting脚本文件切换观看视角以得到更好的落沙效果。本文实现的落沙效果图,如图9所示。
图9 落沙效果图
使用上文提出的系统与Leap Motion设备、3Ds Max以及Unity 3D等软件,本文实现了如图10所示的虚拟沙画演示过程。
图10 系统实现效果展示
该演示过程经过了数据的预处理、基于角域划分特征向量的提取、手势设计、识别与跟踪过程及粒子系统模拟落沙效果等。从图10可看出,所提出的系统能正确的识别出各种手势,并能满足基本的沙画绘制过程,得到了较为满意的结果。
传统沙画演示过程中存在操作过程复杂、设备繁多和无法撤销的问题。本文设计实现了一种基于手势识别的虚拟沙画展示系统,以方便沙画的表演与创作。该系统使用Leap Motion设备获取的手势及其运动信息,并提取基于角域划分的特征向量,再使用该特征向量进行手势识别与跟踪;同时,使用粒子运动系统模拟落沙效果。实现与结果表明,所提出的系统能正确的识别出各种手势,并能满足基本的沙画绘制过程。