一种基于多体感设备的虚拟沙画交互结合方法与流程

文档序号:16133286发布日期:2018-12-01 00:35阅读:407来源:国知局

本发明属于虚拟沙画绘制方法技术领域,具体涉及一种基于多体感设备的虚拟沙画交互结合方法,该方法是基于leapmotion的非接触式虚拟沙画绘制和基于pqlabsg4s接触屏的触控式虚拟沙画绘制。

背景技术

人机交互作为虚拟现实技术的核心之一,肩负着提升用户沉浸体验和系统真实性的任务。对传统绘画艺术进行仿真是计算机艺术领域最具挑战性的课题之一,在吸取传统绘画艺术的营养、弘扬传统绘画艺术成就的同时,对计算机仿真绘画技术提出了新的要求。虚拟沙画系统理论上可以集成到任何可视化系统中例如个人pc机,甚至是支持ios、android或windowsphone的移动设备上。现有的虚拟沙画让使用者可以不必考虑时间、地点、对象,随心所欲地绘制自己的沙画作品,其电子版本让绘画者可以随时发布自己的电子绘画给朋友、家人甚至是网络好友。这样的行为可以更快地加快沙画艺术的传播。同时,在电子设备上使用者不需要考虑物理上的限制,例如大面积的沙盘和大量用于沙绘的细沙沙粒。同时使用者不必考虑沙子撒落、设备损坏或者沙子用完等情况,因为这是在虚拟空间中进行的操作,不会消耗除了计算机和电力之外任何东西。但是存在的问题是在绘制的时候不能模拟非接触式的沙画绘制,例如真实沙画绘制中的空中扬沙和漏沙。



技术实现要素:

本发明针对上述技术问题,提出一种基于多体感设备的虚拟沙画交互结合方法。

为解决上述技术问题,本发明采用的技术方案为:

一种基于多体感设备的虚拟沙画交互结合方法,包括以下步骤:

1)数据获取:运用leapmotion的数据捕捉功能,获取非接触式的沙画绘制的手部原始数据,通过handcontroller组件获得所需要的手部数据;将pqlabsg4s触摸屏与显示器通过接口连接好,确保数据的正确传输,通过tuio协议在unity3d中获取接触式沙画绘制的手部触摸数据;

2)数据处理:首先采用特征提取方法对手部原始数据进行预处理,然后引入新的手部特征数据,完成对动态手势的跟踪;通过对应位置的接收器和传感器将手部的触摸数据传递到计算机进行处理,从而产生对应的触摸事件;

3)手势识别:提前训练建立一个包含不同特征数据的手势模板库,实时监测非接触式沙画绘制的手势和手势模板库的匹配状态,通过匹配完成对模拟非接触式沙画绘制的手势识别;采用图嵌入方法构建不同模拟绘制手势的特征向量,依据特征向量建立手势数据库,使用触摸屏采集触摸位置与手势数据库中手势进行匹配,从而完成对模拟接触式沙画绘制的手势识别;

4)沙画渲染:根据真实沙画绘制时的非接触式和接触式绘制手法,将模拟沙画沙粒渲染效果分为非接触式的空中扬沙和漏沙,以及接触式的手指勾沙,点沙,抹沙和铺沙,完成对虚拟沙画的渲染;

5)触摸屏和leapmotion设备的接口调试:采用c#接口将触摸屏和leapmotion设备结合;

6)沙画绘制:完成一个基于leapmotion的以真实手在空中非接触的绘制沙画,另一个是通过pqlabsg4s触摸屏与显示器相粘合的方式,进行接触式沙画绘制,即完成基于多体感设备的虚拟沙画交互结合。本发明采用以上技术方案,首先运用leapmotion的数据捕捉功能,来获取手部原始数据,进而采用已有的特征提取方法对原始数据预处理,引入新的手部特征数据,完成对动态手势的跟踪,接着根据手势特征与手势模板库进行匹配,结合渲染效果完成非接触式虚拟沙画的绘制。利用pqlabsg4s触摸屏获取触摸信息,根据唯一的sessionid标识所产生的触摸事件,对触摸点信息进行新建、更新及移除操作,并通过图嵌入的方法将其转化为特征向量以供手势识别,同时结合沙粒渲染效果完成接触式虚拟沙画绘制,沙画绘制。本发明通过leapmotion和触摸屏的辅助进行虚拟沙画绘制:与真实沙画相比,基本达到了用户的真实体验感,既有空中的三维绘制,又有接触式的二维绘制,能够很好地用于虚拟沙画绘制系统中。

进一步,所述步骤2)中首先采用特征提取方法对手部原始数据进行预处理,然后引入新的手部特征数据,完成对动态手势的跟踪;通过对应位置的接收器和传感器将手部的触摸数据传递到计算机进行处理,从而产生对应的触摸事件,具体步骤包括:

2.1将获取到的手部原始数据信息采用图像处理方法,进而得到手部的数据,可以得到手的位置信息,对手部数据进行预处理可以作为下一步手势识别时的特征数据;

2.2在进行手势特征提取的过程中,引入了新的索引向量进行调整,具体方法:

leapmotion可以捕捉手部的多个关键节点的坐标信息,同时选择手指5个骨骼特征点作为原始输入,该时刻的骨骼索引输入向量定义为vtn=(v1n,v2n,v3n,v4n,v5n),其中,v1n,v2n,v3n,v4n,v5n分别代表tn时刻5个手指的空间坐标,不同的人在进行手势识别时,手距离leapmotion的远近不同,会对同种手势特征的识别产生差异;但是特征向量是具有不变性的,将坐标系由原先的leapmotion为参考原点变成以手掌中心点为参考原点;设手掌中心参考点的三维空间坐标为mtn=(xn,yn,zn),经过坐标系转换之后重新定义tn时刻的手指索引输入向量

vtn=(v1n-mtn,v2n-mtn,v3n-mtn,v4n-mtn,v5n-mtn),定义时序长度为n的手势输入序列为fn=(vt1,vt2,vt3,vt4,vt5),对tn时刻特征索引向量求解梯度,则vtn的x,y,z方向的梯度g=(gx,gy,gz)分别有如下表示

将tn时刻索引向量的梯度g作为手势特征的输入;能够更有效的区分不同手势之间的差异性,实验结果表明,以梯度向量g作为手势特征向量较vtn在实时预测中可靠性更高,误检测率大幅降低。

2.3对获得的手部触摸数据进行处理,取得触摸事件并建立相应的反馈机制;每个触摸事件都具有唯一的sessionid,根据这一标识就可对触摸点信息进行新建、更新及移除操作。

再进一步,所述步骤4)中,采用非接触式的空中扬沙对虚拟沙画进行渲染的具体方法为:首先是对扬沙范围内二维网格像素点进行了区域划分,将原始的圆形区域划分转变成了一种方形的区域划分,沙子从空中洒落到画布是不可能呈现规则的圆形,区域内的像素点可以服从高斯分布来模拟沙粒的随机分布;运用leapmotion的数据捕捉功能,来获取手部原始数据,当检测到手部数据的关键点时,投影到画布上,会有与其对应的像素点q(x0,y0),每个像素点周围都有与其相邻的8个像素点;

方形的函数为,以qmn为沙画扬沙落在画布区域内,以(x0,y0)为区域内起始点的中心,以l长为领域半径划定方形区域

r={(m,n)|m-i|≤l,|n-j|≤l}。

使得渲染效果和真实的沙画更接近。

更进一步,所述步骤5)中采用c#接口将触摸屏和leapmotion设备结合,具体步骤包括:

将接触式绘制沙画和非接触式绘制沙画相结合,以“层次结构”进行划分;最上层是“绘制层”,其直接附属于游戏物体进行渲染或者调用操作;第二层是“识别层”,识别层是一个工具类以tools结尾;第三层是“生成层”,生成层同样是工具类以tools结尾,其中的静态函数负责对像素坐标进行生成;同时系统有状态记录类,以-var结尾,记录沙画参数,定义了两个接口,一个是用于三维空间沙画的绘制,另一个是用于接触类二维沙画绘制;定义了三大类,分别是渲染类,手势识别类和触控类,渲染继承两个接口,手势识别继承第一个接口,触控继承第二个接口;类结构:

(1)touchgesturetools工具类

