著录项信息
专利名称 | 一种基于手势的数字输入方法 |
申请号 | CN201510551014.7 | 申请日期 | 2015-09-01 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2015-12-30 | 公开/公告号 | CN105204627A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F3/01 | IPC分类号 | G;0;6;F;3;/;0;1查看分类表>
|
申请人 | 济南大学 | 申请人地址 | 山东省济南市市中区南辛庄路336号济南大学信息学院
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 济南大学 | 当前权利人 | 济南大学 |
发明人 | 冯志全 |
代理机构 | 济南誉丰专利代理事务所(普通合伙企业) | 代理人 | 李茜 |
摘要
本发明提供了一种基于手势的数字输入方法,属于计算机领域。该方法构造虚拟界面,所述虚拟界面是操作者手势操作区域,该虚拟界面能够随着操作者的身体位置或体态的变化而变化;通过一个虚拟界面逐次输入N个数字,或者通过生成N个虚拟界面,每个虚拟界面输入一个数字,这N个虚拟界面形成虚拟界面群;将显示屏幕定义为物理界面,操作者与物理界面之间的空间定义为物理空间;所述物理空间包括虚拟界面和非虚拟界面;操作者的手势只有在虚拟界面内才是有效的和能够感知的,在非虚拟界面内的手势是无效的;通过所述虚拟界面群输入数字。
1.一种基于手势的数字输入方法,其特征在于:所述方法构造虚拟界面,所述虚拟界面是操作者手势操作区域,该虚拟界面能够随着操作者的身体位置或体态的变化而变化;通过一个虚拟界面逐次输入N个数字,或者通过生成N个虚拟界面,每个虚拟界面输入一个数字,这N个虚拟界面形成虚拟界面群;
将显示屏幕定义为物理界面,操作者与物理界面之间的空间定义为物理空间;
所述物理空间包括虚拟界面和非虚拟界面;操作者的手势只有在虚拟界面内才是有效的和能够感知的,在非虚拟界面内的手势是无效的;
通过所述虚拟界面或者虚拟界面群输入数字;
所述构造虚拟界面是这样实现的:
(1)计算机检测操作者的行为模型:如果检测到手掌首先前推,然后保持静止状态,则进入步骤(2),如果是其它行为,则返回步骤(1);
(2)计算出手掌保持静止状态时手势的重心位置Z;
(3)将虚拟界面模板M放到以手势的重心位置Z为中心的位置,得到虚拟界面V(Z,ΩM),其中,ΩM表示模板M所确定的虚拟界面的范围;
(4)计算出V上各个兴趣点的三维位置信息;
(5)返回虚拟界面V。
2.根据权利要求1所述的基于手势的数字输入方法,其特征在于:每一种应用的所述虚拟界面模板M的功能分布以及大小范围是确定不变的;所述兴趣点是指操作者在虚拟界面V上的交互对象。
3.根据权利要求2所述的基于手势的数字输入方法,其特征在于:所述步骤(4)是利用空间深度信息和手势跟踪方法计算出V上各个兴趣点的三维位置信息。
4.根据权利要求3所述的基于手势的数字输入方法,其特征在于:所述通过所述虚拟界面群输入数字是这样实现的:
Q1,采用时钟表盘结构表示所述虚拟界面,其中,把时钟盘结构中的12点定义为数字0,然后沿顺时针方向依次定义数字1到9,数字1和数字2之间所在的弧的中点为A,数字2和数字3之间所在的弧的中点为B,圆心为Z,射线ZA和ZB围成一个扇形区域Θ;
Q2,对于要输入的每个数字,具体步骤包括:
(A1)生成第i个虚拟界面Vi;
(A2)操作者在Vi上移动手势;
(A3)如果手势处于静止状态,再进一步检测是否是由五指伸开的包袱手势变化到五指收缩的拳头手势,如果是,则进入(A4),如果否,返回步骤(A3);
(A4)计算手势重心所在位置Pg;
(A5)如果 转步骤(A4);
(A6)计算f:
其中,Θf表示虚拟界面Vi上数字f所在的空间扇形区域点集。
5.根据权利要求4所述的基于手势的数字输入方法,其特征在于:所述Q1进一步包括:
将虚拟界面上数字0到9的9个扇形区域分为3个象限,其中象限I是0-3所在的扇形区域;象限II是3-6所在的扇形区域;象限III是6-9所在的扇形区域;
操作者的手势从虚拟界面的中心点出发选择象限,则根据手势运动轨迹的方向范围,判断操作者欲选择的象限;
中心点Z与数字0确定的射线为起始向量L,沿顺时针方向角度逐渐增大,手势运动的方向为T,T与L之间的夹角为θ=,T所在的象限为:
在进行数字选择时,操作者的手掌沿T方向平移,然后垂直向前推手势,则选中T所确定的象限,然后调入对应的虚拟界面模板,将该象限设为新的虚拟界面供操作者进一步操作;
在所述新的虚拟界面中,只有该象限中的4个数字。
6.根据权利要求1至5任一所述的基于手势的数字输入方法,其特征在于:所述方法采用粒子滤波算法获得手势运动轨迹。
一种基于手势的数字输入方法\n技术领域\n[0001] 本发明属于计算机领域,具体涉及一种基于手势的数字输入方法。\n背景技术\n[0002] 用手势输入数字一直是手势交互理论和应用研究中的难点问题和关键问题之一,也是智能家电等产业领域的痛点问题之一。\n[0003] 目前一般用手势数字实现用不同手势输入数字,它首先通过手势图像识别,然后把不同的手势解释为不同的数字,这种方法存在的主要问题是:(1)识别率收到很多因素的影响(例如距离、特征提取、识别算子等),特别是对于形状相近的手势目前普通方法很难把它们区分开;(2)多人同时操作时容易相互干扰;(3)存在“Midas Touch问题”。\n发明内容\n[0004] 本发明的目的在于解决上述现有技术中存在的难题,提供一种基于手势的数字输入方法,方便用手势输入数字。\n[0005] 本发明是通过以下技术方案实现的:\n[0006] 一种基于手势的数字输入方法,构造虚拟界面,所述虚拟界面是操作者手势操作区域,该虚拟界面能够随着操作者的身体位置或体态的变化而变化;通过一个虚拟界面逐次输入N个数字,或者通过生成N个虚拟界面,每个虚拟界面输入一个数字,这N个虚拟界面形成虚拟界面群;\n[0007] 将显示屏幕定义为物理界面,操作者与物理界面之间的空间定义为物理空间;\n[0008] 所述物理空间包括虚拟界面和非虚拟界面;操作者的手势只有在虚拟界面内才是有效的和能够感知的,在非虚拟界面内的手势是无效的;\n[0009] 通过所述虚拟界面群输入数字。\n[0010] 所述构造虚拟界面是这样实现的:\n[0011] (1)计算机检测操作者的行为模型:如果检测到手掌首先前推,然后保持静止状态,则进入步骤(2),如果是其它行为,则返回步骤(1);\n[0012] (2)计算出手掌保持静止状态时手势的重心位置Z;\n[0013] (3)将虚拟界面模板M放到以手势的重心位置Z为中心的位置,得到虚拟界面V(Z,ΩM),其中,ΩM表示模板M所确定的虚拟界面的范围;\n[0014] (4)计算出V上各个兴趣点的三维位置信息;\n[0015] (5)返回虚拟界面V。\n[0016] 每一种应用的所述虚拟界面模板M的功能分布以及大小范围是确定不变的;所述兴趣点是指操作者在虚拟界面V上的交互对象;\n[0017] 所述步骤(4)是利用空间深度信息和手势跟踪方法计算出V上各个兴趣点的三维位置信息。\n[0018] 所述通过所述虚拟界面群输入数字是这样实现的:\n[0019] Q1,采用时钟表盘结构表示所述虚拟界面,其中,把时钟盘结构中的12点定义为数字0,然后沿顺时针方向依次定义数字1到9,数字1和数字2之间所在的弧的中点为A,数字2和数字3之间所在的弧的中点为B,圆心为Z,射线ZA和ZB围成一个扇形区域Θ;\n[0020] Q2,对于要输入的每个数字,具体步骤包括:\n[0021] (A1)生成第i个虚拟界面Vi;\n[0022] (A2)操作者在Vi上移动手势;\n[0023] (A3)如果手势处于静止状态,再进一步检测是否有由五指伸开的包袱手势变化到五指收缩的拳头手势(即“抓”手势),如果是,则进入(A4),如果否,返回步骤(A3);\n[0024] (A4)计算手势重心所在位置Pg;\n[0025] (A5)如果 转步骤(A4);\n[0026] (A6)计算f:\n[0027]\n[0028] 其中,Θf表示虚拟界面Vi上数字f所在的空间扇形区域点集。\n[0029] 所述Q1进一步包括:\n[0030] 将虚拟界面上数字0到9的9个扇形区域分为3个象限,其中象限I是0-3所在的扇形区域;象限II是3-6所在的扇形区域;象限III是6-9所在的扇形区域;\n[0031] 操作者的手势从虚拟界面的中心点出发选择象限,则根据手势运动轨迹的方向范围,判断操作者欲选择的象限;\n[0032] 中心点Z与数字0确定的射线为起始向量L,沿顺时针方向角度逐渐增大,手势运动的方向为T,T与L之间的夹角为θ=,T所在的象限为:\n[0033]\n[0034] 在进行数字选择时,操作者的手掌沿T方向平移,然后垂直向前推手势,则选中T所确定的象限,然后调入对应的虚拟界面模板,将该象限设为新的虚拟界面供操作者进一步操作;\n[0035] 在所述新的虚拟界面中,只有该象限中的4个数字。\n[0036] 所述方法采用粒子滤波算法获得手势运动轨迹。\n[0037] 与现有技术相比,本发明的有益效果是:\n[0038] (1)解决了“Midas Touch问题”(即“点石成金”问题,用户所有的手势动作都会被传感器捕获当作命令执行而导致系统状态紊乱,极大地加重认知用户负荷和操作负荷)。\n[0039] (2)解决了传统用手势输入数字时存在的缺陷(例如,识别率低;手势复杂,不便于输入多位数字,以及需要记忆数字手势等问题)。\n附图说明\n[0040] 图1本发明中用于数字输入的虚拟界面模板\n[0041] 图2本发明实施例中的虚拟界面模板\n[0042] 图3-1本发明实施例中10个数字划分到三个象限中\n[0043] 图3-2本发明实施例中将第1象限作为虚拟界面模板生成新的虚拟界面。\n具体实施方式\n[0044] 下面结合附图对本发明作进一步详细描述:\n[0045] (1)虚拟界面\n[0046] 通过分析操作者的手势操作行为,计算机可以形成位于操作者前面的手势交互感应区,该区域既可能是二维(2D)也可能是三维(3D),它可以随着操作者的身体位置或体态的变化亦步亦趋地变化,就好像操作者手势附近有一个看不见但却可以随操作者身体的运动而变化的操作屏幕,本发明将这种具有特定结构和功能的操作者手势操作区域称为(无形)虚拟界面(TI)。把虚拟界面划分为若干个子块,把多模态手势(即2D界面手势/3D界面手势,通信型手势/操作型手势)进行组合构建基本的交互功能,并在这些子块与交互功能之间建立对应关系,这样的子块被称为功能块。\n[0047] 虚拟界面的作用在于,它不仅从一个侧面反映了操作者手势操作的行为模型,而且它从一个侧面刻画了操作者的心理模型,并且使得非接触式交互界面是有结构的、是可以感知的、是可以计算的,从而将接触式交互与非接触式交互有效地统一起来。\n[0048] (2)物理空间\n[0049] 本发明将显示屏幕称为物理界面(PI),操作者与物理界面之间的空间称为物理空间。物理空间分为虚拟界面和非虚拟界面构成。给出了一种可能的物理空间结构图,其中,虚拟界面分为3D操作区和2D操作区,操作者手势只有在虚拟界面内才是有效的和可以感知的;在虚拟界面之外的物理空间是无效手势命令区,计算机不会响应无效手势命令区的任何手势命令或手势操作。\n[0050] 虚拟界面的构造算法如下:\n[0051] 1.计算机检查操作者的行为模型:手掌首先前推,然后保持静止状态。\n[0052] 2.计算出手掌保持静止状态时手势的重心位置Z;\n[0053] 3.将事先设计好的虚拟界面模板M放到以Z为中心的位置,得到虚拟界面V(Z,ΩM),其中,ΩM表示模板M所确定的虚拟界面的范围;\n[0054] 4.利用空间深度信息和手势跟踪技术,计算出V上各个兴趣点的三维位置信息;\n[0055] 5.返回虚拟界面V。\n[0056] 虚拟界面模板M的功能分布以及大小范围是确定不变的。根据不同的应用需要,可以设计不同的虚拟界面模板M。所谓V上的兴趣点,是指操作者在虚拟界面V上的交互对象。\n[0057] 基于虚拟界面群的数字输入算法具体如下:\n[0058] 1算法描述\n[0059] 为了通过虚拟界面输入N位数字,需要生成N个虚拟界面,从而形成虚拟界面群。其中,每个虚拟界面的模板相同,采用操作者熟悉的类似时钟表盘结构。其中,把“12”点定义为0,然后沿顺时针方向依次定义1到9,如图1所示,图中,沿顺时针方向,点1和点2之间所在的弧的中点为A,点2和点3之间所在的弧的中点为B,射线ZA和ZB围成一个扇形区域Θ。显然,选中点2的充分必要条件是手势重心落在区域Θ所确定的区域内且检测到操作者的“选中”行为。Θ的弧越大,选择的出错率就低。\n[0060] 数字输入算法:\n[0061] 0:For(i=1;i≤N;i++)\n[0062] {\n[0063] 1.生成第i个虚拟界面Vi;\n[0064] 2.操作者在Vi上移动手势;\n[0065] 3.如果手势处于静止状态:\n[0066] 4.检测到“抓”手势了吗?如果“不是”,转步骤4.\n[0067] 5.计算手势重心所在位置Pg;\n[0068] 6.如果 转步骤5;\n[0069] 7.计算f:\n[0070]\n[0071] 其中,Θf表示虚拟界面Vi上数字f所在的空间扇形区域点集;\n[0072] 8.感知f的是否正确,如果选择结果f错误,进入纠错处理;否则,得到Vi的选择结果f;\n[0073] }\n[0074] 同时用两个如图2所示的虚拟界面实现双位数字输入,可以用于智能电视频道输入。例如,操作者欲输入频道48,只需通过一个虚拟界面输入数字“4”,再通过另一个虚拟界面输入数字“8”。\n[0075] 2算法的进一步改进\n[0076] 考虑到手势运动范围往往有限,且既不能增加操作者的操作负荷,又不能影响交互的自然性,故虚拟界面的大小往往有所受限,这就决定了相邻两个数字之间的距离比较小,从而上述算法的选择精准度会受到很大影响,必然加重操作者的操作负荷和认知负荷。\n为了解决这个问题,本发明把虚拟界面上0到9的9个扇形区域分为3个象限(图3-1)。象限I:\n0-3所在的扇形区域;象限II:3-6所在的扇形区域;象限III:6-9所在的扇形区域。如果规定手势从虚拟界面的中心点出发选择象限,则根据手势运动的方向范围,就可以判断操作者欲选择的象限。例如,规定Z与数字0确定的射线为起始向量L,沿顺时针方向角度逐渐增大,手势运动的方向为T,T与L之间的夹角为θ=。于是T所在的象限为\n[0077]\n[0078] 在进行数字选择时,首先把需要的数字所在的象限提取出来放到一个新的虚拟界面中(手掌沿T方向平移,然后垂直向前推手势,则T所确定的象限被选中并调入相应的虚拟界面模板形成新的虚拟界面供操作者进一步操作),在新的虚拟界面中,由于只有4个数字,数字之间的间距比较大(相当于放大了扇形区域的弧长),因此,选择操作的精度得到提高(图3-2)\n[0079] 图3-1中10个数字划分到三个象限中,通过手势运动方向可以利用隐式交互技术确定操作者的选择象限。图3-2当选中第1象限后,把该象限作为虚拟界面模板生成新的虚拟界面,从该虚拟界面选择数字的精度将得到提高。\n[0080] 本发明采用粒子滤波算法得到手势运动轨迹:\n[0081] S1:初始化。\n[0082] 根据手势重心状态的先验分布p(X0)选择粒子集:\n[0083] k=1;\n[0084] S2:状态采样。\n[0085] S2.1:For i=1To N\n[0086] 根据先验分布 得到样本\n[0087] S2.3:求样本的权值:\n[0088] For i=1To N\n[0089]\n[0090] S2.3:把权值标准化:\n[0091] For i=1To N\n[0092]\n[0093] S3:状态估计:\n[0094]\n[0095] S4:重采样:\n[0096] 对样本进行重新抽样,产生一组新样本 使得:\n[0097]\n[0098] 亦即新样本中 出现的概率为ωi\n[0099] S5:k=k+1,转S2。\n[0100] 手势识别算法:\n[0101] 本发明的一种基于形状上下文的手势识别方法,是通过手势图像上手势点对应的形状上下文特征进行比对,实现手势识别的。\n[0102] 首先构建手势数据库。\n[0103] (1)选取m种手势,每种手势选取n幅手势图像,m=5、n=10;即选取5种手势,每种手势选取10幅手势图像。\n[0104] (2)找出每幅手势图像中的手势点;遍历整幅图像,若为黑色则认为是背景;否则则认为是手势点,同时记录下手势点的坐标和手势点的个数。\n[0105] (3)计算出手势重心以及手势重心与手势点之间的最大距离;\n[0106] (4)将该最大距离作为最大半径做圆,然后将该最大半径平均分成k份,以此做k个同心圆,k取12,相邻的两个同心圆之间形成圆环;统计落在每个圆环内的手势点,然后计算出每个圆环的中心点,以此作为手势特征点;\n[0107] (5)在手势特征点和手势点的基础上提取形状上下文特征,最后将形状上下文特征写入文本文件存储在手势数据库;手势数据库共有50个文件,每种手势10个文件。\n[0108] 其中,统计手势点函数void HandsDetection(D2POINT edgepoint[],BYTE*image,int*HandpointsNO)该函数的主要功能是在分割出来的手势图像基础上统计手势点,记录其坐标,并返回手势点的个数。\n[0109] D2POINT为结构体类型,该结构体类型的定义为:struct D2POINT{int x;int y;};\n[0110] 输入:指向待处理图像的指针image。\n[0111] 输出:函数的返回值为存放手势点坐标的edgepoint[]和用来记录手势点的[0112] 个数的HandpointsNO。\n[0113] 具体步骤:\n[0114] ①按照从上到下、从左到右的顺序遍历图像上每个像素点。\n[0115] ②若该像素点为黑色,则结束本次循环,然后继续遍历;若不为黑色,则把该像素的x坐标和y坐标存储在数组edgepoint[]中,并使手势点个数HandpointsNO加1。\n[0116] ③重复执行步骤②,直到图像遍历结束。\n[0117] ④返回手势点个数HandpointsNO。\n[0118] 统计圆环中心点函数void CountRing(D2POINT edgepoint[],D2POINT featuredot[],D2POINT sumpoints[],int HandpointsNO,int circleno)\n[0119] 该函数的功能是计算每个圆环的中心点。\n[0120] 输入:存储手势点坐标的edgepoint[],存储手势点个数的HandpointsNO,存储圆环份数的circleno,circleno的值为12。\n[0121] 输出:返回存储圆环中心点坐标的数组featuredot[],存储圆环中心点和手势点坐标的数组sumpoints[],\n[0122] 具体步骤:\n[0123] ①由手势点坐标edgepoint[]和HandpointsNO的值,求手势的重心坐标weight。\n[0124] ②求重心到手势点数组edgepoint[]的最大距离maxjuli。\n[0125] ③由最大距离maxjuli为最大半径,并将此半径平均分成12份,以此确定12个圆。\n[0126] ④根据半径的范围统计每个圆环内手势点的坐标和落在此圆环内手势点的个数,分别存放在数组ring[12]的成员变量D2POINT shixinpoint[200]和no中。数组ring[12]的类型为结构体CircleRing。该结构体类型的定义为:struct CircleRing{D2POINT shixinpoint[200];//圆环内的点坐标int no;//圆环内点的数目D2POINT avg;//圆环中心点坐标};\n[0127] ⑤在第四步的基础上,计算每个圆环的中心点。若该圆环内点的个数即no的值不为0,则通过落在该圆环内的点计算该圆环的中心点,存储在数组ring[12]的成员变量D2POINT avg中。若no的值为0则将该圆环中心点的x、y坐标均置为0。\n[0128] ⑤将每个圆环的中心点复制到数组featuredot[]中,作为手势特征点。将圆环中心点和手势点复制到数组sumpoints[]中,为之后的形状上下文特征提取做准备。\n[0129] 形状上下文特征提取函数void ShapeContext(int FeatureNo[][60],D2POINTfeaturedots[],D2POINT sumpoints[],int HandpointsNO,int circleno)该函数的主要功能是求取手势特征点的形状上下文特征。\n[0130] 输入:featuredots[]为手势特征点即圆环中心点,sumpoints[]为手势特征点和手势点的集合,HandpointsNO为手势点的个数,circleno为圆环份数。\n[0131] 输出:用来存储每个手势特征点的形状上下文特征的数组FeatureNo[][60]。\n[0132] 具体步骤:\n[0133] 对每个手势特征点进行如下的操作。\n[0134] ①求当前手势特征点到数组sumpoints[]中点的最大距离maxdistance。\n[0135] ②若该手势特征点的x、y坐标均不为0,则执行下面的算法。如下图所示:以当前手势特征点为极点,最大距离maxdistance为半径,将平面空间划分为60个区域。具体划分方法如下:以当前手势特征点为极点构造极坐标系,将整个平面空间从方向上平均划分出12个方向,同时在半径上则均匀划分5份。所以,整个平面空间就自然被划分为60个区域。在相同的环上,每个区域的面积是相等的,然后统计数组sumpoints[]中的点落在每一个区域中的个数。\n[0136] 第i个手势特征点的60个属性值能够构成一个序列(ai,1,ai,2,...,ai,60),所以可以用一个n*60形状矩阵来对图像形状进行描述:\n[0137] 该矩阵的含义为:对于每个矩阵元素ai,j,i代表第i个\n特征点,j代表60个区域中的第j个区域,ai,j的含义为:以第i个特征点为极点,建立极坐标系,落在第j个区域内点的个数。n的值为特征点的总个数,这里n的值为12,因为共有12个圆环中心点,即手势特征点。该矩阵即代表该图像的形状的上下文特征。将此矩阵的值保存在二维数组FeatureNo[][60]中。若该手势特征点的x、y坐标均为0,则将该特征点的60个属性值全置为0。\n[0138] 然后进行手势识别。\n[0139] (1)顺序读取50个手势数据库文件并将其保存在数组中。\n[0140] (2)从视频流中连续选取F帧待识别手势图像,F取10,从第十帧开始,从视频流中连续取10帧图像,作为待识别手势图像。\n[0141] (3)采用与上述相同的方法实时计算出每帧待识别图像的形状上下文特征;\n[0142] (4)计算每帧待识别手势图像的形状上下文特征分别与手势数据库中m*n幅手势图像的形状上下文特征之间的χ2距离,然后将手势数据库中每幅手势图像参与计算得出的所有χ2距离加起来保存在一个数组中,每帧待识别手势图像共对应保存m*n个χ2距离和数组,采用Sort函数求取m*n个χ2距离和数组的最小值A;\n[0143] (5)按照上述方法,分别计算得出F帧待识别手势图像对应的F个χ2距离和数组的最小值A,然后采用Sort函数对F个χ2距离和数组的最小值A再求最小值B,该最小值B所对应存储在手势数据库中的手势即为识别出来的手势。\n[0144] 读手势模板库文件函数void readfile(int templet[50][20][60])[0145] 该函数的功能是读取已经建好的手势数据库文件,并将其保存在数组templet[50][20][60]中。其中第一维数值的大小为文件标号,共有5种手势,每种手势共10个手势库文件;第二维数值的大小代表手势特征点的个数;第三维数值的大小代表每个手势特征点所对应的60个特征的值。\n[0146] 输出:保存所有模板库文件的数组templet[50][20][60]。\n[0147] 具体步骤:\n[0148] ①共有5种手势,每种手势10个文件,所以共有50个手势库文件。按照顺序依次将每个文件读进数组templet[50][20][60]中。数组templet[50][20][60]第一维的数值代表不同的手势。其中0-9为包袱,10-19为剪刀,20-29为ok手势,30-39为拳头,40-49为大拇指。\n[0149] ②顺序读取每个文件。若读出来的值为-1,则认为是该文件读取结束,将flag置为\n1,作为该文件读取结束标志。\n[0150] 手势识别函数void Idensitify(int featurecon[][60],float chengben[],int n,int templet[50][20][60],int circleno)\n[0151] 此函数的功能是将待识别手势帧图像的形状上下文特征与手势库中某种手势的\n10个库文件中的某个文件中的形状上下文特征进行比较,求匹配代价。\n[0152] 输入:featurecon[][60]是求得的待识别手势帧图像的形状上下文特征,templet[50][20][60]用来存储从手势库文件中读取的形状上下文特征的值。n为文件的标号,代表待识别手势与第n个手势库文件进行比较。因为共有50个文件所以n的值取0-49。circleno为圆环的个数。\n[0153] 输出:返回存储匹配代价的数组chengben[]。因为共有12个手势特征点,所以该数组共有12个值。\n[0154] 具体步骤:\n[0155] ①按行遍历指向待识别手势形状上下文特征的数组featurecon[][60],同时遍历存储手势库形状上下文特征的数组templet[50][20][60]。\n[0156] ②若该手势特征点的60个属性值全为0,则将该手势库文件中对应手势特征点的\n60个属性值赋值予它。然后将该手势特征点的60个属性值与该手势库文件中每个特征点的形状上下文特征进行比较,因为该特征点与手势库中每个特征点的特征之间都有一个匹配代价,所以共得到12个匹配代价值,然后在这12个值中取最小值,作为数组chengben[]的某个元素值。匹配代价用χ2距离来定义。χ2距离的定义为:\n[0157]\n[0158] 公式中的hi(k)为待识别手势中第i个手势特征点的形状上下文特征值,hj(k)为某个手势库文件中第j个手势特征点的形状上下文特征值,这里k的值为1-60,代表60个属性值中的某一个。经过此公式得到匹配代价值Cij,即i、j两个特征点之间的匹配代价。\n[0159] ③按照以上方法对每个手势特征点进行遍历,所以最终得到12个匹配代价值,存放在数组chengben[]中。\n[0160] 排序函数IdensityFlag Sort(IdensityFlag gross[],int n)\n[0161] 该函数的功能是对求得的χ2距离和求取最小值。\n[0162] IdensityFlag为结构体类型,定义如下:\n[0163] truct IdensityFlag{float sum;int flag;};\n[0164] 输入:数组gross[]中的成员变量sum为总的匹配代价,即待识别手势与某个手势库文件之间的匹配代价总和。成员变量flag代表手势标号。0为包袱,1为剪刀,2为ok,3为拳头,4为大拇指。\n[0165] 输出:返回的是类型为IdensityFlag的变量mark。mark是所有匹配代价值中最小的。\n[0166] 具体步骤:\n[0167] ①定义一个IdensityFlag类型的变量mark来存储匹配代价和的最小值,并将数组gross[]中的第一个元素值赋值给mark。\n[0168] ②依次遍历数组gross[],若该元素的成员变量sum值小于mark成员变量的sum值,则将该元素赋值给mark。\n[0169] ③反复执行②直到遍历结束。返回mark的值。\n[0170] void CMainFrame::TotalIdensity(BYTE*lpImgData[],int templet[50][20][60])该函数的主要功能是对实时得到的10帧手势图像的一个识别总过程。\n[0171] 输入:BYTE*lpImgData[]指向得到的10帧图像,int templet[50][20][60]存储手势模板值。\n[0172] 具体步骤:\n[0173] 对于每帧图像分别进行如下的操作:\n[0174] ①通过HandsDetection函数求取手势点。若该帧手势点个数为0,则舍弃该帧.若不为0则为有效帧,用frameNo来表示有效帧的个数。然后进行下面的计算。\n[0175] ②通过CountRing函数统计每个圆环内的中心点。\n[0176] ③通过ShapeContext函数计算该帧手势图像的形状上下文特征。\n[0177] ④通过Idensitify函数将该帧手势图像的形状上下文特征与所有模板库中的形状上下文特征进行比较,以此得到50个χ2距离和。\n[0178] ⑤在这50个χ2距离和中通过Sort函数求取最小值。\n[0179] 循环执行步骤①-⑤,对10帧图像分别进行处理。因为每帧有效帧对应一个χ2距离和的最小值,所以n个有效帧对应n个χ2距离。在这n个χ2距离中通过Sort函数再取最小值。\n该最小值所对应的手势即为识别出来的手势\n[0180] 本发明方法的优点在于:(1)虚拟界面模板概念符合人们的认知行为模型和心理模型,有助于凝练统一、规范的交互界面范式;(2)人们对于钟表盘界面的认知根深蹄固,把\n0到9的10个数字通过钟表盘进行关联符合人们的日常生活经验,要求人们“掌握”这种结构并进行交互具有天然的认知基础和实践基础,以至于即使把钟表盘界面进一步划分为三个象限,也不会增加操作者的认知负荷;(3)虚拟界面概念有效地解决了“Midas Touch问题”且可实现多人交互;(4)克服了现有数字手势方法的弊端,尤其是它避开了手势识别率的困扰;(5)可以方便地实现多位数字的输入,具有速度快、出错率低、简单方便、自然高效的优点。\n[0181] 上述技术方案只是本发明的一种实施方式,对于本领域内的技术人员而言,在本发明公开了应用方法和原理的基础上,很容易做出各种类型的改进或变形,而不仅限于本发明上述具体实施方式所描述的方法,因此前面描述的方式只是优选的,而并不具有限制性的意义。
法律信息
- 2019-08-16
未缴年费专利权终止
IPC(主分类): G06F 3/01
专利号: ZL 201510551014.7
申请日: 2015.09.01
授权公告日: 2016.07.13
- 2016-07-13
- 2016-04-27
- 2016-01-27
实质审查的生效
IPC(主分类): G06F 3/01
专利申请号: 201510551014.7
申请日: 2015.09.01
- 2015-12-30
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2012-06-20
|
2011-10-31
| | |
2
| |
2012-11-07
|
2012-06-11
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |