一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于轨迹判断的毫米波雷达手势识别方法及装置与流程

2021-12-14 22:40:00 来源:中国专利 TAG:


1.本发明属于毫米波雷达系统技术领域,尤其涉及的是一种基于轨迹判断的毫米波雷达手势识别方法及装置。


背景技术:

2.动态手势是人机交互最易懂和简便的方式之一。手势识别目前在可穿戴移动设备、手势控制智能电视、手势控制智能家居、自动娱乐系统、增强现实/虚拟现实(ar/vr,augmented/virtual reality)等场景已有一定应用。目前的手势识别系统主要使用的传感器包括基于摄像机的、基于深度的以及带有3d追踪技术的嵌入式手套。但是这些系统均存在较大瓶颈限制其应用。基于摄像机的传感器容易受到光线、颜色、背景的影响,且由于需要处理大规模的图像计算开销较大。基于深度的传感器更容易检测出位置变化,但不能检测出方向和特定的手形态。可穿戴技术会干扰用户日常生活中的其他任务,且将系统输入限制为佩戴输入设备的人。
3.毫米波雷达传感器不受光线影响,可精确检测到手的具体运动方向和轨迹,其芯片的尺寸可以小于1cm2,且发射的无线信号可以穿透部分材料,因此便于隐藏在设备面板之后,为设备外观设计提供了更多可能性。此外,毫米波雷达具有低成本、低功耗、低运算复杂度等优势,且不收集任何的图像、声音等信息,从本质上规避了用户隐私泄露的风险。
4.然而,现有的毫米波雷达手势交互系统需要收集特定几种手势的大量数据集进行训练,功能较少、可扩展性较差。因此,设计一套精确度较高、功能全面、可扩展性较强的毫米波雷达手势识别装置对毫米波雷达的商业化应用具有重要意义。


技术实现要素:

5.本发明的目的在于解决现有毫米波雷达手势识别系统功能不全、可扩展性较差,运算开销较高等问题,为克服现有技术的缺点提出一种基于轨迹判断的毫米波雷达手势识别方法及装置,能够精确判断的基础手势包括左挥、右挥、上挥和下挥,以及基于上述基础手势组成的组合手势。
6.本发明提出了一种基于轨迹判断的毫米波雷达手势识别方法及装置,该装置主要包括如下部分:毫米波射频收发单元、微控制单元、发射天线和接收天线。
7.微控制单元与毫米波射频收发单元连接,毫米波射频收发单元分别与发射天线和接收天线连接。毫米波射频收发单元根据雷达波形参数产生相应的毫米波雷达信号,并接收毫米波雷达信号被人员手部反射回来的回波信号,再将回波信号传输给微控制单元;微控制单元使用目前已经商用的成熟微控制单元即可,例如可烧录和运行手势识别程序的单片机,主要功能是处理回波信号得到人员手势判断结果;发射天线用于发射毫米波射频收发单元产生的毫米波雷达信号;接收天线用于接收空间中反射回来的毫米波雷达信号,并将其传输给毫米波射频收发单元。雷达板子为y

z平面。和雷达垂直的是x轴,板子正面是x轴的正方向。y轴和地面平行,人正面对雷达时,左手是y轴负方向,右手是y轴正方向。z轴和
地面垂直,向上是z轴负方向,向下是z轴正方向。
8.一种基于轨迹判断的毫米波雷达手势识别方法,主要在微控制单元对于回波信号的处理流程中完成,具体包括如下步骤:
9.步骤1:微控制单元根据回波信号得到人员手部运动轨迹每个点的数据信息;
10.步骤2:设定轨迹起点和终点的检索方法,该方法应遵循不漏掉任何手势且减少轨迹重复判断的原则;
11.步骤3:针对一段给定起点和终点的轨迹,首先计算其y坐标和z坐标关于时刻t的最小二乘直线斜率以及各个坐标轴方向的变化幅度,通过最小二乘斜率可以排除不可能的基础手势(基础手势指左挥、右挥、上挥和下挥);排除不可能的基础手势后,结合各个坐标轴方向的变化幅度,仅判断当前手势是否是剩余的基础手势即可。
12.步骤4:如果连续判定出的基础手势构成组合手势,输出组合手势判定结果。
13.进一步地,步骤1所述的具体内容如下:
14.所述人员手部运动轨迹每个点具体包括如下信息:
15.(1)帧编号frame_num;
16.(2)毫米波雷达在当前帧采集的点数量target_num;
17.(3)当前时刻msec;
18.(4)当前采集的点的三维空间坐标(x,y,z);
19.进一步地,步骤2所述的轨迹起点和终点的检索方法,具体内容如下:
20.引入自定义外层函数gstartendinner更新用于手势判断的轨迹起点和终点,所述的外层函数进行的主要操作如下:
21.s201、引入状态变量curstate,用于指示当前轨迹手势判断结果,其初值可设为“random”,初始起点和终点均设为毫米波雷达数据采集的第一个点,下一时刻的点到来时起点不变终点变为当前时刻点。同时,给定最小时间间隔mingpartinterval,当起点和终点时间间隔小于mingpartinterval时,不进行对于轨迹的手势判断,即手势判断算法要求单个手势时间间隔不低于mingpartinterval,直到新的点到来,终点更新为当前时刻点且起点和终点时间间隔不小于mingpartinterval时开始进行具体的手势判断;
22.s202、当起点和终点时间间隔大于或等于mingpartinterval时,判断该段轨迹属于哪一种基础手势,结果可分类为左挥、右挥、上挥、下挥、随机五种状态,随后curstate的值更新为相应状态。
23.若结果为左挥,curstate值置为“left”,保持起点不变,终点是当前时刻最后一个点,直到左挥中断,此时输出左挥的起点和终点,考虑到毫米波雷达采集的点是随时间逐渐获取的,为保证实时性,新的起点和终点均变为该左挥结束时的终点,当下一时刻点到来时起点不变,终点变为该时刻的点;右挥、上挥、下挥和左挥同理。
24.若结果为随机或超过最大时间间隔maxgpartinterval仍未判断出基础手势,起点向前移动一个点,终点不变,直到起点和终点时间间隔小于mingpartinterval,此时终点可向后滑动一个点,起点变为上一个基础手势结束时的终点;
25.其中,mingpartinterval和maxgpartinterval需结合大量测试人员手势挥动数据并针对给定的手势识别正确率需求进行确定,考虑到人的习惯,通常mingpartinterval取值范围0.3s~1s,maxgpartinterval取值范围1.5s~4s,本领域技术人员也可根据具体应
用场景和实际性能需求进行微调。
26.s203、为提高手势识别算法效率,应减少相同轨迹的重复判断次数,因此,每当有新的点到来之前,以当前最后一个点为终点的轨迹均要判断完毕,从而保证有新的点到来时,只对以该点为终点的轨迹进行手势判断。
27.进一步地,步骤3所述的具体内容如下:
28.引入自定义内层函数gstatetrans针对给定起点和终点的一段轨迹给出手势判断结果,该内层函数进行的主要操作如下:
29.s301、计算轨迹上的点的y和z坐标随时间t变化的最小二乘直线斜率yt和zt;yt和zt反应的是轨迹分别在y轴和z轴方向的平均运动速率;
30.s302、计算轨迹上的点的x坐标变化幅度dx,这里dx定义为:去掉最大的x坐标和最小x坐标,在剩余x坐标中最大值减去最小值,同理可计算dy和dz;
31.s303、curstate当前值为“random”的情形:
32.(a)|yt|>|zt|,yt<0时,仅需判断当前轨迹是否是左挥即可;
33.(b)|yt|>|zt|,yt>0时,仅需判断当前轨迹是否是右挥即可;
34.(c)|yt|<|zt|,yt<0时,仅需判断当前轨迹是否是上挥即可;
35.(d)|yt|<|zt|,yt>0时,仅需判断当前轨迹是否是下挥即可;
36.s304、curstate当前值不为“random”的情形:
37.(a)curstate==“left”时,仅需判断左挥是否中断;
38.(b)curstate==“right”时,仅需判断右挥是否中断;
39.(c)curstate==“up”时,仅需判断上挥是否中断;
40.(d)curstate==“down”时,仅需判断下挥是否中断。
41.以左挥为例,判断一段给定起点和终点的轨迹是否是左挥可分两种情况讨论:
42.第一种情况:cur state==“random”:对于左挥,y坐标应符合逐渐减小的趋势,这里定义对于轨迹上相邻时刻采集到的两点,若当前时刻点的y坐标大于上一时刻点的y坐标,则认为当前时刻点是坏点。如果|yt|>|zt|,yt<0且下列条件全部满足时cur state切换为“left”:条件a、坏点数低于预先设定的最大数量或比例,相关数量和比例可通过大量的实验数据并保证手势识别正确率达到90%以上的前提下设定和调整,通常最大坏点数取值范围3~7,最大坏点比例取值范围20%~35%;条件b、轨迹上第二个点和第三个点的y坐标均小于起点的y坐标;条件c、轨迹至少包含的点数为minnum,该值的设定需要综合特征要求和实验数据,为3~7;条件d、dy>dz;条件e、dx和dz均不超过指定阈值,该阈值通常可设定为测试人员挥动手势的平均上限距离;条件f、基础手势的挥动设有最小距离mindistance,为了减少其他手势带来的干扰,该装置能够识别的手势挥动幅度要求不小于此最小距离,取值范围通常在0.10m~0.20m。。
43.第二种情况:cur state==“left”:下列条件满足其一则左挥中断:条件a、连续两个点的y坐标增大;条件b、连续两个点的z坐标增大幅度大于y坐标减小幅度;条件c、连续两个点的z坐标减小幅度大于y坐标减小幅度;条件d、坏点数超过预先设定的最大数量或比例,该数量和比例设定与所述第一种情况的条件a相同;条件e、dx或dz超过指定阈值,该阈值设定与所述第一种情况的条件e相同。当左挥中断时,当前轨迹的起点即为该左挥的起点,终点为中断点的前一时刻的点,cur state由“left”切换为“random”。
44.同理可判断右挥、上挥和下挥的形成和中断。
45.进一步地,步骤4所述的具体内容如下:本发明中预先定义了若干组合手势,例如顺时针画矩形由四个基础手势右挥、下挥、左挥、上挥构成。同时,手势识别算法中定义了一个结构体数组用于缓存基础手势的判定结果,当连续出现右挥、下挥、左挥、上挥四个基础手势时,可判定为一个预先定义的组合手势。另一方面考虑到手势在挥动过程中会因为外界干扰发生中断的情形,且组合手势的判定需要所有基础手势均判定成功,故本发明在组合手势的判定过程中将两个连续相同基础手势合并为一个。
46.一种基于轨迹判断的毫米波雷达手势识别方法及装置,其优点及效果在于:毫米波雷达传感器不受光线影响,可精确检测到手的具体运动方向和轨迹,低成本、低功耗、低运算复杂度,保护用户隐私。基于轨迹判断的手势识别方法充分利用统计学特性,不需收集特定几种手势的大量数据集进行训练,功能全面且可扩展性较强,同时可保证较高的识别正确率。
附图说明
47.图1为毫米波雷达手势识别装置各个元件基本框图。
48.图2为微控制单元采用单片机示例图。
49.图3为手势识别算法基本框图。
具体实施方式
50.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的各实施方式进行详细的阐述。然而,本领域的普通技术人员可以理解,在本发明各实施方式中,为了使读者更好地理解本发明而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施方式的种种变化和修改,也可以实现本发明所要求保护的技术方案。
51.本发明提出了一种基于轨迹判断的毫米波雷达手势识别装置。雷达板子为y

z平面。和雷达垂直的是x轴,板子正面是x轴的正方向。y轴和地面平行,人正面对雷达时,左手是y轴负方向,右手是y轴正方向。z轴和地面垂直,向上是z轴负方向,向下是z轴正方向。
52.该装置主要由毫米波射频收发单元、微控制单元、发射天线和接收天线四部分组成,其系统框架如图1所示。毫米波射频收发单元根据雷达波形参数产生相应的毫米波雷达信号,并接收毫米波雷达信号被人员手部反射回来的回波信号,再将回波信号传输给微控制单元;微控制单元使用目前已经商用的成熟微控制单元即可,例如可烧录和运行手势识别程序的单片机(如图2所示),对回波信号处理得到人员手势判断结果;发射天线用于发射所述毫米波射频收发单元产生的毫米波雷达信号;接收天线用于接收空间中反射回来的毫米波雷达信号,并将其传输给毫米波射频收发单元。
53.本发明,一种基于轨迹判断的毫米波雷达手势识别方法所采用的手势识别算法是基于轨迹判断的统计学方法,主要在微控制单元对于回波信号的处理流程中完成,主要流程如图3所示,具体包括如下步骤:
54.步骤1:微控制单元根据回波信号得到人员手部移动轨迹每个点的数据信息,数据信息保存在结构体数组trajarray中,trajarray主要包括如下元素:
55.(1)帧编号frame_num;
56.(2)毫米波雷达在当前帧采集的点数量target_num;
57.(3)当前时刻msec;
58.(4)当前采集的点的坐标(x,y,z);
59.步骤2:基于轨迹判断的手势识别方法,首先应定义好用于手势判断的轨迹起点和终点的检索方法,该方法应遵循不漏掉任何手势且尽可能地减少轨迹重复判断的原则;为提高手势识别效率,应减少相同轨迹的重复判断次数,因此,每当有新的点到来之前,以当前最后一个点inendidx为终点的轨迹均要判断完毕,从而保证有新的点到来时,只对以inendidx为终点的轨迹进行手势判断。
60.本发明中定义外层函数gstartendinner更新用于手势判断的轨迹起点和终点,并用curstate指示当前手势判断状态。gstartendinner函数输入参数包括:
61.(1)trajarray,轨迹各个点信息结构体数组;
62.(2)trajtimearray,轨迹各个点时刻的数组;
63.(3)instartidx,用于轨迹检索的起点;
64.(4)inendidx,轨迹终点。
65.该函数返回判定出的各个基础手势的起点和终点。
66.gstartendinner函数中调用gstatetrans函数用于判定给定轨迹起点和终点的手势判断结果。gstatetrans函数输入参数包括:
67.(1)curstate,
68.(2)trajarray,
69.(3)trajtimearray,
70.(4)trajstartidx,用于手势判断的轨迹起点,初始值等于instartidx;
71.(5)inendidx。
72.该函数返回给定起点和终点的轨迹手势判断结果。
73.gstartendinner函数每次运行均对应不同的inendidx,而同一gstartendinner函数下gstatetrans函数每次运行终点固定为inendidx,起点trajstartidx每次运行时更新。
74.gstartendinner函数下,有四个静态变量,分别为:
75.(1)round,当前gstartendinner函数运行的次数;
76.(2)completeidx,可用于记录上一个基础手势中断点前一个点,初值设为0;
77.(3)lastroundstate,上一次gstartendinner函数运行时curstate的值;
78.(4)lastroundendidx,上一次gstartendinner函数运行时用于手势判断的轨迹终点;
[0079][0080]
运行gstatetrans函数:
[0081]
(1)若curstate由"random"切换为基础手势之一,记录相应基础手势起点startidx和当前终点,更新completeidx;随后起点trajstartidx保持不变,终点向后滑动(即当前gstartendinner结束,运行下一次gstartendinner函数);
[0082]
(2)若curstate由基础手势之一切换为"random",则当前基础手势已中断,更新completeidx,当前gstartendinner结束,下一次运行gstartendinner函数的起点和终点均变为上一次基础手势结束时的终点;
[0083]
(3)若curstate连续两次运行gstatetrans函数均判定为"random"或超过最大时间间隔maxgpartinterval仍未判断出基础手势,更新completeidx,起点trajstartidx向前移动一个点,终点不变,直到起点和终点时间间隔小于mingpartinterval,此时终点可向后滑动一个点(即当前gstartendinner函数结束,运行下一次gstartendinner函数),起点变为上一个基础手势结束时的终点。考虑到人的习惯,通常mingpartinterval取值范围0.3s~1s,maxgpartinterval取值范围1.5s~4s。
[0084]
每次gstartendinner函数运行结束前,
[0085]
lastroundstate=curstate;
[0086]
lastroundendidx=inendidx;
[0087]
round=round 1;
[0088]
步骤3:gstatetrans函数下调用了isgleft,isgright,isgup,isgdown函数分别用于左挥、右挥、上挥、下挥四种基础手势的判断。另一方面,如果针对一段给定起点和终点的轨迹,将上述四个函数均运行一遍,算法效率会较为低下。因此,为提高算法效率,针对一段给定起点和终点的轨迹,首先计算其y坐标和z坐标关于时刻t的最小二乘直线斜率,排除不可能的基础手势,缩小手势判定范围。
[0089]
s301、计算轨迹上的点y坐标和z坐标随时间t变化的最小二乘直线斜率yt和zt;
[0090]
s302、curstate当前值为“random”的情况下:
[0091]
if|yt|>|zt|,yt<0
[0092]
运行isgleft函数;
[0093]
end
[0094]
if|yt|>|zt|,yt>0
[0095]
运行isgright函数;
[0096]
end
[0097]
if|yt|<|zt|,yt<0
[0098]
运行isgup函数;
[0099]
end
[0100]
if|yt|<|zt|,yt>0
[0101]
运行isgdown函数;
[0102]
end
[0103]
其他情况,curstate的值仍为“random”;
[0104]
s303、if cur state==“left”[0105]
运行isgleft函数;
[0106]
手势未中断则curstate保持“left”;
[0107]
手势中断则curstate切换为“random”;
[0108]
end
[0109]
if curstate==“right”[0110]
运行isgright函数;
[0111]
手势未中断则curstate保持“right”;
[0112]
手势中断则curstate切换为“random”;
[0113]
end
[0114]
if curstate==“up”[0115]
运行isgup函数;
[0116]
手势未中断则cur state保持“up”;
[0117]
手势中断则cur state切换为“random”;
[0118]
end
[0119]
if curstate==“down”[0120]
运行isgdown函数;
[0121]
手势未中断则curstate保持“down”;
[0122]
手势中断则curstate切换为“random”;
[0123]
end
[0124]
s304、排除不可能的基础手势后,仅判断当前手势是否是剩余的基础手势即可。
[0125]
运行gstatetrans函数时,还需要计算轨迹上的点x坐标变化幅度dx,这里dx定义为去掉最大x坐标和最小x坐标,在剩余x坐标中最大值减去最小值,同理可计算dy和dz;
[0126]
isgleft函数具体包括如下步骤:
[0127]
(1)这里定义对于轨迹上相邻时刻的两点,若当前时刻y坐标大于上一时刻y坐标,则认为当前时刻点是坏点。
[0128]
首先计算轨迹上坏点个数和坏点比例。
[0129]
(2)if curstate==“random”[0130]
除了|yt|>|zt|,yt<0以外,下列条件需全部满足,则curstate切换为“left”.
[0131]
(a)坏点数低于预先设定的数量或比例,该数量和比例可通过大量的实验数据并保证手势识别正确率达到90%以上的前提下设定和调整,通常最大坏点数取值范围3~7,最大坏点比例取值范围20%~35%;
[0132]
(b)轨迹上第二个点和第三个点的y坐标均小于起点y坐标;
[0133]
(c)轨迹至少包含的点数为minnum,这个值是综合特征要求和实验数据进行设定的,为了防止手势识别中轻微的手势晃动都被识别,即灵敏性不能太强,所以minnum不能太小,同时需要保证测试人员做出指定手势的难度不能太大,因此结合上百组实验数据可设定为3~7,具体值可结合应用场景下的性能需求最终确定,但不能小于3;
[0134]
(d)dy>dz;
[0135]
(e)dx和dz均不超过指定阈值,该阈值通常可设定为测试人员挥动手势的平均上限距离。
[0136]
(f)基础手势的挥动设有最小距离mindistance,为了减少其他手势带来的干扰,该装置能够识别的手势挥动幅度要求不小于此最小距离,通常取值范围在0.10m~0.20m。
[0137]
上述条件有一条不满足则curstate保持“random”.
[0138]
end
[0139]
(3)if curstate==“left”[0140]
下列条件满足其一则左挥中断:
[0141]
(a)连续两个点y坐标增大;
[0142]
(b)连续两个点z坐标增大幅度大于y坐标减小幅度;
[0143]
(c)连续两个点z坐标减小幅度大于y坐标减小幅度;
[0144]
(d)坏点数超过预先设定的数量或比例,通常最大坏点数取值范围3~7,最大坏点比例取值范围20%~35%;
[0145]
(e)dx或dz超过指定阈值,该阈值通常可设定为测试人员挥动手势的平均上限距离。
[0146]
上述条件均不满足则curstate保持“left”.
[0147]
end
[0148]
isgright函数、isgup函数、isgdown函数与isgleft函数同理。
[0149]
步骤4:如果连续判定出的基础手势构成组合手势,输出组合手势判定结果。为节省内存,毫米波雷达采集的手部运动轨迹信息所保存的结构体数组其长度上限设为max_traj_cnt,可人为调整,采集的点数过多时,仅保留最新的max_traj_cnt个点的信息。gstartinner函数下通过缓存指定数量的基础手势,与预先定义好的组合手势进行对比。由于组合手势的判定需要每个基础手势均判断正确,为提高组合手势识别率,可将时间间隔相近的连续两个相同基础手势合并为一个。
[0150]
关于组合手势的定义:引入自定义变量combstepcnt表示组合手势包含的基础手势数量,自定义结构体数组combstep用来存储连续的已判定出的基础手势,combstep数组长度为combstepcnt,数组中的每个成员包含如下信息:
[0151]
(1)state,缓存的基础手势;
[0152]
(2)elapsedmsec,相邻基础手势最大时间间隔,可根据具体应用场景和需求设定,超过此时间间隔可判定为组合手势中断,新的组合手势判定需要重新开始。
[0153]
例如顺时针画矩形可定义为:右挥、下挥、左挥、上挥,则
[0154]
combstepcnt=4;
[0155]
combstep(1).state="right";
[0156]
combstep(1).elapsedmsec=1000000;
[0157]
combstep(2).state="down";
[0158]
combstep(2).elapsedmsec=1000000;
[0159]
combstep(3).state="left";
[0160]
combstep(3).elapsedmsec=1000000;
[0161]
combstep(4).state="up";
[0162]
combstep(4).elapsedmsec=1000000;
[0163]
逆时针画矩形可定义为:左挥、下挥、右挥、上挥,则
[0164]
combstepcnt=4;
[0165]
combstep(1).state="left";
[0166]
combstep(1).elapsedmsec=1000000;
[0167]
combstep(2).state="down";
[0168]
combstep(2).elapsedmsec=1000000;
[0169]
combstep(3).state="right";
[0170]
combstep(3).elapsedmsec=1000000;
[0171]
combstep(4).state="up";
[0172]
combstep(4).elapsedmsec=1000000。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献