基于手部关键点检测的显控软件非接触式人机交互方法
文献发布时间:2024-04-18 19:58:26
技术领域
本发明属于显控软件的人机交互技术领域,涉及一种显控软件非接触式人机交互方法,尤其是一种基于手部关键点检测的显控软件非接触式人机交互方法。
背景技术
目前,显控软件的人机交互方法多为键鼠和触摸屏操作方式,非接触式交互方法多为原理验证形式,显控类工程软件中实际应用较少。
现有非接触式人机交互技术通常采取基于机器学习算法实现,即首先通过相机采集人体手部动作图片,然后通过神经网络、支持向量机等智能算法实现图像分类识别,继而将分类识别结果作为控制指令输入达到非接触式交互的目的。上述方法中,图像分类识别模块采用的神经网络等机器学习算法严重依赖训练样本的质量,在实时视频等动态场景中识别准确率一般不超过90%,且图像识别匹配时间过长,因而实用性较差。
经检索,未发现与本发明相同或相似的现有技术中的专利文献。
发明内容
本发明的目的在于克服现有技术的不足,提出一种基于手部关键点检测的显控软件非接触式人机交互方法,能够解决动态场景中识别准确率低且图像识别匹配时间过长的技术问题。
本发明解决其现实问题是采取以下技术方案实现的:
一种基于手部关键点检测的显控软件非接触式人机交互方法,包括以下步骤:
步骤1、根据手部关键点,建立手势信息模板库;
步骤2、根据步骤1建立手势信息模板库,进行手势识别分类,建立手势识别分类模块;
步骤3、基于步骤2建立手势识别分类模块,设置显控软件非接触式交互逻辑;
步骤4、基于步骤3设置的显控软件非接触式交互逻辑,实现显控软件非接触式交互。
而且,所述步骤1的具体方法为:
步骤1.1:建立手指关节弯曲伸直状态信息
步骤1.2:建立手指关节角度信息;
步骤1.3:设置阈值,建立手指状态定量信息;
步骤1.4:量化各类手势,建立手势信息模板库;
而且,所述步骤1.2的具体方法为:
①定义手部21个关节点即手部关键点的位置信息,包括横纵坐标x,y,其中x,y是归一化后的坐标;
②定义向量a,向量终点为关键点0,向量起点为关键点2;
③定义向量b,向量终点为关键点3,向量起点为关键点4;
向量a与b之间的角度即定义为大拇指的角度;
④定义向量c,向量终点为关键点0,向量起点为关键点6;
⑤定义向量d,向量终点为关键点7,向量起点为关键点8;
向量c与d之间的角度即定义为食指的角度;
⑥定义向量e,向量终点为关键点0,向量起点为关键点10;
⑦定义向量f,向量终点为关键点11,向量起点为关键点12;
向量e与f之间的角度即定义为中指的角度;
⑧定义向量m,向量终点为关键点0,向量起点为关键点14;
⑨定义向量n,向量终点为关键点15,向量起点为关键点16;
向量m与n之间的角度即定义为无名指的角度;
⑩定义向量p,向量终点为关键点0,向量起点为关键点18;
定义向量q,向量终点为关键点19,向量起点为关键点20;
向量p与q之间的角度即定义为小指的角度。
而且,所述步骤1.3的具体方法为:
定义A为四指闭合阈值,除大拇指外的四指角度大于A则认定为闭合;
定义B为大拇指闭合阈值,若大拇指角度大于B则认定为闭合;
定义C为手指张开阈值,若五指角度小于C则认定为伸直;
在本实施例中,经过实测,最佳阈值为:A=65,B=53,C=49。
而且,所述步骤1.4的具体方法为:
根据所述步骤1.3五指角度定义,将手指状态集映射为一组预定义的手势,建立手势信息模板库:
1)手势1,若大拇指角度小于C,且其余四指角度大于A,且关键点4的纵坐标大于关键点0的纵坐标,则该手势为手势1;
2)手势2,若大拇指角度小于C,且其余四指角度大于A,且关键点4的纵坐标小于关键点0的纵坐标,则该手势为手势2;
3)手势3,若食指角度小于C,大拇指角度大于B,且其余三指手势大于A,则该手势为手势3;
4)手势4,若五指角度均小于C,则该手势为手势4;
5)手势5,若大拇指角度大于B,食指角度大于A,且其余三只角度小于C,则该手势为手势5。
而且,所述步骤2的具体步骤包括:
步骤2.1:根据步骤1建立手势信息模板库,判断实时视频中手部关键点位置信息;
步骤2.2:根据步骤2.1中得到的手部关键点位置信息,计算五指实时角度;
步骤2.3:根据步骤2.2中得到的五指实时角度,判断五指实时状态。
步骤2.4:根据步骤2.3中五指实时状态,与步骤1.4中建立手势信息模板库,采用多级匹配法进行手势识别分类;
而且,所述步骤2.4的具体步骤包括:
步骤2.4.1:根据大拇指角度状态进行第一级匹配识别,伸直状态对应手势1、手势2和手势4,转到步骤2.4.2;否则表明对应手势3和手势5,转到2.4.5;
步骤2.4.2:根据四指是否为全闭合状态进行二级判断,若为全闭合状态,则转到步骤2.4.4,否则转到2.4.3;
步骤2.4.3:若四指为全伸直状态,则该手势为手势4,否则为未知手势,结束;
步骤2.4.4:若关键点4在关键点0的上方,则该手势为手势1,否则为手势2,结束;
步骤2.4.5:若食指为闭合状态,则转到步骤2.4.6,否则转到2.4.7.
步骤2.4.6:若除大拇指食指外,其余手指均张开,则该手势为手势5,否则为未知手势,结束;
步骤2.4.7:若食指张开,其余手指闭合,则该手势为手势3,否则为未知手势,结束;
步骤2.5将2.4中得到的实时视频中的手势识别分类结果保存到文件中,建立手势识别分类模块。
而且,所述步骤3的具体步骤包括:
步骤3.1:设计软件控制指令
根据步骤1.4手势分类的不同,预设计种手势分为两类:手势1、2为切换类手势,手势3、4、5为控制类手势;
其中,控制手势只在特定界面中具备实际意义,切换类手势需要被显控软件中所有界面响应;
步骤3.2对于切换类手势,在显控软件中增加子线程,实现对手势识别的读取,根据识别结果实现页面切换;
定义手势1执行向右切换界面操作,定义手势2代表执行向左切换界面操作;
步骤3.3对于控制类手势,在需要控制手势的特定界面中增加定时器函数,定时器在界面显示时启动,界面隐藏时停止;
定义手势3为移动屏幕光标手势,定义手势4为回到主菜单手势,定义手势5为确定操作;
显控软件当前显示界面将定时读取Python手势识别结果,若连续读取到同一种手势结果,根据手势识别结果执行响应控制结果。
而且,所述步骤4的具体步骤包括:
步骤4.1相机开始工作,实时读取人体手部动作数据;
步骤4.2根据步骤4.1获取的实时视频,调用步骤2进行手势分类识别;
步骤4.3应用软件加载步骤2.5中保存的文件,获取实时手势分类识别结果;
步骤4.4根据手势识别结果与步骤3中设计的交互逻辑,应用软件发出控制指令;
步骤4.5循环执行步骤4.1-步骤4.4。
而且,所述步骤4.4的具体步骤包括:
步骤4.4.1若步骤4.3获取的手势识别结果为手势1,则根据步骤3.2,软件做出向右切换界面操作,一次非接触式交互操作完成;
步骤4.4.2若步骤4.3获取的手势识别结果为手势2,则根据步骤3.2,软件做出向左切换界面操作,一次非接触式交互操作完成;
步骤4.4.3若步骤4.3获取的手势识别结果为手势3,则根据步骤3.3,软件中屏幕光标将跟随实时手势移动,可以移动到屏幕的任意位置,一次非接触式交互操作完成;
步骤4.4.4若步骤4.3获取的手势识别结果为手势4,则根据步骤3.3,软件中屏幕内容变更为默认内容,一次非接触式交互操作完成;
步骤4.4.5若步骤4.3获取的手势识别结果为手势5,则根据步骤3.3,此时将执行确认操作,若此时屏幕光标在图4中的“确认”按钮,则执行确认按钮操作;若屏幕光标在“取消”按钮上,则执行取消操作,若光标在屏幕中的其它位置,则无响应,一次非接触式交互操作完成;
本发明的优点和有益效果:
1、本发明提出一种基于手部关键点检测的显控软件非接触式人机交互方法,基于人体手部21个关键点检测技术建立手部跟踪与分类识别模块,显控软件集成手势跟踪与分类识别模块并实时读取手势分类识别结果。根据显控软件交互设计需求,将预定义的手势分为切换类手势和控制类手势两类,显控软件新增子线程实现切换类手势控制、实现界面切换操作;在显控软件单个界面类中新增定时函数,实现鼠标移动、按钮点击等控制操作。
2、本发明根据应用软件的具体需求,创新地在工程类显控软件中集成手势分类识别模块、实现非接触式交互操作。本发明基于手部关键点检测技术设计实现手势跟踪与分类识别模块,手势识别结果即时写入文件中,显控软件充分利用Qt多线程机制,针对不同手势、不同界面采取不用的应用交互反馈方案,使应用交互效果更加高效便捷。
3、本发明根据应用软件的具体需求,设计多种简单实用的易实现的常用手势,建立手势模板库,通过手部关键点检测匹配方案实现手部运动跟踪,通过将实时视频中手指状态与手势模板库中预定义的手指状态进行多次匹配实现分类识别。手势识别模块独立运行,采用Python实现,将手势识别结果即时存入文件中,显控软件应用模块即时读取文件中的手势识别结果并作出相应的反馈。
4、本发明技术采用基本手部关键点检测动态视频流中的手势动作,通过步骤1预定义手势模板库代替现有技术中的样本训练过程,可极大避免因模型样本不均匀、训练数据较少、用户人群个体差异较大导致的训练误差较大、识别准确率不稳定的问题;通过步骤2关键点多级匹配代替传统上的图像识别算法,本发明方法不需要对整张图片进行复杂运算,只需计算手部关键点即可,在计算复杂度上较现有的图像识别算法大大降低,因而本发明识别准确率和识别速度较现有技术提升较大,实用性较强。
附图说明
图1是本发明的21个关节点位置示意图;
图2是本发明的手势跟踪效果图;
图3是本发明的手势识别匹配识别流程图;
图4是本发明的控制界面手势操作示意图;
图5是本发明的显控软件非接触式交互流程图。
具体实施方式
下面详细描述本发明的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
一种基于手部关键点检测的显控软件非接触式人机交互方法,包括以下步骤:
步骤1、根据手部关键点,建立手势信息模板库;
所述步骤1的具体方法为:
步骤1.1:建立手指关节弯曲伸直状态信息
所述步骤1.1的具体方法为:
如图1所示,根据手部21个关节点的位置,根据关节点的累积角度,建立每个手指的弯曲或伸直状态信息;
在本实施例中,通过计算大拇指向量0-2和3-4之间的角度,若该角度值大于某个阈值,则定义为弯曲,小于某个阈值定义为伸直。
步骤1.2:建立手指关节角度信息;
所述步骤1.2的具体方法为:
①定义手部21个关节点即手部关键点的位置信息,包括横纵坐标x,y,其中x,y是归一化后的坐标;
②定义向量a,向量终点为关键点0,向量起点为关键点2;
③定义向量b,向量终点为关键点3,向量起点为关键点4;
向量a与b之间的角度即定义为大拇指的角度;
④定义向量c,向量终点为关键点0,向量起点为关键点6;
⑤定义向量d,向量终点为关键点7,向量起点为关键点8;
向量c与d之间的角度即定义为食指的角度;
⑥定义向量e,向量终点为关键点0,向量起点为关键点10;
⑦定义向量f,向量终点为关键点11,向量起点为关键点12;
向量e与f之间的角度即定义为中指的角度;
⑧定义向量m,向量终点为关键点0,向量起点为关键点14;
⑨定义向量n,向量终点为关键点15,向量起点为关键点16;
向量m与n之间的角度即定义为无名指的角度;
⑩定义向量p,向量终点为关键点0,向量起点为关键点18;
定义向量q,向量终点为关键点19,向量起点为关键点20;
向量p与q之间的角度即定义为小指的角度。
步骤1.3:设置阈值,建立手指状态定量信息;
所述步骤1.3的具体方法为:
定义A为四指闭合阈值,除大拇指外的四指角度大于A则认定为闭合;
定义B为大拇指闭合阈值,若大拇指角度大于B则认定为闭合;
定义C为手指张开阈值,若五指角度小于C则认定为伸直;
在本实施例中,经过实测,最佳阈值为:A=65,B=53,C=49。
步骤1.4:量化各类手势,建立手势信息模板库;
所述步骤1.4的具体方法为:
根据所述步骤1.3五指角度定义,将手指状态集映射为一组预定义的手势,建立手势信息模板库:
1)手势1,若大拇指角度小于C,且其余四指角度大于A,且关键点4的纵坐标大于关键点0的纵坐标,则该手势为手势1;
2)手势2,若大拇指角度小于C,且其余四指角度大于A,且关键点4的纵坐标小于关键点0的纵坐标,则该手势为手势2;
3)手势3,若食指角度小于C,大拇指角度大于B,且其余三指手势大于A,则该手势为手势3;
4)手势4,若五指角度均小于C,则该手势为手势4;
5)手势5,若大拇指角度大于B,食指角度大于A,且其余三只角度小于C,则该手势为手势5。
步骤2、根据步骤1建立手势信息模板库,进行手势识别分类,建立手势识别分类模块;
所述步骤2的具体步骤包括:
步骤2.1:根据步骤1建立手势信息模板库,判断实时视频中手部关键点位置信息;
所述步骤2.1的具体方法为:
利用多个模型组成机器学习管道对手部运动数据进行实时跟踪,从单帧图像中推断出实时视频中手部21个3D关键点的位置。
在本实施例中,手部跟踪方案采取的模型为手掌检测器模型和手部界标模型,手掌检测模型对整个图像进行操作,并返回定向手部边界框;手部界标模型在由手掌定义的裁剪图像区域操作,并返回高保真的3D手部关键点。
其中,手部跟踪效果示意图如图2所示。
步骤2.2:根据步骤2.1中得到的手部关键点位置信息,计算五指实时角度;
其计算方法见步骤1.2。
步骤2.3:根据步骤2.2中得到的五指实时角度,判断五指实时状态。
其计算方法见和步骤1.3
步骤2.4:根据步骤2.3中五指实时状态,与步骤1.4中建立手势信息模板库,采用多级匹配法进行手势识别分类;
如图3所示,所述步骤2.4的具体步骤包括:
步骤2.4.1:根据大拇指角度状态进行第一级匹配识别,伸直状态对应手势1、手势2和手势4,转到步骤2.4.2;否则表明对应手势3和手势5,转到2.4.5。
步骤2.4.2:根据四指是否为全闭合状态进行二级判断,若为全闭合状态,则转到步骤2.4.4,否则转到2.4.3。
步骤2.4.3:若四指为全伸直状态,则该手势为手势4,否则为未知手势,结束。
步骤2.4.4:若关键点4在关键点0的上方,则该手势为手势1,否则为手势2,结束。
步骤2.4.5:若食指为闭合状态,则转到步骤2.4.6,否则转到2.4.7.
步骤2.4.6:若除大拇指食指外,其余手指均张开,则该手势为手势5,否则为未知手势,结束。
步骤2.4.7:若食指张开,其余手指闭合,则该手势为手势3,否则为未知手势,结束。
步骤2.5将2.4中得到的实时视频中的手势识别分类结果保存到文件中,建立手势识别分类模块;
步骤3、基于步骤2建立手势识别分类模块,设置显控软件非接触式交互逻辑;
所述步骤3的具体步骤包括:
步骤3.1设计软件控制指令
根据步骤1.4手势分类的不同,显控软件交互方式也随之不同,预设计种手势分为两类:手势1、2为切换类手势,设计逻辑见步骤3.2;手势3、4、5为控制类手势,设计逻辑为步骤3.3。
控制手势只在特定界面中具备实际意义,切换类手势需要被显控软件中所有界面响应。
步骤3.2对于切换类手势,在显控软件中增加子线程,实现对手势识别的读取,根据识别结果实现页面切换。
定义手势1执行向右切换界面操作,定义手势2代表执行向左切换界面操作。
步骤3.3对于控制类手势,在需要控制手势的特定界面中增加定时器函数,定时器在界面显示时启动,界面隐藏时停止;
定义手势3为移动屏幕光标手势,定义手势4为回到主菜单手势,类似手机中的”Home”键,定义手势5为确定操作;
显控软件当前显示界面将定时读取Python手势识别结果,若连续读取到同一种手势结果,根据手势识别结果执行响应控制结果。
在本实施例中,图4为控制界面手势操作示意图,详细叙述交互设计过程。为显控软件中的报文录取界面,需要手势3、手势5等2种控制手势实现完成操作操作,手势3为移动手势,实现将界面光标移动到左侧待选定的导航信息报文中,手势5为选中手势,实现选中光标所在位置的控件;选中控件后,通过手势3移动到“开始”按钮处,实现展示选定的信息。
步骤4、基于步骤3设置的显控软件非接触式交互逻辑,实现显控软件非接触式交互;
所述步骤4的具体步骤包括:
步骤4.1相机开始工作,实时读取人体手部动作数据;
步骤4.2根据步骤4.1获取的实时视频,调用步骤2进行手势分类识别;
步骤4.3应用软件加载步骤2.5中保存的文件,获取实时手势分类识别结果;
步骤4.4根据手势识别结果与步骤3中设计的交互逻辑,应用软件发出控制指令;
步骤4.5循环执行步骤4.1-步骤4.4。
所述步骤4.4的具体步骤包括:
步骤4.4.1若步骤4.3获取的手势识别结果为手势1,则根据步骤3.2,软件做出向右切换界面操作,一次非接触式交互操作完成;
步骤4.4.2若步骤4.3获取的手势识别结果为手势2,则根据步骤3.2,软件做出向左切换界面操作,一次非接触式交互操作完成;
步骤4.4.3若步骤4.3获取的手势识别结果为手势3,则根据步骤3.3,软件中屏幕光标将跟随实时手势移动,可以移动到屏幕的任意位置,一次非接触式交互操作完成;
步骤4.4.4若步骤4.3获取的手势识别结果为手势4,则根据步骤3.3,软件中屏幕内容变更为默认内容,一次非接触式交互操作完成;
步骤4.4.5若步骤4.3获取的手势识别结果为手势5,则根据步骤3.3,此时将执行确认操作,若此时屏幕光标在图4中的“确认”按钮,则执行确认按钮操作;若屏幕光标在“取消”按钮上,则执行取消操作,若光标在屏幕中的其它位置,则无响应,一次非接触式交互操作完成。
其总流程图如图5所示。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
- 一种基于蓝色点识别的非接触式人机交互系统
- 基于瞬态电场的非接触式柔直系统关键设备动作时序检测方法及系统