属于识别层结构,负责在绘制的过程中对触摸式的沙画手势进行识别,以便于绘制层的绘制;pavingsandtouchgesture是用于对铺沙手势进行识别的函数;wipingsandtouchgesture是用于对抹沙手势进行识别的函数;hokingsandtouchgesture是用于对勾沙手势进行识别的函数;当对某个接触式的沙画手势进行识别之后,对绘制层传递手势信息,绘制层做相应的绘制动作;接触式手势识别脚本附着于接受控件上,在项目开始运行的时候,设备不断的检测是否有手的部位在屏幕上进行沙画的绘制,将手在触摸屏上的坐标转化为在虚拟屏幕中的uv坐标,进而进行沙画绘制;

(2)onairgesturetools工具类

属于识别层结构,负责在绘制过程中对非接触式手势进行识别;pavingsandonairgesture是用于空中的扬沙手势识别的函数;leakingsandonairgesture是用于空中的漏沙手势识别的函数;当现实操作的手的部位超过触摸面板一定距离的时候,leapmotion对在空中的手做出轨迹的跟踪和沙画手势的识别,非接触式的手势识别脚本附着于handcontroller上,之后将识别的非接触式的手势类型传递到绘制层,绘制层根据不同的手势方式做出相应的沙画绘制;

(3)verticaltools工具类

属于绘制层结构,负责像素点坐标的预生成;generateeraseverticesv2是用于预生成擦除像素点坐标的函数;generatedropverticesbygaussianv2是使用高斯分布和同心圆算法预生成撒落像素点坐标的函数;generatevertices是产生固定数量随机粒子坐标的函数,一般用于随机绘制;generatesquarebygrv2是使用generaterectv3函数生成正方形范围矩形区域的预计算函数,其中“bygr”是bygeneraterect的缩写;绘制脚本附着于沙盘上,在沙盘上初始化撒沙并且获取当前沙盘的渲染组件;在update里计算渲染组件纹理的uv坐标用于转化鼠标投射坐标到沙盘的局部坐标系;

(4)drawtools工具类

属于绘制层,负责给予传递的gameobject对象go上的主要纹理绘制图形;generatesandbyrandom函数是给go的主要纹理绘制随机的沙粒平铺效果;erasesand和dropsand是绘制层最重要的两个函数,其都具有多重重载,可以根据不同的传递参数进行判定;boostpaint是加强像素点绘制效果的函数,对于高清纹理,单独的绘制单个像素点会产生无法识别的状态,将单个像素点扩展为周围3x3范围,甚至5x5范围的“大像素点”;

(5)sandvar参数存储类

这是最主要的参数存储中介,其中存储了沙盘宽和高,沙盘的沙子颜色常量,沙盘的擦除和撒落半径及形状;函数computedropnum和computeerasenum用于计算高斯量。

c#中接口的特性就是可以多重重载,利用这一特性,可以使非接触式沙画绘画与接触式沙画绘制两个功能完美的结合在一起,增强用户的虚拟沙画绘制体验感。

附图说明

图1是本发明流程图;

图2是高斯曲线图;

图3,4是扬沙渲染效果对比图;

图5是绘制过程演示图;

图6,7是绘制成果展示图。

具体实施方式

如图1所示,本实施例中的一种基于多体感设备的虚拟沙画交互结合方法,包括以下步骤:

1)数据获取:运用leapmotion的数据捕捉功能,获取非接触式的沙画绘制的手部原始数据,通过handcontroller组件获得所需要的手部数据;将pqlabsg4s触摸屏与显示器通过接口连接好,接触式沙画绘制是通过实时扫描外框发射的红外线,一旦手指或大于最低遮断直径的物体对其产生遮挡,即可判断产生接触的手部数据,确保数据的正确传输,通过tuio协议在unity3d中获取接触式沙画绘制的手部触摸数据;

2)数据处理:首先采用特征提取方法对手部原始数据进行预处理,然后引入新的手部特征数据,完成对动态手势的跟踪;通过对应位置的接收器和传感器将手部的触摸数据传递到计算机进行处理,从而产生对应的触摸事件;

具体步骤包括:

2.1将获取到的手部原始数据信息采用图像处理方法,进而得到手部的数据,可以得到手的位置信息,对手部数据进行预处理可以作为下一步手势识别时的特征数据;

2.2在进行手势特征提取的过程中,引入了新的索引向量进行调整,具体方法:

leapmotion可以捕捉手部的多个关键节点的坐标信息,同时选择手指5个骨骼特征点作为原始输入,该时刻的骨骼索引输入向量定义为vtn=(v1n,v2n,v3n,v4n,v5n),其中,v1n,v2n,v3n,v4n,v5n分别代表tn时刻5个手指的空间坐标,不同的人在进行手势识别时,手距离leapmotion的远近不同,会对同种手势特征的识别产生差异;但是特征向量是具有不变性的,将坐标系由原先的leapmotion为参考原点变成以手掌中心点为参考原点;设手掌中心参考点的三维空间坐标为mtn=(xn,yn,zn),经过坐标系转换之后重新定义tn时刻的手指索引输入向量

vtn=(v1n-mtn,v2n-mtn,v3n-mtn,v4n-mtn,v5n-mtn),定义时序长度为n的手势输入序列为fn=(vt1,vt2,vt3,vt4,vt5),对tn时刻特征索引向量求解梯度,则vtn的x,y,z方向的梯度g=(gx,gy,gz)分别有如下表示

将tn时刻索引向量的梯度g作为手势特征的输入;能够更有效的区分不同手势之间的差异性,实验结果表明,以梯度向量g作为手势特征向量较vtn在实时预测中可靠性更高,误检测率大幅降低。(识别率结果见表1)

表1识别率对比

2.3对获得的手部触摸数据进行处理,取得触摸事件并建立相应的反馈机制;每个触摸事件都具有唯一的sessionid,根据这一标识就可对触摸点信息进行新建、更新及移除操作。

3)手势识别:提前训练建立一个包含不同特征数据的手势模板库,实时监测非接触式沙画绘制的手势和手势模板库的匹配状态,通过匹配完成对模拟非接触式沙画绘制的手势识别;采用图嵌入方法构建不同模拟绘制手势的特征向量,依据特征向量建立手势数据库,使用触摸屏采集触摸位置与手势数据库中手势进行匹配,从而完成对模拟接触式沙画绘制的手势识别;

4)沙画渲染:根据真实沙画绘制时的非接触式和接触式绘制手法,将模拟沙画沙粒渲染效果分为非接触式的空中扬沙和漏沙,以及接触式的手指勾沙,点沙,抹沙和铺沙,完成对虚拟沙画的渲染;

采用非接触式的空中扬沙对虚拟沙画进行渲染的具体方法为:首先是对扬沙范围内二维网格像素点进行了区域划分,将原始的圆形区域划分转变成了一种方形的区域划分,沙子从空中洒落到画布是不可能呈现规则的圆形,区域内的像素点可以服从高斯分布来模拟沙粒的随机分布;运用leapmotion的数据捕捉功能,来获取手部原始数据,当检测到手部数据的关键点时,投影到画布上,会有与其对应的像素点q(x0,y0),每个像素点周围都有与其相邻的8个像素点;

方形的函数为,以qmn为沙画扬沙落在画布区域内,以(x0,y0)为区域内起始点的中心,以l长为领域半径划定方形区域

r={(m,n)|m-i|≤l,|n-j|≤l}。

由于真实的沙画中的沙粒洒落到画布分布是具有一定的随机性的,而绝大多数随机事件都服从高斯分布,因此,通过高斯分布随机数来表征像素点的随机性。

当σ取不同值时,g(x)的变化曲线不同,分别取σ=0.3,0.5,1,1.5,3,6,绘制不同的函数曲线,如图2。

经过多次实验对比当σ=0.5时效果较好,与真实的扬沙落入沙盘的效果最逼近。(见附图3,4)

5)触摸屏和leapmotion设备的接口调试:采用c#接口将触摸屏和leapmotion设备结合;

采用c#接口将触摸屏和leapmotion设备结合,具体步骤包括:

将接触式绘制沙画和非接触式绘制沙画相结合,以“层次结构”进行划分;最上层是“绘制层”,其直接附属于游戏物体进行渲染或者调用操作;第二层是“识别层”,识别层是一个工具类以tools结尾;第三层是“生成层”,生成层同样是工具类以tools结尾,其中的静态函数负责对像素坐标进行生成;同时系统有状态记录类,以-var结尾,记录沙画参数,定义了两个接口,一个是用于三维空间沙画的绘制,另一个是用于接触类二维沙画绘制;定义了三大类,分别是渲染类,手势识别类和触控类,渲染继承两个接口,手势识别继承第一个接口,触控继承第二个接口;类结构:

(1)touchgesturetools工具类

