一种基于动态3D手写数字识别的虚拟人交互系统及方法与流程

文档序号:12122018阅读:426来源:国知局
一种基于动态3D手写数字识别的虚拟人交互系统及方法与流程

本发明涉及虚拟现实和智能识别技术领域,尤其是一种基于动态3D手写数字识别的虚拟人交互系统及方法。



背景技术:

随着社会的不断发展和电子设备的不断普及,人机之间的交互变得越来越频繁。人们也一直在不断努力创造一种更加自然、人性化的交互系统。

在对机器的输入方面,传统的交互设备如:鼠标、键盘、手柄等,又或者是比较新型的交互设备如:数据手套、全身运动捕捉系统等穿戴设备,都会给人的行为附加上一些物理条件的限制,一定程度上束缚了人的自由,增加人的负担,而且这些交互方式均不是人们日常活动中以语言、动作为主的交互方式。

在机器对人的反馈方面,比较传统的方式如:在软件交互界面弹出一些图片、对话框,播放一段音乐或人声,也就仅能通过视觉、听觉与人进行交互,类人型机器人和智能语音助理,它们与人的交互也只是通过识别一些比较僵硬的静态肢体动作或简单的语言来进行,由此可见,目前智能体的外形及交互方式比较呆板单一,还没有达到能像人与人交互同时具有动作和语音的程度。

对于这样的研究现状,我们需要设计一个具有高度类人外观及动作,可通过动作及语言等方式进行动态交互的智能体系统。基于Kinect摄像头捕捉并识别人体连续动作的交互手段,人性化程度高,操作比较自由便捷友好,没有传统人机交互设备给人带来的束缚,虚拟人智能体,拥有人的外观、肢体动作、表情及语言,容易让交互对象产生亲切感,以解决传统及现有人机交互反馈环节比较呆板单一的局限性,将两项技术相结合,可实现更加人性化、类人化的生动有趣的人机交互过程,给用户带来一种新的体验。



技术实现要素:

本发明的目的是针对上述现有技术的不足,提供了一种基于动态3D手写数字识别的虚拟人交互系统。

本发明的另一目的在于提供一种基于动态3D手写数字识别的虚拟人交互方法。

本发明的目的可以通过如下技术方案实现:

一种基于动态3D手写数字识别的虚拟人交互系统,包括手势与数字识别模块、中央服务器模块与虚拟人控制模块,所述手势与数字识别模块用于提取手部区间,识别手势及手写轨迹;所述中央服务器模块用于连接手势与数字识别模块和虚拟人控制模块,实现数据的采集,传输和命令发送;所述虚拟人控制模块为在实际中与人进行互动的载体,展示出虚拟人,根据从中央服务器模块接受来的命令,对虚拟人进行动作、语言、表情等操控,实现与人的交互。

优选地,所述手势与数字识别模块中采用Kinect作为传感器。

优选地,所述中央服务器模块的搭建是基于RPC-Thrift架构,在该架构中,定义统一的传输数据变量,包括识别的手势与数字以及对虚拟人的动作、语言控制,运用Thrift代码生成器编译成C++和Python的客户端与服务端服务代码框架,接着运用Python运行服务器端的代码搭建起电脑本地端的服务器,并运用决策树设计出基于手势与数字识别结果的虚拟人控制决策架构。

优选地,所述虚拟人控制模块搭建虚拟人是基于smartbody系统结合ogre游戏引擎,结合3D-Max建模软件和motion Builder动作设计软件,对于复杂动作的设计,采用Kinect获取真人骨架信息嵌套到虚拟人上的方法来完成,并通过Python语言进行行为动作、语言、表情的控制。

本发明的另一目的可以通过如下技术方案实现:

一种基于动态3D手写数字识别的虚拟人交互方法,所述方法包括如下步骤:

1)通过手势与数字识别模块中的Kinect获取用户的深度数据及骨架信息;

2)结合步骤1)中获得的深度数据和骨架信息,利用人在空中书写时手为身体与Kinect距离值最小部分的原理,分离出人手的部分;

3)提取出手部轮廓,利用外轮廓线距离手心峰值点数目原理,识别手部手势,并发送给中央服务器模块;

4)将手部区域距离摄像头最近的点定为指尖点位置,当识别到手部手势为书写手势,即步骤3)中提到的手指峰值点数目等于1时,开始记录指尖点位置,当识别到手部手势为结束手势,即步骤3)中提到的手指峰值点数目在4以上或跟踪手掌丢失时,指尖点位置记录停止;

5)将步骤4)中记录的指尖点位置,即手写轨迹,进行轮廓检测、提取和笔画粗细优化及转换处理;

6)将步骤5)中处理后的手写轨迹,输入到DWKNN识别器中进行数字识别;

