发明名称 一种面向多设备的手势交互方法
摘要 本发明公开了一种能够兼容多种交互设备的基于通用手势集的手势交互方法,包括:生成通用手势集,多设备进行手势集指定,应用程序进行手势映射,多设备进行手势识别。
申请公布号 CN104615366A 申请公布日期 2015.05.13
申请号 CN201410852337.5 申请日期 2014.12.31
申请人 中国人民解放军国防科学技术大学;中国人民武装警察部队警官学院 发明人 凌云翔;燕厚仪;张国华;李本先;范林军;张耀鸿
分类号 G06F3/0488(2013.01)I;G06F3/01(2006.01)I 主分类号 G06F3/0488(2013.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种面向多设备的手势交互方法,其特征在于包含以下步骤:第一步,生成通用手势集G,G=G<sub>touch</sub>∪G<sub>air</sub>,其中G<sub>touch</sub>指触摸手势集,G<sub>air</sub>指隔空手势集:1.1生成触摸手势集G<sub>touch</sub>,方法是:1.1.1用由Pid,State,Coordinate,Time组成的四元组来定义触摸点Point,Point=(Pid,State,Coordinate,Time),其中Pid取值为自然数,指检测到的多个触摸点中该触摸点的序号;State指触摸点的状态,取值为集合STATE中的元素,集合STATE={Appear,Move,Leave},Appear、Move、Leave分别表示触摸交互设备检测到触摸点出现、在移动和离开;Coordinate为二元实数组,指触摸点坐标;Time指触摸点对应的系统时间;1.1.2设定距离阈值L<sub>0</sub>与时间阈值T<sub>0</sub>,只有距离小于L<sub>0</sub>且触摸时间间隔小于T<sub>0</sub>的两个点才属于同一手势,属于同一手势的点组成触摸点集;一个触摸点集生成一个触摸手势,用五元组定义触摸手势TouchGesture=(Tid,TouchState,Sum,TouchPara,Value),其中Tid为触摸手势的编号,具有唯一性;TouchState指触摸点集中最后出现的点的State值;Sum指同一时间在距离阈值内的触摸点个数,取值为不大于10的自然数;TouchPara指触摸点集的参数之一,Value指参数TouchPara的值;TouchPara取值为有序集合TPARA中的元素,列举触摸点集的参数得到有序集合TPARA={Trend,Trace,ClickCount,Distance,Angle},其中ClickCount取值为1、2或3,指同一位置在时间阈值内的触摸点个数;当Sum=2且TouchState=Appear时,Distance表示两点之间的距离,取值为区间[0,L<sub>0</sub>]之间的正整数,Angle指两点连成的直线与水平线的夹角,取值为区间[0,180]之间的正整数;Trend表示触摸点的移动趋势,当Trend赋值时,TouchState必须取值Move,Trend取值为可拆解为三部分的数组“Num+Direction+Motion”,其中“+”是连接符,表示Num个触摸点沿着Direction方向做Motion类型的运动,Num取值为Sum的值,Direction取值Right、Left、Up、Down、LeftDown,LeftUp,RightDown,RightUp,分别表示右、左、上、下、左下、左上、右下、右上八个方位,Motion取值Move、Apart、Close、ClockRotate、AntiClockRotate,分别表示移动、分离、靠近、顺时针旋转、逆时针旋转;Trace是对一系列触摸点的处理结果,指手势的移动轨迹,当Trace赋值时,TouchState必须取值Leave,Trace的取值为任意的平面几何形状;触摸手势的参数值根据对应的触摸点集内所有点的参数结合几何学常识获得;1.1.3对触摸手势TouchGesture赋值得到触摸手势,对Tid进行唯一性赋值,对TouchState、Sum、TouchPara、Value在各自取值范围内的一组赋值生成一个手势,在各自取值范围的所有赋值组合构成触摸手势集G<sub>touch</sub>;1.2生成隔空手势集G<sub>air</sub>,方法是:1.2.1列举手势可以模拟的几何形状,得到集合SHAPE,SHAPE={Shape_Point,Shape_Line,Shape_Surface},表示集合可以分为三个子集,包括点形状、线形状和面形状,其中Shape_Point={point,muitipoint},表示点形状包括单点、散点;Shape_Line={StraightLine,Polyline,Curve,LineString},表示线形状包括直线、折线、曲线、线串;Shape_Surface={Polygon,Circle,Ellipse},表示面形状包括多边形、圆形、椭圆形;1.2.2根据几何学常识,为每种几何形状生成几何学参数有序集合APARA<sub>shape</sub>,其中下标shape分别对应九种形状,每个集合的元素个数记为Pnum<sub>shape</sub>;一个隔空手势对应一个几何形状,用五元组定义隔空手势AirGesture=(Aid,Shape,AirPara,AirValue,AirTrend,AirTrace),其中Aid是隔空手势的编号,具有唯一性;Shape是手势对应的几何形状,取值为SHAPE中的元素,AirPara是几何形状Shape的参数之一,取值为几何形状Shape对应的参数集合中的元素;AirValue为几何形状Shape的参数AirPara的赋值,取值范围根据人体工学的常识确定,取离散的有限值;AirTrend为几何形状Shape的参数AirPara发生变化时的变化趋势,取值为increase或decrease,表示在变大或变小;AirTrace仅在Shape赋值point或muitipoint有意义,指隔空点手势运动的轨迹,取值为任意的平面几何形状;1.2.3隔空手势AirGesture赋值,其中参数AirValue、AirTrend、AirTrace一次只对一个赋值,对参数Shape、参数AirPara和AirValue、AirTrend、AirTrace三个参数之一在取值范围内的一组赋值生成一个手势,在取值范围的所有赋值组合构成隔空手势集G<sub>air</sub>;1.3将G<sub>touch</sub>和G<sub>air</sub>取并集得到通用手势集G;1.4分解通用手势集G,得到点手势集G<sub>point</sub>、线手势集G<sub>line</sub>、面手势集G<sub>surface</sub>、轨迹手势集G<sub>trace</sub>,方法是:1.4.1G<sub>point</sub>=G;1.4.2G<sub>touch</sub>中的每一个手势执行以下操作:若手势的TouchPara参数赋值为Distance、Angle、Trend、Trace,则手势加入G<sub>line</sub>,若TouchPara参数赋值为Trace,则手势加入G<sub>trace</sub>;1.4.3G<sub>air</sub>中的每一个手势执行以下操作:若手势的Shape参数赋值来自Shape_Surface子集,则手势加入G<sub>surface</sub>和G<sub>line</sub>,若手势的Shape参数赋值来自Shape_Line子集,则手势加入G<sub>line</sub>;若手势的AirTrace参数不为空,则加入G<sub>trace</sub>;第二步,多设备进行手势集指定,方法是:2.1交互设备表示为E<sub>i</sub>,其中i=1,2,…,m,…,n;n为交互设备的数量,m为支持隔空手势的设备数量,E<sub>1</sub>,…,E<sub>m</sub>为支持隔空手势交互的设备,E<sub>m+1</sub>,…,E<sub>n</sub>为支持触摸交互的设备;为每种设备指定手势集G<sub>i</sub>,初始化为空集;每个设备并行执行2.2和2.3;2.2根据设备支持的手势交互类型匹配手势集,若交互设备支持触摸交互,令G<sub>i</sub>=G<sub>i</sub>∪G<sub>touch</sub>;若交互设备支持隔空交互,令G<sub>i</sub>=G<sub>i</sub>∪G<sub>air</sub>;若交互设备支持辅助交互,且辅助设备为交互笔,令G<sub>i</sub>=G<sub>i</sub>∩G<sub>trace</sub>;2.3从交互设备的驱动程序获取识别到的手势参数类型,若驱动程序输出的参数仅有线参数,令G<sub>i</sub>=G<sub>i</sub>∩G<sub>line</sub>;若驱动程序输出的参数仅有面参数,令G<sub>i</sub>=G<sub>i</sub>∩G<sub>surface</sub>;第三步,应用程序进行手势映射,方法是:3.1根据应用程序的应用手册确定该应用程序的功能集合;3.2为应用程序的功能集合中的元素分别映射相应的手势,如果应用程序有源代码或二次开发接口,则执行3.2.1,否则执行3.2.2:3.2.1为应用程序加入功能与手势相映射的源代码或二次开发代码,转第四步;3.2.2通过基于鼠标事件的多点触摸手势交互中间件进行映射,执行第四步;第四步,多设备进行手势识别,方法是:4.1设备E<sub>m+1</sub>,…,E<sub>j</sub>,…,E<sub>n</sub>并行进行手势识别,j取值为区间[m+1,n]中的整数,E<sub>j</sub>进行手势识别的过程是:4.1.1以三元组定义触摸手势参数TouchPara<sub>j</sub>=(TouchState,Sum,TouchValue[]),其中TouchValue[]为五元数组,对应有序集合TPARA中的五个参数;以四元组定义触摸手势识别结论TouchResult<sub>j</sub>=(TouchState,Sum,TouchPara,Value);将TouchPara<sub>j</sub>和TouchResult<sub>j</sub>的所有元素置空;4.1.2E<sub>j</sub>运行专属的驱动程序,捕捉手部数据,输出手势参数,写入TouchPara<sub>j</sub>,若TouchValue[]中的元素没有输出值,则维持空值;4.1.3对触摸手势参数进行识别,得到识别出的手势编号Gest<sub>j</sub>,方法是:4.1.3.1令临时参数temp=0;4.1.3.2若TouchPara<sub>j</sub>.TouchValue[temp]不为空,则将有序集合TPARA的第temp个元素写入TouchResult<sub>j</sub>.TouchPara,令TouchResult<sub>j</sub>.TouchPara=TouchPara<sub>j</sub>.TouchValue[temp],转4.1.3.4;否则令temp=temp+1;4.1.3.3若temp&lt;5,转4.1.3.2;否则,转4.6;4.1.3.4将识别结论TouchResult<sub>j</sub>的取值与手势集G<sub>i</sub>中的手势取值逐项对比,若四个元素的取值与G<sub>i</sub>中某一个手势的四个对应参数取值完全相同,则将该手势的Tid值写入Gest<sub>j</sub>,转4.1.4;否则,转4.6;4.1.4将Gest<sub>j</sub>传送给设备E<sub>j</sub>上当前活动的应用程序,将该手势映射为设定的功能;4.2确定一台计算机主机负责隔空手势的整合,并将交互设备E<sub>1</sub>,…,E<sub>m</sub>与主机通过局域网连接;4.3设备E<sub>1</sub>,…,E<sub>k</sub>,…,E<sub>m</sub>并行进行手势识别,k取值为区间[1,m]中的整数,E<sub>k</sub>进行手势识别的过程是:4.3.1以四元组定义隔空手势参数AirPara<sub>k</sub>=(Shape,AirValue[],AirTrend[],AirTrace[]),将AirPara<sub>k</sub>.Shape的值简记为ks,数组AirValue[]、AirTrend[]和AirTrace[]的长度为Pnum<sub>ks</sub>;以五元组定义隔空手势识别结论AirResult<sub>k</sub>=(Shape,AirPara,AirValue,AirTrend,AirTrace),将识别出的手势编号记为AirGest<sub>k</sub>;以四元组定义传输结论TranResult<sub>k</sub>=(k,ParaNum,AirGest<sub>k</sub>,TransTime),其中参数数量ParaNum指得到的形状参数的数量,TransTime指向主机发送传输结论时的系统时间,将AirPara<sub>k</sub>、AirResult<sub>k</sub>和TranResult<sub>k</sub>的所有元素置空;4.3.2E<sub>k</sub>运行专属的驱动程序,捕捉手部数据,输出手势参数,写入AirPara<sub>k</sub>,若AirValue[]、AirTrend[]、AirTrace[]中的元素没有输出值,则维持空值;4.3.3对隔空手势参数进行识别,得到识别出的手势编号AirGest<sub>k</sub>,方法是:4.3.3.1令临时参数temp1=0,将AirPara<sub>k</sub>.AirTrace[]中的非空元素数量写入ParaNum;4.3.3.2若AirPara<sub>k</sub>.AirTrace[temp1]不为空,则将有序集合APARA<sub>ks</sub>的第temp1个元素写入AirResult<sub>k</sub>.AirPara,令AirResult<sub>k</sub>.AirTrace=AirPara<sub>k</sub>.AirTrace[temp1],转4.3.3.10;否则令temp1=temp1+1;4.3.3.3若temp1&lt;Pnum<sub>ks</sub>,转4.3.3.2;否则,转4.3.3.4;4.3.3.4令temp1=0,将AirPara<sub>k</sub>.AirTrend[]中的非空元素数量写入ParaNum;4.3.3.5若AirPara<sub>k</sub>.AirTrend[temp1]不为空,则将有序集合APARA<sub>ks</sub>的第temp1个元素写入AirResult<sub>k</sub>.AirPara,令AirResult<sub>k</sub>.AirTrend=AirPara<sub>k</sub>.AirTrend[temp1],转4.3.3.10;否则令temp1=temp1+1;4.3.3.6若temp1&lt;Pnum<sub>ks</sub>,转4.3.3.5;否则,转4.3.3.7;4.3.3.7令temp1=0,将AirPara<sub>k</sub>.AirValue[]中的非空元素数量写入ParaNum;4.3.3.8若AirPara<sub>k</sub>.AirValue[temp1]不为空,则将有序集合APARA<sub>ks</sub>的第temp1个元素写入AirResult<sub>k</sub>.AirPara,令AirResult<sub>k</sub>.AirValue=AirPara<sub>k</sub>.AirValue[temp1],转4.3.3.10;否则令temp1=temp1+1;4.3.3.9若temp1&lt;Pnum<sub>ks</sub>,转4.3.3.8;否则,转4.6;4.3.3.10将识别结论AirResult<sub>k</sub>的取值与手势集G<sub>k</sub>中的手势取值逐项对比,若五个元素的取值与G<sub>k</sub>中某一个手势的五个对应参数取值完全相同,则将该手势的Aid值写入AirGest<sub>k</sub>,否则,转4.6;4.3.4将k,ParaNum,AirGest<sub>k</sub>,TransTime四个值写入TranResult<sub>k</sub>,将TranResult<sub>k</sub>传输到主机;4.4主机在E<sub>1</sub>,…,E<sub>m</sub>中确定对隔空手势操作进行响应的设备E<sub>act</sub>,下标act为对隔空手势操作进行响应的设备的编号,方法是:4.4.1比较接收到的几组TranResult<sub>k</sub>的TransTime值,将TransTime值最小的TranResult<sub>k</sub>的k值写入act;4.4.2主机向E<sub>act</sub>发送信息,由其负责响应隔空手势操作;4.5设备E<sub>act</sub>将AirGest<sub>act</sub>传送给当前活动的应用程序,将该手势映射为设定的功能;4.6结束。
地址 410073 湖南省长沙市开福区德雅路109号