属于识别层结构,负责在绘制的过程中对触摸式的沙画手势进行识别,以便于绘制层的绘制;pavingsandtouchgesture是用于对铺沙手势进行识别的函数;wipingsandtouchgesture是用于对抹沙手势进行识别的函数;hokingsandtouchgesture是用于对勾沙手势进行识别的函数;当对某个接触式的沙画手势进行识别之后,对绘制层传递手势信息,绘制层做相应的绘制动作;接触式手势识别脚本附着于接受控件上,在项目开始运行的时候,设备不断的检测是否有手的部位在屏幕上进行沙画的绘制,将手在触摸屏上的坐标转化为在虚拟屏幕中的uv坐标,进而进行沙画绘制;

(2)onairgesturetools工具类

属于识别层结构,负责在绘制过程中对非接触式手势进行识别;pavingsandonairgesture是用于空中的扬沙手势识别的函数;leakingsandonairgesture是用于空中的漏沙手势识别的函数;当现实操作的手的部位超过触摸面板一定距离的时候,leapmotion对在空中的手做出轨迹的跟踪和沙画手势的识别,非接触式的手势识别脚本附着于handcontroller上,之后将识别的非接触式的手势类型传递到绘制层,绘制层根据不同的手势方式做出相应的沙画绘制;

(3)verticaltools工具类

属于绘制层结构,负责像素点坐标的预生成;generateeraseverticesv2是用于预生成擦除像素点坐标的函数;generatedropverticesbygaussianv2是使用高斯分布和同心圆算法预生成撒落像素点坐标的函数;generatevertices是产生固定数量随机粒子坐标的函数,一般用于随机绘制;generatesquarebygrv2是使用generaterectv3函数生成正方形范围矩形区域的预计算函数,其中“bygr”是bygeneraterect的缩写;绘制脚本附着于沙盘上,在沙盘上初始化撒沙并且获取当前沙盘的渲染组件;在update里计算渲染组件纹理的uv坐标用于转化鼠标投射坐标到沙盘的局部坐标系;

(4)drawtools工具类

属于绘制层,负责给予传递的gameobject对象go上的主要纹理绘制图形;generatesandbyrandom函数是给go的主要纹理绘制随机的沙粒平铺效果;erasesand和dropsand是绘制层最重要的两个函数,其都具有多重重载,可以根据不同的传递参数进行判定;boostpaint是加强像素点绘制效果的函数,对于高清纹理,单独的绘制单个像素点会产生无法识别的状态,将单个像素点扩展为周围3x3范围,甚至5x5范围的“大像素点”;

(5)sandvar参数存储类

这是最主要的参数存储中介,其中存储了沙盘宽和高,沙盘的沙子颜色常量,沙盘的擦除和撒落半径及形状;函数computedropnum和computeerasenum用于计算高斯量。

在本方法中使用触摸屏和leapmotion作为沙画手势的数据收集设备,采用基于纹理着色的模拟沙画绘制过程。主要模拟过程完全依赖于纹理像素操作和shader操作。主场景需要一块“平面(plane)”用于沙画绘制着色,一个摄像机用于视角投影,handcontroller控制空中沙画绘制的投射和触摸屏接触信息接受控件,一个空物体用于逻辑控制。

接触式手势识别脚本附着于接受控件上,在方法开始运行的时候,设备不断的检测是否有手的部位在屏幕上进行沙画的绘制,将手在触摸屏上的坐标转化为在虚拟屏幕中的uv坐标,进而进行沙画绘制。

非接触式的手势识别脚本附着于handcontroller上,通过实时监测手部的数据,当真实手超过一定高度,对手进行手部的轨迹跟踪和手势识别。采用dtw方法对沙画手势进行识别,在速度上有较大的优势,能够减少用户在操作时候产生的绘制延迟感。

绘制脚本附着于沙盘(plane)上,在沙盘上初始化撒沙并且获取当前沙盘的renderer(渲染组件)。在update里计算渲染组件纹理的uv坐标用于转化鼠标投射坐标到沙盘的局部坐标系。(见附图5)

6)沙画绘制:完成一个基于leapmotion的以真实手在空中非接触的绘制沙画,另一个是通过pqlabsg4s触摸屏与显示器相粘合的方式,进行接触式沙画绘制,即完成基于多体感设备的虚拟沙画交互结合(见附图6,7)。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1