CN118116078A - 识别挥动动作的方法及相关装置 - Google Patents

识别挥动动作的方法及相关装置 Download PDF

Info

Publication number
CN118116078A
CN118116078A CN202410268661.6A CN202410268661A CN118116078A CN 118116078 A CN118116078 A CN 118116078A CN 202410268661 A CN202410268661 A CN 202410268661A CN 118116078 A CN118116078 A CN 118116078A
Authority
CN
China
Prior art keywords
image frame
hand
determining
gesture
motion
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202410268661.6A
Other languages
English (en)
Inventor
王淼军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hubei Xingji Meizu Group Co ltd
Original Assignee
Hubei Xingji Meizu Group Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hubei Xingji Meizu Group Co ltd filed Critical Hubei Xingji Meizu Group Co ltd
Priority to CN202410268661.6A priority Critical patent/CN118116078A/zh
Publication of CN118116078A publication Critical patent/CN118116078A/zh
Pending legal-status Critical Current

Links

Landscapes

  • User Interface Of Digital Computer (AREA)
  • Image Analysis (AREA)

Abstract

本公开涉及识别挥动动作的方法及相关装置。一种识别挥动动作的方法包括:获取包含挥动手势的图像帧;响应于确定第一图像帧所包含的手部的特征点落入动作终点候选区域,将第一图像帧所包含的手部的特征点确定为挥动动作的终点;响应于确定早于第一图像帧的第二图像帧所包含的手部的特征点落入动作起点候选区域,将第二图像帧所包含的手部的特征点确定为挥动动作的起点;以及响应于确定挥动动作的起点和终点,识别到挥动动作。

Description

识别挥动动作的方法及相关装置
技术领域
本公开涉及机器视觉技术领域,并且更具体地,涉及识别挥动动作的方法,以及能够用于实现前述方法的电子设备、非瞬态存储介质和计算机程序产品。
背景技术
随着计算机技术的发展,人机交互方式已不再限于传统的键盘鼠标,而变得越来越多样化。如今,常见的人机交互方式包括基于机器视觉的手势交互、基于语音识别的语音交互、借助外接手柄的交互、使用惯性测量单元(Inertial Measurement Unit,IMU)外置设备的交互等。其中,基于机器视觉的手势交互只需获取手部图像即可识别对应的手势,与语音交互相比不易受外界噪声影响且能够很好地保护用户隐私,与借助外接手柄、IMU外置设备的交互相比消除了对附加设备的依赖。
发明内容
在下文中给出了关于本公开的简要概述,以便提供关于本公开的一些方面的基本理解。但是,应当理解,这个概述并不是关于本公开的穷举性概述。它并不是意图用来确定本公开的关键性部分或重要部分,也不是意图用来限定本公开的范围。其目的仅仅是以简化的形式给出关于本公开的某些概念,以此作为稍后给出的更详细描述的前序。
根据本公开的第一方面,提供了一种识别挥动动作的方法,包括:获取包含挥动手势的图像帧;响应于确定第一图像帧所包含的手部的特征点落入动作终点候选区域,将所述第一图像帧所包含的手部的特征点确定为挥动动作的终点;响应于确定早于所述第一图像帧的第二图像帧所包含的手部的特征点落入动作起点候选区域,将所述第二图像帧所包含的手部的特征点确定为挥动动作的起点;以及响应于确定挥动动作的起点和终点,识别到挥动动作。
根据本公开的第二方面,提供了一种识别挥动动作的方法,包括通过以下操作逐帧处理视频:响应于在当前图像帧中检测到手部、检测到手势关键点、并且基于检测到的手势关键点确定检测到的手部表现为挥动手势,将当前图像帧所包含的手部的特征点存储到栈,所述特征点选自当前图像帧的检测到的手势关键点,所述栈用于存储所述特征点;响应于确定所述栈中的当前图像帧所包含的手部的特征点落入动作终点候选区域,将当前图像帧所包含的手部的特征点确定为挥动动作的终点;响应于确定所述栈中的早于当前图像帧所包含的手部的特征点进入所述栈的另一特征点落入动作起点候选区域,将所述另一特征点确定为挥动动作的起点;响应于确定挥动动作的起点和终点,识别挥动动作的挥动方向;以及响应于完成对挥动动作的识别,清空所述栈。
根据本公开的第三方面,提供了一种电子设备,包括:一个或多个处理器;以及存储计算机可执行指令的存储器,所述计算机可执行指令在被所述一个或多个处理器执行时使得所述一个或多个处理器执行根据本公开的第一方面或第二方面所述的方法。
根据本公开的第四方面,提供了一种其上存储有计算机可执行指令的非瞬态存储介质,所述计算机可执行指令在被计算机执行时使得计算机执行根据本公开的第一方面或第二方面所述的方法。
根据本公开的第五方面,提供了一种计算机程序产品,所述计算机程序产品包括指令,所述指令在被处理器执行时实现根据本公开的第一方面或第二方面所述的方法。
附图说明
从结合附图示出的本公开的实施例的以下描述中,本公开的前述和其它特征和优点将变得清楚。附图结合到本文中并形成说明书的一部分,进一步用于解释本公开的原理并使本领域技术人员能够制造和使用本公开。其中:
图1示出了根据本公开的一些实施例的识别挥动动作的方法的流程图;
图2示例性地描绘了由手势关键点检测模型检测的手势关键点;
图3示例性地描绘了在成像视野中的手部;
图4示出了根据本公开的一些实施例的识别挥动动作的方法的流程图;
图5示出了根据本公开的一些实施例的识别挥动动作的方法的流程图;
图6示例性地描绘了图像帧的图像区域、动作起点候选区域、动作终点候选区域、以及进行挥动动作的手部的特征点挥动轨迹;
图7示例性地描绘了图像帧的图像区域被划分成向上挥动区域、向右挥动区域、向下挥动区域和向左挥动区域;
图8在图6的基础上进一步示例性地描绘了图像帧的图像区域被按照图7所示的方式划分成向上挥动区域、向右挥动区域、向下挥动区域和向左挥动区域,以及挥动动作的挥动向量和挥动角度;
图9示出了根据本公开的一些实施例的识别挥动动作的方法的流程图;
图10示出了根据本公开的非限制性示例的挥动动作识别过程的流程图;
图11示出了根据本公开的一些实施例的电子设备的示意性框图;
图12示出了其上可以实现本公开的实施例的计算机系统的示意性框图。
注意,在以下说明的实施方式中,有时在不同的附图之间共同使用同一附图标记来表示相同部分或具有相同功能的部分,而省略其重复说明。在一些情况中,使用相似的标号和字母表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
为了便于理解,在附图等中所示的各结构的位置、尺寸及范围等有时不表示实际的位置、尺寸及范围等。因此,本公开并不限于附图等所公开的位置、尺寸及范围等。
具体实施方式
下面将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。也就是说,本文中的结构及方法是以示例性的方式示出,来说明本公开中的结构和方法的不同实施例。然而,本领域技术人员将会理解,它们仅仅说明可以用来实施的本公开的示例性方式,而不是穷尽的方式。此外,附图不必按比例绘制,一些特征可能被放大以示出具体组件的细节。
另外,对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。
在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。
基于机器视觉的手势交互可以定义多种手势动作并为每种手势动作分配相应的操作。例如,挥动手势动作(在本文中也简称为挥动动作)常常用于屏幕切换、电子书翻页、翻看相册等应用场景。在本文中,挥动动作通常包括表现为挥动手势的手部发生位移,其中,挥动手势可以是指五指基本上平摊的手部状态。在本文中,“基本上平摊”意味着允许手指在一定程度内自然蜷曲,而不必完全伸直。
例如,可以使用动态时间规整(Dynamic Time Warping,DTW)算法来识别挥动动作以触发相应操作。DTW算法常用于测量两个时间序列的相似度。在手势动作识别中使用DTW算法时,首先对训练集中的每个手势动作进行预处理,提取特征并将其规范化为一个序列模板。然后,对于待识别的手势动作,进行相同的预处理操作,并将生成的序列与训练集中的序列模板逐一匹配,输出相似度最高的结果作为识别结果。具体地,DTW算法通常用固定长度的滑动窗对基于待识别的手势动作生成的序列进行滑动截取,然后将截取的序列与序列模板进行匹配并在匹配成功时识别相应手势动作并触发相应操作。在帧率一定的情况下,如果该手势动作进行得很慢,则该手势动作会涉及很多帧,甚至超过了滑动窗的长度,这会造成序列截取不全从而导致难以识别手势动作。因此,这种方法的灵敏度较低。然而,如果改用可变长度的滑动窗,则又会增加计算开销并降低处理效率。
另外,目前的挥动动作识别算法一般通过表现为挥动手势的手部的位移来进行挥动判断。当手部在朝某个方向挥动时,可能不期望地识别到该方向上的多个挥动动作。例如,当手部在某个方向上挥动的位移较长,或者挥动的速度较慢时,可能会不期望地识别到该方向上的多个挥动动作。比如,前述DTW算法的手势序列滑动截取和对比就容易产生这种问题。
当手部在某个方向上连续来回挥动时,手部的复归可能会不期望地导致识别到反方向的挥动动作。例如,在电子书翻页的应用场景中,手部在水平方向上连续来回挥动原本是为了将电子书快速翻阅到离当前页较远的页,却可能会不期望地导致来回翻阅同一页。因此,在实际应用中,为了避免此问题,一般会使用延时方式进行处理,例如在识别到一次挥动动作以触发相应操作后一定时间内不识别挥动动作或不触发相应操作。这种方法虽然能在一定程度上减少手部复归时的反方向误触发问题,但既会导致用户的手部复归需要适配预设延时时间,又无法适用手部快速挥动的场景,不利于用户体验。另一种解决方法是,要求进行手部来回挥动动作的用户在手部复归时使手部离开成像视野,即用户手部需要画圈式移动,而不能在成像视野内直线式往复移动,这也不利于用户体验。
为此,本公开提供了一种识别挥动动作的方法,其通过在成像视野中设置动作终点候选区域和动作起点候选区域来先确定挥动动作的终点再回溯挥动动作的起点,并响应于挥动动作的终点和起点的确定而识别到挥动动作,无需进行手势序列滑动截取和对比,具有较高的灵敏度和效率。另外,本公开只有在找到挥动动作的终点后回溯到挥动动作的起点时才会认为识别到挥动动作,进而能够触发相应操作。由于挥动动作的识别只与其终点和起点的确定有关,而终点和起点又被分别限制到动作终点候选区域和动作起点候选区域,因此,挥动动作的快慢都不会影响触发灵敏度。当手部在朝某个方向挥动时只会识别到一次挥动动作从而触发一次相应操作,避免了同方向上的多次误触发。当手部在某个方向上连续来回挥动时,也避免了反方向上的误触发。
下面结合附图详细描述根据本公开的各种实施例的识别挥动动作的方法。应理解,实际的方法可能还包括其它附加步骤,但为了避免模糊本公开的要点,本文不去讨论并且附图也未示出这些其它附加步骤。
图1示出了根据本公开的一些实施例的识别挥动动作的方法100。如图1所示,方法100包括步骤S102至S108。
在步骤S102,获取包含挥动手势的图像帧。
在步骤S104,响应于确定第一图像帧所包含的手部的特征点落入动作终点候选区域,将第一图像帧所包含的手部的特征点确定为挥动动作的终点。
在步骤S106,响应于确定早于第一图像帧的第二图像帧所包含的手部的特征点落入动作起点候选区域,将第二图像帧所包含的手部的特征点确定为挥动动作的起点。
在步骤S108,响应于确定挥动动作的起点和终点,识别到挥动动作。
可以从视频中获取图像帧。例如,在智能眼镜的应用场景中,由于眼镜上的操作面板很小因而能实现的操作较少或较简单,而且需要用户一直举手进行操作,长时间容易造成用户不适,因此对智能眼镜采用基于机器视觉的手势交互可以是有利的。由此,在智能眼镜的应用场景中,图像帧可以来自智能眼镜上的摄像头所拍摄的视频。又例如,在智能座舱的应用场景中,车载中控台往往设置在车辆前部,而后排乘客难以接触中控台,因此对智能座舱采用基于机器视觉的手势交互可以是有利的。由此,在智能座舱的应用场景中,图像帧可以来自车内摄像头(例如,可以朝后安装在中控台处,或者朝下安装在车顶处,等等)所拍摄的视频。
在一些实施例中,如果在图像帧中检测到手部、检测到手势关键点、并且基于检测到的手势关键点确定检测到的手部表现为挥动手势,则该图像帧是包含挥动手势的图像帧。可以采用现在已知或以后开发的任何合适的手部检测模型和手势关键点检测模型来分别检测手部和手势关键点。手部检测模型可以检测图像帧中是否存在手部以及存在的手部是左手还是右手。手势关键点检测模型一般可以检测手部的21个手势关键点。例如,如图2所示,手势关键点0可以接近于或者基本位于手腕,手势关键点1基本位于第一掌骨(例如相应于拇指的掌骨),手势关键点2、5、9、13、17分别基本位于拇指、食指、中指、无名指和小指的掌指关节,手势关键点4、8、12、16、20分别基本位于拇指、食指、中指、无名指和小指的指尖,手势关键点3、(6、7)、(10、11)、(14、15)、(18、19)分别基本位于拇指、食指、中指、无名指和小指的指间关节。
示例性的,基于检测到的手势关键点确定检测到的手部表现为挥动手势可以包括:响应于确定手部的手势关键点满足预设条件而确定手部表现为挥动手势。例如,预设条件可以包括手部的第一手指和非手指部分的多个关键点的横坐标满足基于手部的左右手属性和/或手掌手背属性确定的第一相对位置关系,以及第一手指的第一关键点与非手指部分的第二关键点之间的第一向量满足基于手部的左右手属性和/或手掌手背属性确定的角度关系。附加地,预设条件还可以包括手部的第一手指、第二手指和非手指部分的多个关键点的纵坐标满足第二相对位置关系,以及第二手指的第三关键点与非手指部分的第四关键点之间的第二向量满足角度关系。在一些实施例中,这种角度关系可以进一步基于要用挥动动作控制的对象确定。例如,对象的重要性越高,误操作后果越严重,则可以将角度关系设置得越严格。
在一些情况下,考虑两个手指可以是有利的,因为其相比于仅考虑一个手指的情况具有更好的识别准确度,而相比于考虑三个或更多个手指的情况具有更高的手势操作宽裕度和触发灵敏度。在一些实施例中,第一手指为食指,并且第二手指为拇指,这在一些情况下相比于其它手指组合可以是有利的,因为在一方面,食指和拇指相比于其它手指更容易经常保持在成像视野中(例如,在智能眼镜的视角下,小指可能常常被其它手指遮挡,另外,当手靠近用户胸膛时,五指基本都在成像视野内,而当手远离用户胸膛时(例如手沿胸膛的法向方向向外移动),小指、甚至无名指可能就离开成像视野了),在另一方面,不同手势中的食指和拇指的状态往往不同,从而能够很好地区分不同手势(比如,OK手势中的食指和拇指的状态与挥动手势中的食指和拇指的状态明显不同,但OK手势中的其余三个手指的状态与挥动手势中的其余三个手指的状态基本相同)。
出于非限制性说明目的,图3示例性地描绘了在成像视野中的手部,其被图示为右手手背(例如,在智能眼镜的视角下)。此外,在图3中还建立了以图像帧的左上角为原点o、以水平向右为x轴正方向、以竖直向下为y轴正方向的图像坐标系。
在本示例中,选取食指的手势关键点5-8、拇指的手势关键点2-4和非手指部分的手势关键点0-1来进行挥动手势的判断。例如,当满足以下条件时,可以认为该右手表现为挥动手势。
条件1:手势关键点8的横坐标小于手势关键点7的横坐标,手势关键点7的横坐标小于手势关键点6的横坐标,手势关键点6的横坐标小于手势关键点5的横坐标,手势关键点5的横坐标小于手势关键点0的横坐标。
条件2:手势关键点5、6、7、8的纵坐标中的最大值小于手势关键点1、2、3、4的纵坐标中的最小值。
条件3:从手势关键点0到手势关键点8的向量v08与x轴正方向的夹角θa为钝角。
条件4:从手势关键点1到手势关键点4的向量v14与x轴正方向的夹角θb为钝角。
例如,夹角θa可被计算为夹角θb可被计算为其中x0、x1、x4、x8分别为手势关键点0、1、4、8的横坐标,y0、y1、y4、y8分别为手势关键点0、1、4、8的纵坐标。条件3要求/>条件4要求可以认为超出此角度范围的夹角θa和/或θb不表示正常的挥动手势,被视为无效输入。因为机器只能检测图像中是否存在手而无法识别图像中的手是谁的手,所以若不限定此角度关系的话,则可能将除用户以外的其他人伸入成像视野的手(例如,在智能眼镜的应用场景中,位于用户对面的人朝用户伸出的手)错误识别为用户的挥动手势。在实际实施中,还可以进一步缩小夹角θa和/或θb的上述角度范围。例如,可以根据用户习惯而由用户自行设置此角度范围,或者可以采集用户使用行为参数后通过机器学习等算法更新角度范围,从而可以改善用户体验。另外,针对不同场景,此角度范围也可不同。例如,在翻阅更重要的内容时的角度范围可以更小以避免误触发,在翻阅更不重要的内容时的角度范围可以更大以保证灵敏度。由此,可以在进行挥动判断前先对图像帧进行场景识别,然后调用相关的角度关系以供判断。
上述条件1-4是为了将右手手背限制成手指基本上平摊的状态而设立的。这仅仅是示例性的而非限制性的。可以根据用于描述处于手指基本上平摊状态的右手手背的其它合适关节相对位置关系和手指延伸角度关系来设立附加的或替代的用于判断是否为挥动手势的条件。
可以理解,对于左手手背,上述条件中的条件2可以保持不变,而条件1、3、4需修改为下面的条件1’、3’、4’。
条件1’:手势关键点8的横坐标大于手势关键点7的横坐标,手势关键点7的横坐标大于手势关键点6的横坐标,手势关键点6的横坐标大于手势关键点5的横坐标,手势关键点5的横坐标大于手势关键点0的横坐标。
条件3’:从手势关键点0到手势关键点8的向量v08与x轴正方向的夹角θa为锐角。
条件4’:从手势关键点1到手势关键点4的向量v14与x轴正方向的夹角θb为锐角。
当然,由于左手是右手的镜像,因而在实际实施中,可以针对右手和左手采用一致的判断条件,例如都采用基于右手设置的判断条件,然后对于左手在进行判断前先将图像水平翻转以便按照“右手”进行判断。
可以理解,图3的图像坐标系xoy仅仅是示例性的而非限制性的,本领域技术人员能够根据具体情况和需要相应地设置图像坐标系xoy。例如,在智能座舱的视角下(当摄像头朝后安装在中控台时),成像视野中的手部会变为右手手掌,此时图像坐标系xoy可以相应地调整为以图像帧的右上角为原点o、以水平向左为x轴正方向、以竖直向下为y轴正方向,从而可以应用相同的判断条件。替代地,若想保持图像坐标系xoy不变,也可以相应调整判断条件,例如前述条件可以针对智能座舱的视角相应调整为条件1’、2、3’、4’,或者也可以对于手掌在进行判断前先将图像水平翻转以便按照“手背”进行判断从而仍可以应用条件1、2、3、4。
因此,假设建立了如图3所示的图像坐标系xoy并针对右手手背设置了用于判断是否挥动手势的条件1、2、3、4,那么可以利用条件1、2、3、4来:对于右手手背直接判断;对于右手手掌进行判断前先将图像水平翻转一次,再按照“右手手背”进行判断;对于左手手背进行判断前先将图像水平翻转一次,再按照“右手手背”进行判断;对于左手手掌进行判断前先将图像水平翻转两次,再按照“右手手背”进行判断(两次水平翻转相当于不翻转,因此也可以直接对左手手掌进行判断)。
在一些实施例中,步骤S102的获取包含挥动手势的图像帧可以包括响应于在当前图像帧中检测到手部、检测到手势关键点、并且基于检测到的手势关键点确定检测到的手部表现为挥动手势,将当前图像帧添加到图像帧序列。该图像帧序列是用于收集包含挥动手势的图像帧的。通过建立这样的图像帧序列来确定挥动动作的终点和起点。例如,步骤S104中的第一图像帧和步骤S106中的第二图像帧都会包括在该图像帧序列中。另外,还可以响应于以下中的至少一者而清空该图像帧序列:在当前图像帧中未检测到手部;或者在当前图像帧中未检测到手势关键点;或者基于在当前图像帧中检测到的手势关键点确定在当前图像帧中检测到的手部不表现为挥动手势。例如,该图像帧序列可被初始化为空,开始逐帧处理视频以便识别挥动动作后,如果一个或多个连续图像帧都是包含挥动手势的图像帧,则所述一个或多个连续图像帧将被依次添加到该图像帧序列;一旦所述一个或多个连续图像帧的下一图像帧不是包含挥动手势的图像帧,则该图像帧序列都被清空。这有利于保证最终得到的图像帧序列对应于完整连续的挥动动作。
在将当前图像帧添加到该图像帧序列之后,在一些实施例中,方法100还可以包括响应于确定当前图像帧所包含的手部的特征点落入动作终点候选区域,将当前图像帧所包含的手部的特征点确定为挥动动作的终点。也即,当前图像帧可以是步骤S104中的第一图像帧。另一方面,可以响应于确定当前图像帧所包含的手部的特征点未落入动作终点候选区域,确定当前图像帧所包含的手部的特征点不是挥动动作的终点。此时,例如若存在下一图像帧的话,可以继续处理下一图像帧。
特征点可以选自当前图像帧的检测到的手势关键点。示例性的,特征点被选择为最接近手部中心的手势关键点,例如特征点为图2和图3所示的手势关键点9。在一些示例中,特征点也可以不止包括一个特征点,而是包括两个或更多个特征点,例如特征点包括图2和图3所示的手势关键点5、9。多个特征点的方案相比于单个特征点的方案,可以提高识别准确度,更好地避免误触发,但是也会降低触发灵敏度,并对用户操作提出了更为严格的要求。另外,在多个特征点的方案中,不仅可以要求多个特征点同时落入动作终点候选区域(类似地,动作起点候选区域)才认为多个特征点中的例如最接近手部中心的一者为动作终点(类似地,起点),也可以替代地要求多个特征点中的任意或选择的一个或多个特征点同时落入动作终点候选区域(类似地,动作起点候选区域)才认为该一个或多个特征点中的例如最接近手部中心的一者为动作终点(类似地,起点)。
在将当前图像帧所包含的手部的特征点确定为挥动动作的终点之后,在一些实施例中,方法100还可以包括响应于确定该图像帧序列中的早于当前图像帧的另一图像帧所包含的手部的特征点落入动作起点候选区域,将该另一图像帧所包含的手部的特征点确定为挥动动作的起点。也即,该另一图像帧可以是步骤S106中的第二图像帧。另一方面,可以响应于确定该图像帧序列中的早于当前图像帧的每个图像帧所包含的手部的特征点均未落入动作起点候选区域,清空该图像帧序列。这可有利于保证该图像帧序列至多存在一个正确的(具有与其匹配的起点的)终点,而不会存在一些“错误的”(没有与其匹配的起点的)终点,从而防止误触发。
在一些实施例中,方法100还可以包括响应于完成对挥动动作的识别,清空该图像帧序列。这可以有利于当手部在朝某个方向挥动时避免同方向上的多次误触发,还可以有利于避免终点和起点的错误匹配所导致的错误触发。可以理解,在完成对挥动动作的识别后,清空该图像帧序列前,该图像帧序列仅包括一个终点,那就是当前图像帧所包含的手部的特征点,而早于当前图像帧进入该图像帧序列的那些图像帧可能有一个或多个图像帧所包含的手部的特征点落入动作起点候选区域,也可能有一个或多个图像帧所包含的手部的特征点既未落入动作起点候选区域也未落入动作终点候选区域。示例性的,可以响应于确定早于当前图像帧(第一图像帧)的多个另一图像帧(第二图像帧)所包含的手部的特征点落入动作起点候选区域,将所述多个另一图像帧(第二图像帧)所包含的手部的特征点中离图像帧的图像中心最近的一者确定为挥动动作的起点,这将有利于提高后续挥动方向判断(稍后将描述)的精度。
图4示出了方法100的一种非限制性示例实施方式200。如图4所示,在步骤S202,响应于在当前图像帧中检测到手部、检测到手势关键点、并且基于检测到的手势关键点确定检测到的手部表现为挥动手势,将当前图像帧添加到图像帧序列;在步骤S204,响应于确定当前图像帧所包含的手部的特征点落入动作终点候选区域,将当前图像帧所包含的手部的特征点确定为挥动动作的终点;在步骤S206,响应于确定图像帧序列中的早于当前图像帧的另一图像帧所包含的手部的特征点落入动作起点候选区域,将该另一图像帧所包含的手部的特征点确定为挥动动作的起点;在步骤S208,响应于完成对挥动动作的识别,清空图像帧序列。
除了可以从图像帧的维度确定挥动动作的终点和起点外,还可以从特征点的维度确定挥动动作的终点和起点。在一些实施例中,步骤S102的获取包含挥动手势的图像帧也可以包括响应于在当前图像帧中检测到手部、检测到手势关键点、并且基于检测到的手势关键点确定检测到的手部表现为挥动手势,确定当前图像帧是包含挥动手势的图像帧,并将当前图像帧所包含的手部的特征点存储到存储区域。该存储区域用于存储特征点。该存储区域还可以在存储特征点的同时进一步存储其余手势关键点。该存储区域例如可以具有后进先出特性,比如可以是栈。通过建立这样的存储区域来确定挥动动作的终点和起点。例如,步骤S104中的第一图像帧所包含的手部的特征点和步骤S106中的第二图像帧所包含的手部的特征点都会存储在该存储区域中。另外,还可以响应于以下中的至少一者而清空该存储区域:在当前图像帧中未检测到手部;或者在当前图像帧中未检测到手势关键点;或者基于在当前图像帧中检测到的手势关键点确定在当前图像帧中检测到的手部不表现为挥动手势。例如,该存储区域可被初始化为空,开始逐帧处理视频以便识别挥动动作后,如果一个或多个连续图像帧都是包含挥动手势的图像帧,则所述一个或多个连续图像帧所包含的手部的特征点将被依次存储到该存储区域;一旦所述一个或多个连续图像帧的下一图像帧不是包含挥动手势的图像帧,则该存储区域被清空。这有利于保证存储区域中最终存储的内容对应于完整连续的挥动动作。
在将当前图像帧所包含的手部的特征点存储到该存储区域后,在一些实施例中,方法100还可以包括响应于确定当前图像帧所包含的手部的特征点落入动作终点候选区域,将当前图像帧所包含的手部的特征点确定为挥动动作的终点。也即,当前图像帧所包含的手部的特征点可以是步骤S104中的第一图像帧所包含的手部的特征点。另一方面,可以响应于确定当前图像帧所包含的手部的特征点未落入动作终点候选区域,确定当前图像帧所包含的手部的特征点不是挥动动作的终点。此时,例如若存在下一图像帧的话,可以继续处理下一图像帧。
在将当前图像帧所包含的手部的特征点确定为挥动动作的终点之后,在一些实施例中,方法100还可以包括响应于确定该存储区域中的早于当前图像帧所包含的手部的特征点进入该存储区域的另一特征点落入动作起点候选区域,将该另一特征点确定为挥动动作的起点。也即,该另一图像帧所包含的手部的特征点可以是步骤S106中的第二图像帧所包含的手部的特征点。另一方面,可以响应于确定该存储区域中的早于当前图像帧所包含的手部的特征点进入该存储区域的每个特征点均未落入动作起点候选区域,清空该存储区域。这可有利于保证该存储区域至多存在一个正确的(具有与其匹配的起点的)终点,而不会存在一些“错误的”(没有与其匹配的起点的)终点,从而防止误触发。
在一些实施例中,方法100还可以包括响应于完成对挥动动作的识别,清空该存储区域。这可以有利于当手部在朝某个方向挥动时避免同方向上的多次误触发,还可以有利于避免终点和起点的错误匹配所导致的错误触发。可以理解,在完成对挥动动作的识别后,清空该存储区域前,该存储区域仅包括一个终点,那就是当前图像帧所包含的手部的特征点,而早于当前图像帧所包含的手部的特征点进入该存储区域的那些特征点可能有一个或多个特征点落入动作起点候选区域,也可能有一个或多个特征点既未落入动作起点候选区域也未落入动作终点候选区域。示例性的,可以响应于确定早于当前图像帧(第一图像帧)所包含的手部的特征点进入该存储区域的多个特征点落入动作起点候选区域,将所述多个特征点中离图像帧的图像中心最近的一者确定为挥动动作的起点,这将有利于提高后续挥动方向判断(稍后将描述)的精度。
图5示出了方法100的另一种非限制性示例实施方式300。如图5所示,在步骤S302,响应于在当前图像帧中检测到手部、检测到手势关键点、并且基于检测到的手势关键点确定检测到的手部表现为挥动手势,确定当前图像帧是包含挥动手势的图像帧,并将当前图像帧所包含的手部的特征点存储到存储区域;在步骤3204,响应于确定当前图像帧所包含的手部的特征点落入动作终点候选区域,将当前图像帧所包含的手部的特征点确定为挥动动作的终点;在步骤S306,响应于确定存储区域中的早于当前图像帧所包含的手部的特征点进入存储区域的另一特征点落入动作起点候选区域,将该另一特征点确定为挥动动作的起点;在步骤S308,响应于完成对挥动动作的识别,清空存储区域。
在一些实施例中,动作起点候选区域可以比动作终点候选区域更接近图像帧的图像中心。例如,动作终点候选区域可以围绕动作起点候选区域设置在动作终点候选区域的外侧。在一些示例中,在动作起点候选区域与动作终点候选区域之间可以存在间隙,以便于消除抖动。这是因为当动作起点候选区域与动作终点候选区域之间不存在间隙时,针对出现在动作起点候选区域与动作终点候选区域的交界处或附近的特征点的检测输出不稳定(即,即使多次检测同一图像的特征点,各次检测输出都可能存在偏差),另外当帧率较大时,手部在动作起点候选区域与动作终点候选区域的交界处或附近稍有停顿或移动缓慢都会产生很多图像帧,这可能会被检测为手部反复穿越交界而被识别成多个挥动动作,从而导致识别不准确甚至方法失效。
图6示例性地描绘了图像帧的图像区域、动作起点候选区域以及动作终点候选区域。如图6所示,动作起点候选区域可以包括以图像帧的图像中心pc为圆心并具有第一半径r1的第一圆之内的区域(被图示为点状阴影区域),而动作终点候选区域可以包括以图像帧的图像中心pc为圆心并具有第二半径r2的第二圆之外的区域(被图示为白色区域),其中第二半径r2大于第一半径r1。在一些示例中,第一半径r1和第二半径r2中的每一者可以基于图像帧的像素行数和像素列数二者中的最小值以及相应的比例系数确定。示例性的,可以有第一半径第二半径/>其中,wmin为图像帧的像素行数和像素列数二者中的最小值,λ1为用于动作起点候选区域的比例系数,以及λ2为用于动作终点候选区域的比例系数。例如,假设图像帧的图像尺寸为196×256(像素),则wmin为196(像素)。λ1、λ2为小于1的正数,且λ1<λ2。示例性的,可以进一步为λ2设置上限以防止第二圆之外的区域过小导致难以获取终点,也可以进一步为λ1设置下限以防止第一圆之内的区域过小导致难以获取起点。例如,可以有0.1<λ1<λ2<0.8。进一步地,可以为λ2与λ1之差(对应于动作起点候选区域与动作终点候选区域之间的间隙的大小)设置下限以便于有效地消除抖动,例如可以使得λ2与λ1之差不小于0.05、或者不小于0.1、或者不小于0.2、或者不小于0.3等等。还可以为λ2与λ1之差设置上限以防止第一圆之内的区域和第二圆之外的区域过小,例如可以使得λ2与λ1之差不大于0.7、或者不大于0.6、或者不大于0.5、不大于0.4等等。可以根据实际测试标定出λ1、λ2的具体取值。示例性的,可以有λ1=0.3,λ2=0.5。可以理解的是,虽然图6将动作起点候选区域与动作终点候选区域描绘为圆形,但这仅仅是示例性的而非限制性的,例如动作起点候选区域与动作终点候选区域还可以具有椭圆形、多边形(多边形的边数例如可以取决于定义的挥动方向的数量)等其它合适形状。在一些情况下,圆形的动作起点/终点候选区域可以是有利的,其能够平等地检测各个方向上的挥动动作,而不会使得某个或某些方向上的挥动动作的触发灵敏度不同于其它方向上的挥动动作的触发灵敏度。
图6还示例性地描绘了进行挥动动作的手部的特征点挥动轨迹。可以理解,特征点p1至p8并非均来自同一图像帧,而是来自相应的连续八个图像帧,只是为了便于说明而将其图示在同一图像区域上。此外,图6除了示出图像坐标系xoy之外,还建立了以图像帧的图像中心pc为原点O、以水平向右为X轴正方向、以竖直向上为Y轴正方向的挥动坐标系,以便于后续挥动方向判断。图6所示的挥动坐标系XOY可以很好地对应成像视野的对称性。可以理解,这不是限制性的也并非必须的,可以仍然在图像坐标系xoy中进行处理,也可以根据实际需要建立其它的挥动坐标系XOY。
在图6的示例中,特征点p8会被确定为挥动动作的终点,而最接近图像中心pc的特征点p5会被确定为挥动动作的起点,稍后会结合图10详细描述此过程。在一些情况下,识别到挥动动作就足够了,例如无论是怎样的挥动动作都可以被分配到同一操作。在另一些情况下,可以对不同的挥动动作分配不同的操作,以便于实现更多可能控制。例如,可以允许不同挥动方向的挥动动作引起不同的操作。在一些实施例中,方法100还可以包括确定从挥动动作的起点到终点的向量的角度,并基于该角度确定挥动动作的挥动方向。示例性的,图像帧的图像区域可以被划分为具有不同角度范围以对应不同挥动方向的多个挥动区域,由此可以基于该角度所落入的角度范围确定挥动动作的挥动区域,进而确定挥动动作的挥动方向。
例如,图7描绘了图像帧的图像区域被划分成向上挥动区域、向右挥动区域、向下挥动区域和向左挥动区域。如图7所示,向上挥动区域包括从挥动坐标系XOY的第一象限的二分线到挥动坐标系XOY的第二象限的二分线的区域,向左挥动区域包括从挥动坐标系XOY的第二象限的二分线到挥动坐标系XOY的第三象限的二分线的区域,向下挥动区域包括从挥动坐标系XOY的第三象限的二分线到挥动坐标系XOY的第四象限的二分线的区域,以及向右挥动区域包括从挥动坐标系XOY的第四象限的二分线到挥动坐标系XOY的第一象限的二分线的区域。可以根据实际需要将图像区域划分成更多或更少方向的挥动区域。还应理解的是,虽然图7将每个挥动区域描绘为具有相同大小的角度范围,但这仅仅是示例性的而非限制性的。可以根据实际需要来为每个挥动区域设置相应大小的角度范围。例如,某些需要严格控制其触发操作的挥动动作的挥动区域可以具有较小的角度范围,以防止误触发,而某些需要触发灵敏的挥动动作的挥动区域可以具有较大的角度范围。另外,也可以根据用户习惯来相应设置。
当将图7所示的挥动区域应用于图6时,可以得到图8。如图8所示,可以确定从挥动动作的起点p5到终点p8的挥动向量Vse的挥动角度α,该挥动角度α为挥动向量Vse与X轴正方向的夹角。当挥动角度α落入哪个挥动区域的角度范围时,就认为挥动动作的挥动方向朝哪个方向。
图9示出了根据本公开的一些实施例的识别挥动动作的方法400的流程图。如图9所示,方法400包括通过步骤S402至S410逐帧处理视频。视频例如是来自智能眼镜等涉及基于机器视觉的手势交互的设备的摄像头。
在步骤S402,响应于在当前图像帧中检测到手部、检测到手势关键点、并且基于检测到的手势关键点确定检测到的手部表现为挥动手势,将当前图像帧所包含的手部的特征点存储到栈。特征点选自当前图像帧的检测到的手势关键点,例如特征点可以被选择为最接近手部中心的手势关键点。该栈用于存储特征点,例如还可以一起存储其余手势特征点。在一些实施例中,方法400还可以包括响应于以下中的至少一者而清空栈:在当前图像帧中未检测到手部;或者在当前图像帧中未检测到手势关键点;或者基于在当前图像帧中检测到的手势关键点确定在当前图像帧中检测到的手部不表现为挥动手势。
在步骤S404,响应于确定栈中的当前图像帧所包含的手部的特征点落入动作终点候选区域,将当前图像帧所包含的手部的特征点确定为挥动动作的终点。在一些实施例中,方法400还可以包括响应于确定栈中的当前图像帧所包含的手部的特征点未落入动作终点候选区域,确定当前图像帧所包含的手部的特征点不是挥动动作的终点。
在步骤S406,响应于确定栈中的早于当前图像帧所包含的手部的特征点进入栈的另一特征点落入动作起点候选区域,将该另一特征点确定为挥动动作的起点。在一些实施例中,方法400还可以包括响应于确定栈中的早于当前图像帧所包含的手部的特征点进入栈的每个特征点均未落入动作起点候选区域,清空栈。
在步骤S408,响应于确定挥动动作的起点和终点,识别挥动动作的挥动方向。
在步骤S410,响应于完成对挥动动作的识别,清空栈。
图10示出了根据本公开的非限制性示例的挥动动作识别过程500的流程图。如图10所示,首先将栈s初始化为空(S502),然后(例如,经由智能眼镜的摄像头)获取当前图像帧(S504)。判断在当前图像帧中是否检测到手部(S506)。若在当前图像帧中未检测到手部(S506“否”)则清空栈s(S516)。若在当前图像帧中检测到手部(S506“是”)则判断在当前图像帧中是否检测到手势关键点(S508)。若在当前图像帧中未检测到手势关键点(S508“否”)则清空栈s(S516)。若在当前图像帧中检测到手势关键点(S508“是”)则判断在当前图像帧中检测到的手部是否表现为挥动手势(S510)。若在当前图像帧中检测到的手部不表现为挥动手势(S510“否”)则清空栈s(S516)。若在当前图像帧中检测到的手部表现为挥动手势(S510“是”)则判断栈s中元素个数是否大于阈值(S512)。若栈s中元素个数不大于阈值(S512“否”)则将当前图像帧所包含的手部的特征点加入栈s顶部(S514)。若栈s中元素个数大于阈值(S512“是”),则去除栈s底部元素(S518)然后将当前图像帧所包含的手部的特征点加入栈s顶部(S514)。
之所以限制栈s中元素个数主要是为了防止内存溢出。在实际实施中,例如智能眼镜的摄像头的帧率是30帧每秒,挥动动作的最长时间限制可以被设置为2秒,从而栈s中元素个数的阈值为60(帧率与最长时间限制的乘积)。超过2秒的过慢挥动动作可以被认为是非正常挥动动作或无效输入。在一些情况下帧率是动态变化的,因此可以通过设置挥动动作的最长时间限制来设置阈值,这可以有利于避免帧率过高时栈s存储特征点不全导致无法触发。
计算图像中心pc(S520)。例如,图像中心pc在图像坐标系xoy中的横坐标为图像帧的像素行数的一半,纵坐标为图像帧的像素列数的一半。计算第一圆半径r1(S522)。可以以图像中心pc为圆心、r1为半径作第一圆,从而确定动作起点候选区域。计算第二圆半径r2(S524)。可以以图像中心pc为圆心、r2为半径作第二圆,从而确定动作终点候选区域。例如,wmin为图像帧的像素行数和像素列数二者中的最小值。可以理解,S520至S524并不一定要在图示位置执行,相反,S520至S522可以在步骤S528前的任何合适位置执行,S524可以在步骤S532前的任何合适位置执行,并且S520至S524并不一定要按图示顺序执行,相反,S520至S524可以按照任何合适顺序执行,也可以至少部分地并行执行。另外,在一些情况下,S520至S524也可以预先执行,而无需在过程500中执行。
接下来,获取栈s顶部的特征点(S526)。栈s顶部的特征点即为在S514加入栈s顶部的当前图像帧所包含的手部的特征点。判断栈s顶部的特征点是否在第二圆外(S528)。例如,特征点到图像中心pc的距离大于r2时特征点在第二圆外,反之则不在。当若栈s顶部的特征点不在第二圆外(S528“否”)则判断是否存在下一图像帧(S536),并在存在下一图像帧的情况下(S536“是”)返回S504获取该下一图像帧作为当前图像帧以重复前述过程,而在不存在下一图像帧的情况下(S536“否”)结束过程500。若栈s顶部的特征点在第二圆外(S528“是”)则将栈s顶部的特征点作为挥动动作的终点pe(S530),然后判断栈s中有无在第一圆内的特征点(S532)。例如,特征点到图像中心pc的距离小于r1时特征点在第一圆内,反之则不在。可以理解,此时在栈s中但不在栈s顶部的特征点都是早于当前图像帧所包含的手部的特征点进入栈s的来自早于当前图像帧的图像帧的特征点。S532可以从顶向底回溯寻找挥动动作的起点ps。若栈s中没有在第一圆内的特征点(S532“否”),则清空栈s(S534)然后前进到S536。栈s中没有任何候选起点意味着栈s目前存储的特征点并不对应某挥动动作的挥动轨迹,因此可以清空栈s以备检测未来挥动动作。这有利于保证栈s中要么没有终点,要么只有一个“正确的”(具有与其匹配的起点的)终点,而不会存在一些“错误的”(没有与其匹配的起点的)终点,从而有效防止误触发。
若栈s中有在第一圆内的特征点(S532“是”),则将栈s中在第一圆内离图像中心pc最近的特征点作为挥动动作的起点ps(S538)。在确定了挥动动作的终点pe和挥动动作的起点ps后,获取从ps到pe的向量Vse(S540),并计算向量Vse与挥动坐标系X轴正方向的夹角α(S542)。例如,夹角α可被计算为xe、xs分别为终点pe、起点ps的横坐标,ye、ys分别为终点pe、起点ps的纵坐标。根据挥动区域分割线和α确定挥动方向(S544)。例如,如图7所示,挥动区域分割线将图像区域划分成向上挥动区域/>向左挥动区域向下挥动区域/>向右挥动区域/>可以基于α所在的角度范围确定挥动方向。由此,获取挥动动作的识别结果(S546)。挥动动作的识别结果例如可以包括是否识别到挥动动作以及在识别到挥动动作的情况下包括挥动动作的挥动方向。
响应于完成对挥动动作的识别,清空栈s(S534)然后前进到S536。这可以有利于当手部在朝某个方向挥动时避免同方向上的多次误触发,还可以有利于保证栈s中不会有多个终点和多个起点,避免终点和起点的错误匹配所导致的错误触发。
若用图10所示的过程来处理图8所示的挥动轨迹,则处理过程如下。栈s初始化为空,其能存储的元素个数最多60。第1图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第1图像帧的特征点p1被加入栈s顶部。特征点p1在第二圆外从而会被认为挥动动作的终点pe,但是栈s中除了特征点p1不存在任何其它特征点,因而栈s中没有在第一圆内的特征点。由此,清空栈s,然后继续处理第2图像帧。第2图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第2图像帧的特征点p2被加入栈s顶部。特征点p2不在第二圆外,于是继续处理第3图像帧。第3图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第3图像帧的特征点p3被加入栈s顶部。特征点p3不在第二圆外,于是继续处理第4图像帧。第4图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第4图像帧的特征点p4被加入栈s顶部。特征点p4不在第二圆外,于是继续处理第5图像帧。第5图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第5图像帧的特征点p5被加入栈s顶部。特征点p5不在第二圆外,于是继续处理第6图像帧。第6图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第6图像帧的特征点p6被加入栈s顶部。特征点p6不在第二圆外,于是继续处理第7图像帧。第7图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第7图像帧的特征点p7被加入栈s顶部。特征点p7不在第二圆外,于是继续处理第8图像帧。第8图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第8图像帧的特征点p8被加入栈s顶部。特征点p8在第二圆外从而会被认为是挥动动作的终点pe。接下来,回溯找到特征点p7,特征点p7不在第一圆内从而不会被认为是挥动动作的起点。接下来,继续回溯找到特征点p6、p5、p4、p3并依次判断出它们均在第一圆内,直至回溯至特征点p2发现特征点p2不在第一圆内,此时可停止回溯。然后从特征点p6、p5、p4、p3中找到离图像中心pc最近的特征点p5作为挥动动作的起点ps。由于先找到了特征点p8作为挥动动作的终点pe又找到了特征点p5作为挥动动作的起点ps,因此识别到挥动动作,此时可清空栈s。基于特征点p5到特征点p8的挥动向量的角度可以确定此挥动动作向右。可以看到,由于挥动动作的起点和终点只和相应的候选区域有关,因此不会将从特征点p3到特征点p8的挥动轨迹识别为多个向右挥动动作。另外,由于清空了栈s,因此即使下一图像帧包含挥动手势(因而其特征点被加入栈s顶部)且其特征点仍在第二圆外从而被认为是挥动动作的终点,但由于此时栈s中不能回溯到任何起点,因此不会再次被识别为同方向上的另一挥动动作。
另外,假设用户在挥动到特征点p8后将手部复归到特征点p7进而复归到特征点p6。可以看到,在首次挥动到特征点p8并完成对挥动动作的识别后,栈s已被清空。此时用户将手部复归到特征点p7,从而第9图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第9图像帧的特征点p7被加入栈s顶部。特征点p7不在第二圆外,于是继续处理第10图像帧,此时用户继续将手部复归到特征点p6。第10图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第10图像帧的特征点p6被加入栈s顶部。特征点p6不在第二圆外,于是继续处理第11图像帧。可以看到,复归并不会引起反方向的误识别。
进一步地,假设用户在复归到特征点p6后又将手部挥动到特征点p7进而挥动到特征点p8。在第11图像帧时用户将手部挥动从特征点p6挥动到特征点p7。第11图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第11图像帧的特征点p7被加入栈s顶部。特征点p7不在第二圆外,于是继续处理第12图像帧,此时用户继续将手部挥动到特征点p8。第12图像帧中检测到手部、检测到手势关键点并且检测到的手部表现为挥动手势,因此第12图像帧的特征点p8被加入栈s顶部。特征点p8在第二圆外从而会被认为是挥动动作的终点pe。此时,栈s从顶到底依次包括(p8,p7,p6,p7)。接下来,回溯找到特征点p7,特征点p7不在第一圆内从而不会被认为是挥动动作的起点。接下来,继续回溯找到特征点p6并判断出它在第一圆内,直至回溯至底部的特征点p7发现特征点p7不在第一圆内,此时可停止回溯。然后将特征点p6作为挥动动作的起点ps。由于先找到了特征点p8作为挥动动作的终点pe又找到了特征点p6作为挥动动作的起点ps,因此识别到挥动动作。基于特征点p6到特征点p8的挥动向量的角度可以确定此挥动动作向右。可以看到,复归后再次往原方向挥动仍会正确识别到挥动动作。
因此,即使用户在某个方向上连续来回挥动手部时,用户也可以自由挥动手部(画圈式移动或直线式往复移动均可),而不会因手部复归导致反方向误触发。用户的挥动动作也不会过多受到时间限制,只要在最长时间限制内即可。
本公开在另一方面还提供了一种电子设备。参考图11,其示出了根据本公开的一些实施例的电子设备600的示意性框图。如图11所示,电子设备600包括(一个或多个)处理器602以及存储计算机可执行指令的存储器604,所述计算机可执行指令在被所述(一个或多个)处理器602执行时使得所述(一个或多个)处理器602执行根据本公开的前述任一实施例所述的方法。(一个或多个)处理器602例如可以是电子设备600的中央处理单元(CPU)。(一个或多个)处理器602可以是任何类型的通用处理器,或者可以是专门设计用于识别挥动动作的处理器,诸如专用集成电路(“ASIC”)。存储器604可以包括可由(一个或多个)处理器602访问的各种计算机可读介质。在各种实施例中,本文描述的存储器604可以包括易失性和非易失性介质、可移除和不可移除介质。例如,存储器604可以包括以下的任何组合:随机存取存储器(“RAM”)、动态RAM(“DRAM”)、静态RAM(“SRAM”)、只读存储器(“ROM”)、闪存、高速缓冲存储器和/或任何其它类型的非瞬态计算机可读介质。存储器604可以存储在被处理器602执行时使得处理器602执行根据本公开的前述任一实施例所述的方法的指令。在一些实施例中,电子设备600可以被实现为智能眼镜、智能座舱、智能手机、智能相机、计算机等。
本公开还提供了一种其上存储有计算机可执行指令的非瞬态存储介质,计算机可执行指令在被计算机执行时使得计算机执行根据本公开的前述任一实施例所述的方法。本公开还提供了一种计算机程序产品,该计算机程序产品可以包括指令,当指令被处理器执行时,可以实现根据本公开的前述任一实施例所述的方法。指令可以是将由一个或多个处理器直接地执行的任何指令集,诸如机器代码,或者间接地执行的任何指令集,诸如脚本。指令可以存储为目标代码格式以便由一个或多个处理器直接处理,或者存储为任何其他计算机语言,包括按需解释或提前编译的独立源代码模块的脚本或集合。
图12示出了可以在其上实现本公开的实施例的计算机系统700的示意性框图。计算机系统700包括总线702或用于传送信息的其它通信机构,以及与总线702耦合的用于处理信息的处理装置704。计算机系统700还包括与总线702耦合的用于存储要由处理装置704执行的指令的存储器706,存储器706可以是随机存取存储器(RAM)或其它动态存储设备。存储器706还可以被用于在要由处理装置704执行的指令的执行期间存储临时变量或其它中间信息。计算机系统700还包括耦合到总线702的用于为处理装置704存储静态信息和指令的只读存储器(ROM)708或其它静态存储设备。诸如磁盘或光盘之类的存储装置710被提供并且被耦合到总线702以用于存储信息和指令。计算机系统700可以经由总线702耦合到用于向用户提供输出的输出设备712,例如但不限于显示器(诸如阴极射线管(CRT)或液晶显示器(LCD))、扬声器等。诸如键盘、鼠标、麦克风、摄像头等之类的输入设备714被耦合到总线702,以用于将信息和命令选择传送给处理装置704。计算机系统700可以执行本公开的实施例。与本公开的某些实现方式一致,由计算机系统700响应于处理装置704执行存储器706中所包含的一个或多个指令的一个或多个序列来提供结果。可以将这种指令从诸如存储装置710之类的另一计算机可读介质读取到存储器706中。存储器706中所包含的指令序列的执行使处理装置704执行本文描述的方法。可替代地,可以使用硬连线电路系统取代软件指令或者结合软件指令来实现本教导。因此,本公开的实现方式不限于硬件电路系统与软件的任何特定组合。在各种实施例中,计算机系统700可以经由网络接口716跨网络连接到如计算机系统700一样的一个或多个其它计算机系统,以形成联网系统。该网络可以包括专用网络或诸如互联网之类的公共网络。在联网系统中,一个或多个计算机系统可以存储数据并且将数据供应给其它计算机系统。如本文使用的术语“计算机可读介质”是指参与向处理装置704提供指令以供执行的任何介质。这种介质可以采用许多形式,包括但不限于非易失性介质、易失性介质和传输介质。非易失性介质包括例如诸如存储装置710之类的光盘或磁盘。易失性介质包括诸如存储器706之类的动态存储器。传输介质包括同轴电缆、铜线和光纤,包括包含总线702的布线。常见形式的计算机可读介质或计算机程序产品包括例如软盘、柔性盘、硬盘、磁带、或任何其它磁性介质、CD-ROM、数字视频盘(DVD)、蓝光盘、任何其它光学介质、拇指驱动器、存储器卡、RAM、PROM和EPROM、快速EPROM、任何其它存储器芯片或盒、或计算机可以从中读取的任何其它有形介质。在将一个或多个指令的一个或多个序列携带到处理装置704以供执行时可以涉及各种形式的计算机可读介质。例如,指令最初可以被携带在远程计算机的磁盘上。远程计算机可以将指令加载到其动态存储器中并且使用调制解调器通过电话线发送指令。计算机系统700本地的调制解调器可以在电话线上接收数据,并且使用红外发射器将数据转换成红外信号。耦合到总线702的红外检测器可以接收在红外信号中携带的数据,并且将数据置于总线702上。总线702将数据携带到存储器706,处理装置704从存储器706中检索指令并执行指令。可选地,由存储器706接收到的指令可以在由处理装置704执行之前或之后被存储在存储装置710上。
上述对本公开的一个或多个示例性实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
上述实施例阐明的系统、装置、模块或单元,具体可由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为服务器系统。当然,本公开不排除随着未来计算机技术的发展,实现上述实施例功能的计算机例如可为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、游戏控制台、平板计算机、可穿戴设备或其任何组合。
术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。例如若使用到“第一”、“第二”等词语用来表示名称,而并不表示任何特定的顺序。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本公开的一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本公开是参照根据本公开实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图的一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图的一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图的一个流程或多个流程和/或方框图的一个方框或多个方框中指定的功能的步骤。
本领域技术人员应明白,本公开的一个或多个实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本公开的一个或多个实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本公开的一个或多个实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本公开的一个或多个实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本公开的各个实施例之间相同或相似的部分可互相参见,每个实施例重点说明的都是与其它实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本公开的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”、“示例性的”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本公开的至少一个实施例或示例中。在本公开中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本公开中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。另外,当在本公开中使用时,词语“此处”、“以上”、“以下”、“下文”、“上文”和类似含义的词语应当指代本公开的整体而不是本公开的任何特定部分。此外,除非另有明确说明或者在所使用的上下文中以其它方式理解,否则本文使用的条件语言,例如“可以”、“可能”、“例如”、“诸如”等等通常旨在表达某些实施例包括,而其它实施例不包括某些特征、元素和/或状态。因此,这种条件语言通常不旨在暗示一个或多个实施例以任何方式需要特征、元素和/或状态,或者是否包括这些特征、元素和/或状态或者在任何特定实施例中执行这些特征、元素和/或状态。
以上所述仅为本公开的一个或多个实施例的实施例而已,并不用于限制本公开的一个或多个实施例。对于本领域技术人员来说,本公开的一个或多个实施例可以有各种更改和变化。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在权利要求范围之内。