7)将步骤6)中的识别结果通过RPC协议发送给中央服务器模块;

8)中央服务器模块通过RPC协议接收来自手势与数字识别模块的识别结果;

9)中央服务器模块根据步骤8)中接收的识别结果,通过RPC协议向虚拟人控制模块发送对虚拟人动作、语言、表情的控制命令;

10)初始化虚拟人控制模块中的虚拟场景,展示出虚拟人;

11)虚拟人控制模块通过RPC协议,接收来自中央服务器模块的虚拟人控制指令;

12)根据步骤11)中接收的虚拟人控制指令,对虚拟人实行动作、语言、表情等相关操控,实现人机交互。

优选地,步骤2)包括如下步骤:

a)采用Kinect作为传感器,采集用户的深度数据及骨架信息;

b)通过Kinect提供的API提供深度图像及深度图像中每一个像素点所属的用户ID;

c)运用用户ID数据在深度图像中分离出一幅身体部分的深度图像;

d)对只有身体部分的深度图像进行遍历,找出具有最小的深度值的点;

e)基于空中书写时指尖会在整个人体的最前端的原理,将具有最小的深度值的点的位置定为手指尖点的位置;

f)再遍历只有身体部分的深度图像,分离出大于手指尖深度值一定数值的图像,将其认定为手部图像。

优选地,步骤3)包括如下步骤:

g)对步骤f)中的手部图像进行边缘检测,获取手部轮廓点集;

h)对点集求最小面积包围圆,将圆心定为手心点;

i)计算点集中的每个点与手心点的距离,按顺时针方向遍历,找出峰值点;

j)根据峰值点,即手指点的数量,得出最终的人手手掌状态结果。

优选地,步骤5)包括如下步骤:

k)当识别到开始手写的手势后,开始记录下每一个指尖点的位置,并在一幅图像中实时地画出这些点并连接起来,展示给用户;

l)待手写结束后,获得一个关于指尖点手写数字轨迹的点集以及一幅原始轨迹图像;

m)对指尖点手写数字轨迹的点集求出最小面积的包围矩形,并根据包围矩形的面积调整点与点之间连线的粗细,获得新的画有白色手写轨迹的黑色图像;

n)再对这幅新的画有白色手写轨迹的黑色图像进行边缘检测,找出一个新的轨迹点集,求出新的最小面积的包围矩形;

o)运用新的最小面积的包围矩形在新的画有白色手写轨迹的黑色图像中截取出只有单纯手写轨迹的图像;

p)将只有单纯手写轨迹的图像缩放成32*32的01矩阵。

优选地,在步骤5)中,对于数字1的处理,如果单纯地对数字1的轨迹求最小面积的包围矩形,最终得出来的图像将是一副全白的图像,因此,在计算出最小面积的包围矩形后,要对最小面积的包围矩形的长宽比进行判断,长宽比小于0.5的视为数字1,然后对最小面积的包围矩形的长和宽进行调整,努力使长宽比达到1:1,最后对32*32的图像进行二值化处理,转化成32*32的01矩阵。

优选地,步骤6)中对手写轨迹的识别采用的是DWKNN算法,其中对距离的计算,采用的是欧式几何距离算法。

本发明与现有技术相比,具有如下优点和有益效果:

1、现有技术大多数只将Kinect运用于人体静态单一姿势和动作的捕捉与识别中,本发明运用Kinect捕捉人体手部连续的手写动作,可识别动态3D手写的数字及手势,达到生动灵活有趣的人机交互效果;

2、本发明提取手部区域图像,采用的是人在空中书写时手为身体与Kinect距离值最小部分的原理,相比于普遍的基于简单肤色及分辩轮廓大小的提取方法,精度更高,鲁棒性更好;

3)本发明采用手部外轮廓线距离手心峰值点数目原理,可实现实时的手部手势检测,达到迅速开始及结束手写的效果;

4)本发明对手写轨迹的处理,采用基于轨迹点集区域面积调整笔画粗细的方法,实现手写轨迹大小归一化,提高手写轨迹的识别率;

5)本发明采用DWKNN算法进行手写轨迹的识别,相比传统的KNN,识别准确率有所提高;

6)本发明基于RPC-Thrift架构,搭建了中央服务器模块,实现了不同程序模块间的通信;

7)本发明以虚拟人智能体作为与人的交互媒介,通过对虚拟人的动作、语言、表情等操控,实现堪比人与人交互的人机交互过程。

附图说明

图1为本发明的整体系统框图;

图2(a)-图2(c)分别为人体深度图、最小深度值、手部分离示意图;

图3为本发明的手部指尖点示意图;

图4(a)、图4(b)分别为本发明修正前的手部手势识别示意图和修正后的手部手势识别示意图;

图5(a)-图5(d)为本发明的手写轨迹处理示意图;其中图5(a)为原始轨迹图,图5(b)为调整后的轨迹图,图5(c)为纯手写轨迹图,图5(d)为生成的01矩阵图;

图6为本发明的交互示意图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

实施例:

如图1所示,为本发明的整体系统框图,整个系统按照感知层、分析决策层、执行层三层结构来搭建,包括手势与数字识别模块、中央服务器模块和虚拟人控制模块,所述手势与数字识别模块用于提取手部区间,识别手势及手写轨迹;所述中央服务器模块用于连接手势与数字识别模块和虚拟人控制模块,实现数据的采集,传输和命令发送;所述虚拟人控制模块为在实际中与人进行互动的载体,搭建出虚拟人,根据从中央服务器模块接受来的命令,对虚拟人进行动作、语言、表情等操控,实现与人的交互。

其中,所述手势与数字识别模块中采用Kinect作为传感器。

其中,中央服务器模块的搭建是基于RPC-Thrift架构,在该架构中,定义统一的传输数据变量,包括识别的手势与数字以及对虚拟人的动作、语言控制,运用Thrift代码生成器编译成C++和Python的客户端与服务端服务代码框架,接着运用Python运行服务器端的代码搭建起电脑本地端的服务器,并运用决策树设计出基于手势与数字识别结果的虚拟人控制决策架构。

例如,当手势与数字识别检测到新用户的信号时,将通过客户端接口向中央服务器模块发送相应信号,中央服务器模块接收到检测新用户信号后,向虚拟人控制模块发送控制虚拟人打招呼的命令。

其中,所述虚拟人控制模块搭建虚拟人是基于smartbody系统结合ogre游戏引擎,结合3D-Max等建模软件和motion Builder等动作设计软件,对于复杂动作的设计,采用Kinect获取真人骨架信息嵌套到虚拟人上的方法来完成,并通过Python语言进行行为动作、语言、表情的控制。

同时,本发明基于该系统提供了一种基于动态3D手写数字识别的虚拟人交互方法,包括如下步骤:

1)通过手势与数字识别模块中的Kinect获取用户的深度数据及骨架信息;

2)结合1)中获得的深度数据和骨架信息,利用人在空中书写时手为身体与Kinect距离值最小部分的原理,分离出人手的部分;

3)提取出手部轮廓,利用外轮廓线距离手心峰值点数目原理,识别手部手势,并发送给中央服务器模块;

4)将手部区域距离摄像头最近的点定为指尖点位置,当识别到手部手势为书写手势,即步骤3)中提到的手指峰值点数目等于1时,开始记录指尖点位置,当识别到手部手势为结束手势,即步骤3)中提到的手指峰值点数目在4以上或跟踪手掌丢失时,指尖点位置记录停止;

5)将步骤4)中记录的指尖点位置,即手写轨迹,进行轮廓检测、提取和笔画粗细优化及转换处理;

6)将步骤5)中处理后的手写轨迹,输入到DWKNN识别器中进行数字识别;

7)将步骤6)中的识别结果通过RPC协议发送给中央服务器模块;

8)中央服务器模块通过RPC协议接收来自手势与数字识别模块的识别结果;

9)中央服务器模块根据步骤8)中接收的识别结果,通过RPC协议向虚拟人控制模块发送对虚拟人动作、语言、表情的控制命令;

10)初始化虚拟人控制模块中的虚拟场景,展示出虚拟人;

11)虚拟人控制模块通过RPC协议,接收来自中央服务器模块的虚拟人控制指令;

12)根据步骤11)中接收的虚拟人控制指令,对虚拟人实行动作、语言、表情等相关操控,实现人机交互。

如图2(a)-图2(c)所示,为本发明的指尖提取与手部分离示意图,在步骤2)中对人手部分的分离利用的是人在空中书写时手为身体与Kinect距离值最小部分的原理,具体包含以下步骤:

a)采用微软公司的Kinect作为传感器,采集用户的深度数据及骨架信息;

b)通过Kinect提供的API可以提供深度图像MDepth及MDepth中每一个像素点所属于的用户ID;

c)运用用户ID数据可在深度图像MDepth中分离出一幅身体部分的深度图像MDBody

d)对只有身体部分的深度图像MDBody进行遍历,找出具有最小的深度值的点Pmin

e)基于空中书写时指尖会在整个人体的最前端的原理,将Pmin的位置定为手指尖点PT的位置;

f)再遍历只有身体部分的深度图像MDBody,分离出大于手指尖深度值一定数值的图像,将其认定为手部图像Mh

如图3、图4(a)、图4(b)所示,分别为本发明的手部指尖点示意图及手部手势识别示意图,在步骤3)中提取出手部轮廓,识别手部手势,利用的是外轮廓线距离手心峰值点数目原理,包含如下步骤:

g)对手部图像Mh进行边缘检测,获取手部轮廓点集Vh={P1,P2,……,Pn};

h)对点集Vh求最小面积包围圆Cmin,将圆心定为手心点Phc

i)计算Vh中的每个点Pi与Phc的距离,按顺时针方向遍历,找出峰值点PPeak

j)根据峰值点PPeak,即手指点的数量,得出最终的人手手掌状态结果。

如图4(a)所示,显然峰值算法在寻找到指尖点的同时,也寻找到了一些错误的峰值点,如手下方的一些点或者重复寻找了手指尖点,因此,我们要增加一些限制,例如删除手心点下方的点和将找出来的峰值点进行两两的距离比较,点间距较小的点进行合并,修正后的结果如图4(b)所示。

在本发明中,将只有一个手指的手势,作为开始手写手势;手指数为五,即手掌张开的手势,作为结束手写手势。

如图5(a)-图5(d)所示,为本发明的手写轨迹处理示意图,在步骤5)中对手写轨迹处理的方法,包含如下步骤:

k)当识别到开始手写的手势后,开始记录下每一个指尖点PT的位置,并在一幅图像中实时地画出这些点并连接起来,展示给用户;

l)待手写结束后,获得一个关于PT手写数字轨迹的点集VTh={PT1,PT2,……,PTn},以及一幅原始轨迹图像IT

m)对VT求出最小面积的包围矩形R,并根据R的面积调整点与点之间连线的粗细,获得新的画有白色手写轨迹的黑色图像IT

n)再对这幅新的轨迹图像IT进行边缘检测,找出一个新的轨迹点集,求出新的最小包围矩形R′;

o)运用R′在黑白图像IT中截取出只有单纯手写轨迹的图像IpT

p)将图像IpT缩放成32*32的01矩阵MT

特别地,对数字1的处理,如果单纯地对数字1的轨迹求最小的包围矩阵,最终得出来的图像将是一副全白的图像,因此,在计算出最小面积的包围矩形R后,要对R的长宽比进行判断,长宽比小于0.5的视为数字1,然后对矩形的长和宽进行调整,努力使长宽比达到1:1,最后对32*32的图像进行二值化处理,转化成32*32的01矩阵MT

在步骤6)中,对手写轨迹的识别采用的是DWKNN算法,将步骤5)中得到的32*32的01矩阵MT,与样本库中的每一个32*32的01矩阵样本进行距离计算,在距离较近的k个样本中进行“表决”,将“表决”的数字类别结果作为矩阵MT的数字识别结果。

DWKNN算法是一种由KNN算法演变而来的,距离加权最近邻居算法。在DWKNN算法和KNN算法中,假设一个样本x可定义为:

<a1(x),a2(x),…,an(x)>

其中,ar(x)为样本x的第r个特征值,r∈(1,n)。

根据欧式几何距离算法,样本xm与样本xn之间的距离d(xm,xn)为:

其中,n在本系统中设置32*32与01矩阵MT对应。

DWKNN算法与KNN算法的区别在于决策方法上的不同,KNN算法的决策是基于最近邻居的类别众数,而DWKNN算法则是基于距离加权的投票决策机制。

在传统的DWKNN算法中,第i个最近邻居的距离权值Wi表示为:

不同于传统的DWKNN算法,我们将第i个最近邻居的距离权值Wi设置为:

其中,k表示设置的最近邻居样本的总数目,i表示第i个最近邻居样本的序号,i∈(1,k)。

分类标签L的投票结果为:

其中,当第i个最近邻居的标签属于L时,标签判断变量当第i个最近邻居的标签不属于L时,标签判断变量

最终的表决结果f(x)为:

如图6所示,为本发明的交互示意图,本发明的具体的交互流程,包括如下步骤:

当Kinect检测到用户,在获得只有身体部分的深度图像MDBody后,手势与数字识别模块通过中央服务器向虚拟人控制模块发送用户识别信号,控制虚拟人与用户通过问好及挥手手势进行打招呼;

当识别到结束手写手势,获得数字识别结果后,手势与数字识别模块通过中央服务器向虚拟人控制模块发送数字识别结果信号,控制虚拟人说出数字识别结果并做出与数字相对应的手势;

当Kinect无法检测及跟踪到用户时,手势与数字识别模块通过中央服务器向虚拟人控制模块发送用户消失信号,控制虚拟人与用户说再见并挥手。

以上所述,仅为本发明专利较佳的实施例,但本发明专利的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明专利所公开的范围内,根据本发明专利的技术方案及其发明专利构思加以等同替换或改变,都属于本发明专利的保护范围。

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