Claims (21)

1.一种识别挥动动作的方法,包括:
获取包含挥动手势的图像帧;
响应于确定第一图像帧所包含的手部的特征点落入动作终点候选区域,将所述第一图像帧所包含的手部的特征点确定为挥动动作的终点;
响应于确定早于所述第一图像帧的第二图像帧所包含的手部的特征点落入动作起点候选区域,将所述第二图像帧所包含的手部的特征点确定为挥动动作的起点;以及
响应于确定挥动动作的起点和终点,识别到挥动动作。
2.根据权利要求1所述的方法,其中,动作起点候选区域比动作终点候选区域更接近图像帧的图像中心,并且在动作起点候选区域与动作终点候选区域之间存在间隙;
可选地,动作起点候选区域包括以图像帧的图像中心为圆心并具有第一半径的第一圆之内的区域,动作终点候选区域包括以图像帧的图像中心为圆心并具有第二半径的第二圆之外的区域,所述第二半径大于所述第一半径;
可选地,第一半径和第二半径中的每一者基于图像帧的像素行数和像素列数二者中的最小值以及相应的比例系数确定。
3.根据权利要求1所述的方法,其中,响应于确定早于所述第一图像帧的多个第二图像帧所包含的手部的特征点落入动作起点候选区域,将所述多个第二图像帧所包含的手部的特征点中离图像帧的图像中心最近的一者确定为挥动动作的起点。
4.根据权利要求1至3中任一项所述的方法,还包括:
确定从挥动动作的起点到终点的向量的角度,并基于所述角度确定挥动动作的挥动方向;
可选地,图像帧的图像区域被划分为具有不同角度范围以对应不同挥动方向的多个挥动区域,其中,基于所述角度所落入的角度范围确定挥动动作的挥动区域,进而确定挥动动作的挥动方向。
5.根据权利要求1所述的方法,其中,获取包含挥动手势的图像帧包括:
响应于在当前图像帧中检测到手部、检测到手势关键点、并且基于检测到的手势关键点确定检测到的手部表现为挥动手势,将当前图像帧添加到图像帧序列,所述图像帧序列用于收集包含挥动手势的图像帧,
其中,所述第一图像帧和所述第二图像帧包括在所述图像帧序列中。
6.根据权利要求1所述的方法,还包括响应于以下中的至少一者,清空图像帧序列,所述图像帧序列用于收集包含挥动手势的图像帧:
在当前图像帧中未检测到手部;或者
在当前图像帧中未检测到手势关键点;或者
基于在当前图像帧中检测到的手势关键点确定在当前图像帧中检测到的手部不表现为挥动手势。
7.根据权利要求5所述的方法,其中,在将当前图像帧添加到所述图像帧序列之后,所述方法还包括:
响应于确定当前图像帧所包含的手部的特征点落入动作终点候选区域,将当前图像帧所包含的手部的特征点确定为挥动动作的终点。
8.根据权利要求7所述的方法,还包括:
响应于确定所述图像帧序列中的早于当前图像帧的每个图像帧所包含的手部的特征点均未落入动作起点候选区域,清空所述图像帧序列。
9.根据权利要求7所述的方法,还包括:
响应于确定所述图像帧序列中的早于当前图像帧的另一图像帧所包含的手部的特征点落入动作起点候选区域,将所述另一图像帧所包含的手部的特征点确定为挥动动作的起点。
10.根据权利要求5至9中任一项所述的方法,还包括:
响应于完成对挥动动作的识别,清空所述图像帧序列。
11.根据权利要求1所述的方法,其中,获取包含挥动手势的图像帧包括:
响应于在当前图像帧中检测到手部、检测到手势关键点、并且基于检测到的手势关键点确定检测到的手部表现为挥动手势,确定当前图像帧是包含挥动手势的图像帧,并将当前图像帧所包含的手部的特征点存储到存储区域,所述特征点选自当前图像帧的检测到的手势关键点,所述存储区域用于存储所述特征点;
可选地,特征点被选择为最接近手部中心的手势关键点。
12.根据权利要求1所述的方法,还包括响应于以下中的至少一者,清空存储区域,所述存储区域用于存储所述特征点:
在当前图像帧中未检测到手部;或者
在当前图像帧中未检测到手势关键点;或者
基于在当前图像帧中检测到的手势关键点确定在当前图像帧中检测到的手部不表现为挥动手势。
13.根据权利要求11所述的方法,其中,在将当前图像帧所包含的手部的特征点存储到所述存储区域后,所述方法还包括:
响应于确定当前图像帧所包含的手部的特征点落入动作终点候选区域,将当前图像帧所包含的手部的特征点确定为挥动动作的终点。
14.根据权利要求13所述的方法,还包括:
响应于确定所述存储区域中的早于当前图像帧所包含的手部的特征点进入所述存储区域的每个特征点均未落入动作起点候选区域,清空所述存储区域。
15.根据权利要求13所述的方法,还包括:
响应于确定所述存储区域中的早于当前图像帧所包含的手部的特征点进入所述存储区域的另一特征点落入动作起点候选区域,将所述另一特征点确定为挥动动作的起点。
16.根据权利要求11至15中任一项所述的方法,还包括:
响应于完成对挥动动作的识别,清空所述存储区域。
17.根据权利要求5或11所述的方法,其中,基于检测到的手势关键点确定检测到的手部表现为挥动手势包括:
响应于确定手部的第一手指和非手指部分的多个关键点的横坐标满足基于所述手部的左右手属性和/或手掌手背属性确定的第一相对位置关系、以及所述第一手指的第一关键点与所述非手指部分的第二关键点之间的第一向量满足基于所述手部的左右手属性和/或手掌手背属性确定的角度关系,确定所述手部表现为挥动手势;
可选地,基于检测到的手势关键点确定检测到的手部表现为挥动手势还包括:响应于进一步确定手部的所述第一手指、第二手指和所述非手指部分的多个关键点的纵坐标满足第二相对位置关系、以及所述第二手指的第三关键点与所述非手指部分的第四关键点之间的第二向量满足所述角度关系,确定所述手部表现为挥动手势;
可选地,所述第一手指为食指,并且所述第二手指为拇指;
可选地,所述角度关系进一步基于要用挥动动作控制的对象确定。
18.一种识别挥动动作的方法,包括通过以下操作逐帧处理视频:
响应于在当前图像帧中检测到手部、检测到手势关键点、并且基于检测到的手势关键点确定检测到的手部表现为挥动手势,将当前图像帧所包含的手部的特征点存储到栈,所述特征点选自当前图像帧的检测到的手势关键点,所述栈用于存储所述特征点;
响应于确定所述栈中的当前图像帧所包含的手部的特征点落入动作终点候选区域,将当前图像帧所包含的手部的特征点确定为挥动动作的终点;
响应于确定所述栈中的早于当前图像帧所包含的手部的特征点进入所述栈的另一特征点落入动作起点候选区域,将所述另一特征点确定为挥动动作的起点;
响应于确定挥动动作的起点和终点,识别挥动动作的挥动方向;以及
响应于完成对挥动动作的识别,清空所述栈,
可选地,特征点被选择为最接近手部中心的手势关键点;
可选地,所述方法还包括以下至少之一:
响应于在当前图像帧中未检测到手部、未检测到手势关键点、以及基于检测到的手势关键点确定检测到的手部不表现为挥动手势中的至少一者,清空所述栈;或者
响应于确定所述栈中的当前图像帧所包含的手部的特征点未落入动作终点候选区域,确定当前图像帧所包含的手部的特征点不是挥动动作的终点;或者
响应于确定所述栈中的早于当前图像帧所包含的手部的特征点进入所述栈的每个特征点均未落入动作起点候选区域,清空所述栈。
19.一种电子设备,包括:
一个或多个处理器;以及
存储计算机可执行指令的存储器,所述计算机可执行指令在被所述一个或多个处理器执行时使得所述一个或多个处理器执行根据权利要求1至18中任一项所述的方法。
20.一种其上存储有计算机可执行指令的非瞬态存储介质,所述计算机可执行指令在被计算机执行时使得计算机执行根据权利要求1至18中任一项所述的方法。
21.一种计算机程序产品,所述计算机程序产品包括指令,所述指令在被处理器执行时实现根据权利要求1至18中任一项所述的方法。
CN202410268661.6A 2024-03-07 2024-03-07 识别挥动动作的方法及相关装置 Pending CN118116078A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410268661.6A CN118116078A (zh) 2024-03-07 2024-03-07 识别挥动动作的方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410268661.6A CN118116078A (zh) 2024-03-07 2024-03-07 识别挥动动作的方法及相关装置

Publications (1)

Publication Number Publication Date
CN118116078A true CN118116078A (zh) 2024-05-31

Family

ID=91221023

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410268661.6A Pending CN118116078A (zh) 2024-03-07 2024-03-07 识别挥动动作的方法及相关装置

Country Status (1)

Country Link
CN (1) CN118116078A (zh)

Similar Documents

Publication Publication Date Title
JP7073522B2 (ja) 空中手書きを識別するための方法、装置、デバイス及びコンピュータ読み取り可能な記憶媒体
CN108960163B (zh) 手势识别方法、装置、设备和存储介质
US8897490B2 (en) Vision-based user interface and related method
US20130069867A1 (en) Information processing apparatus and method and program
US9235278B1 (en) Machine-learning based tap detection
CN106934333B (zh) 一种手势识别方法及系统
JP5665140B2 (ja) 入力装置、入力方法、及びプログラム
EP3514724B1 (en) Depth map-based heuristic finger detection method
US10108270B2 (en) Real-time 3D gesture recognition and tracking system for mobile devices
KR101631011B1 (ko) 제스처 인식 장치 및 제스처 인식 장치의 제어 방법
KR20150067680A (ko) 차량용 제스처 인식 시스템 및 그 방법
US20160140762A1 (en) Image processing device and image processing method
Sulyman et al. REAL-TIME NUMERICAL 0-5 COUNTING BASED ON HAND-FINGER GESTURES RECOGNITION.
CN114937285A (zh) 动态手势识别方法、装置、设备及存储介质
CN114360047A (zh) 举手手势识别方法、装置、电子设备及存储介质
WO2021238866A1 (zh) 一种应用程序的显示方法、终端和计算机可读存储介质
CN111986229A (zh) 视频目标检测方法、装置及计算机系统
CN104714736A (zh) 一种退出全屏锁定状态的控制方法及终端
CN106547339B (zh) 计算机设备的控制方法和装置
US20170085784A1 (en) Method for image capturing and an electronic device using the method
US10082936B1 (en) Handedness determinations for electronic devices
CN118116078A (zh) 识别挥动动作的方法及相关装置
US20220050528A1 (en) Electronic device for simulating a mouse
CN112541418B (zh) 用于图像处理的方法、装置、设备、介质和程序产品
CN114510142B (zh) 基于二维图像的手势识别方法及其系统和电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination