一种手掌的深度检测方法、装置、计算机设备和存储介质与流程

文档序号:26520651发布日期:2021-09-04 10:26阅读:121来源:国知局
一种手掌的深度检测方法、装置、计算机设备和存储介质与流程

1.本发明实施例涉及计算机视觉的技术领域,尤其涉及一种手掌的深度检测方法、装置、计算机设备和存储介质。


背景技术:

2.在工业检测、自动驾驶、医学影像、美颜等场景中,通常对用户的手掌采集图像数据,从图像数据中恢复手掌的深度信息。
3.目前,手掌的深度信息主要是采集带有手掌的图像数据作为样本,人工标手掌的深度,从而训练神经网络,一方面,作为训练的样本数量有限,而且面对手掌采集图像数据时的角度、光线等有所不同,导致神经网络检测的深度信息失真,并不符合人体手掌正常的形态,例如,手指过长或过短,手指间隙过大或过小,等等,另一方面,神经网络的结构单一,导致检测能力单一,而且,每次更新时均需要重新训练神经网络,运维成本较高。


技术实现要素:

4.本发明实施例提出了一种手掌的深度检测方法、装置、计算机设备和存储介质,以解决使用神经网络检测手掌的深度信息失真、检测能力单一、运维成本较高的问题。
5.第一方面,本发明实施例提供了一种手掌的深度检测方法,包括:
6.采集图像数据,所述图像数据中具有手掌数据;
7.将所述手掌数据转换为第一手掌模型;
8.初始化用于描述手掌的第二手掌模型;
9.将所述第二手掌模型调整至与所述第一手掌模型匹配;
10.若调整完成,则检测所述第二手掌模型上的关键点,作为所述手掌的深度信息。
11.第二方面,本发明实施例还提供了一种手掌的深度检测装置,包括:
12.图像数据采集模块,用于采集图像数据,所述图像数据中具有手掌数据;
13.第一手掌模型转换模块,用于将所述手掌数据转换为第一手掌模型;
14.第二手掌模型初始化模块,用于初始化用于描述手掌的第二手掌模型;
15.手掌模型调整模块,用于将所述第二手掌模型调整至与所述第一手掌模型匹配;
16.深度信息读取模块,用于若调整完成,则检测所述第二手掌模型上的关键点,作为所述手掌的深度信息。
17.第三方面,本发明实施例还提供了一种计算机设备,所述计算机设备包括:
18.一个或多个处理器;
19.存储器,用于存储一个或多个程序,
20.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的手掌的深度检测方法。
21.第四方面,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的手掌的
深度检测方法。
22.在本实施例中,采集图像数据,图像数据中具有手掌数据,将手掌数据转换为第一手掌模型,初始化用于描述手掌的第二手掌模型,将第二手掌模型调整至与第一手掌模型匹配,若调整完成,则检测第二手掌模型上的关键点,作为手掌的深度信息,本实施例提出用于检测手掌深度的框架,可以从图像数据观察到手掌数据转换为第一手掌模型,第一手掌模型可以较好地反映出用户真实手掌的姿态,而第二手掌模型独立于图像数据进行构建,可以是符合人体手掌的形态,以第一手掌模型的姿态作为参考对第二手掌模型的调整,使得第二手掌模型在符合用户真实手掌的形态的情况下、尽量贴近用户真实手掌的姿态,此时,从第二手掌模型中读取的深度信息具有较高的精确度,该框架并不依赖特定的神经网络,可以自适应业务场景,任意搭配神经网络将手掌数据转换为第一手掌模型,检测能力多样化,复用已有的神经网络,运维成本低。
附图说明
23.图1为本发明实施例一提供的一种手掌的深度检测方法的流程图;
24.图2a为本发明实施例一提供的一种手掌骨骼的示意图;
25.图2b为本发明实施例一提供的一种关节点的示例图;
26.图3是本发明实施例二提供的一种手掌的深度检测方法的流程图;
27.图4是本发明实施例二提供的一种向量投影的示例图;
28.图5是本发明实施例二提供的一种梯度下降的示例图;
29.图6为本发明实施例三提供的一种手掌的深度检测装置的结构示意图;
30.图7为本发明实施例四提供的一种计算机设备的结构示意图。
具体实施方式
31.下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
32.实施例一
33.图1为本发明实施例一提供的一种手掌的深度检测方法的流程图,本实施例可适用于以图像数据观察到的第一手掌模型作为基础、调整一个符合人体手掌正常形态的第二手掌模型,从而在该第二手掌模型读取深度信息的情况,该方法可以由手掌的深度检测装置来执行,该手掌的深度检测装置可以由软件和/或硬件实现,可配置在计算机设备中,例如,服务器、工作站、个人电脑、移动终端(如手机、平板等)、智能穿戴设备(如智能手表、智能眼镜等),等等,具体包括如下步骤:
34.步骤101、采集图像数据。
35.若本实施例应用于移动终端、智能穿戴设备等作为客户端的计算机设备,则可以在计算机设备中安装支持图像处理的应用,如直播应用、图像编辑应用、相机应用、即时通讯工具、图库应用,等等。
36.诸如图像编辑应用、即时通讯工具、图库应用等应用,其ui(user interface,用户界面)可提供导入的控件,用户可通过触控操作或鼠标操作等方式操作该导入的控件,选择
本地存储的视频数据或图像数据(以缩略图或路径表示),也可以选择网络存储的视频数据或图像数据(以url(uniform resource locators,统一资源定位器)表示)。
37.诸如直播应用、图像编辑应用、相机应用、即时通讯工具等应用,其ui可提供拍照、录像的控件,用户可通过触控操作或鼠标操作等方式操作该拍照、录像的控件,通知应用调用摄像头采集视频数据或图像数据。
38.若本实施例应用于服务器、工作站等作为服务端的计算机设备,可以接收作为客户端的设备发送的视频数据或图像数据。
39.其中,视频数据中具有多帧图像数据,计算机设备可以从视频数据中抽取图像数据。
40.步骤102、将手掌数据转换为第一手掌模型。
41.在本实施例中,图像数据中具有手掌数据,即表示人体手掌的像素点,基于在图像数据可观察到的手掌数据,创建描述该手掌数据的模型,记为第一手mediapipe的handpose掌模型。
42.在本发明的一种实施例中,步骤102可以包括如下步骤:
43.步骤1021、加载手势识别模型。
44.在本实施例中,可以预先存储手势识别模型(结构)及其参数,在对手掌数据建模时,可以将手势识别模型及其参数加载至内存,运行该手势写别模式。
45.其中,手势识别模型通常为神经网络,如cnn(convolutional neural networks,卷积神经网络)、dnn(deep neural networks,深度神经网络)、rnn(recurrent neural network,循环神经网络)等等,可用于识别表示手掌的关节点(以编号、坐标点等表示)、从而得到手掌的手势。
46.进一步而言,手势识别模型可以是第三方完成训练的手势识别模型,如mediapipe的handpose等,也可以将第三方完成训练的手势识别模型作为预训练的模型(pre_trained model),对该手势识别模型进行微调(fine

tuning)或持续学习(continual learning),还可以是自定义手势识别模型的结构、并对该手势识别模型进行训练,等等,本实施例对此不加以限制。
47.不同的手势识别模型的结构、训练的样本、训练的方式均有所不同,使得手势识别模型在不同环境(如光线的强度、背景的复杂度等)中的检测能力(如准确率、检测时间等)均有所不同,本实施中,可以根据业务场景(如直播、远程动作映射等)的需求选择合适的手势识别模型。
48.步骤1022、将图像数据输入手势识别模型中、识别手掌数据中表示关节点的坐标点。
49.将当前的图像数据输入到手势识别模型中,手势识别模型按照自身的逻辑对图像数据进行处理,将手掌数据位于世界坐标系等坐标系中,识别手掌数据中表示关节点的坐标点。
50.由于不同的手势识别模型输出的格式可能有所不同,因此,可以在手势识别模型输出表示关节点的坐标点之后,可以将表示关节点的坐标点映射至统一的格式。
51.示例性地,如图2a所示,一般情况下,人体的手掌包括拇指(thumb)210、食指(index finger)220、中指(middle finger)230、无名指(third finger/ring finger)240、
小指(little finger)250。
52.在手掌根部的手掌骨骼包括手根骨201,手根骨201包括豌豆骨、三角骨、月骨、手舟骨、钩骨、头状骨、大多角骨、小多角骨等,在食指220、中指230、无名指240、小指250的手掌骨骼均包括掌骨202、近节指骨203、中节指骨204、远节指骨205,在拇指210中包括掌骨202、近节指骨203、远节指骨205。
53.手根骨201与掌骨202之间具有根关节(关节点),掌骨202与近节指骨203之间具有中指间关节(关节点),近节指骨203与中节指骨204之间具有近指间关节(关节点),中节指骨204与远节指骨205之间具有远指间关节(关节点),近节指骨203与远节指骨205之间具有指间关节(关节点)。
54.此外,为便于对手掌数据建模,可以将拇指210、食指220、中指230、无名指240、小指250中手根骨201与掌骨202之间的根关节合并为一个根关节,分别拇指210、食指220、中指230、无名指240、小指250的远节指骨205末尾设置指尖关节(关节点),以及,在大多角骨附近为拇指210在新增一个关节点,记为根中关节。
55.因此,如图2b所示,对手掌数据检测表示关节点的坐标点包括:
56.拇指:表示根关节的坐标点260、表示根中指间关节的坐标点261、表示中指间关节的坐标点262、表示指间关节的坐标点263、表示指尖关节的坐标点264;
57.食指:表示根关节的坐标点260、表示中指间关节的坐标点265、表示近指间关节的坐标点266、表示远指间关节的坐标点267、表示指尖关节的坐标点268;
58.中指:表示根关节的坐标点260、表示中指间关节的坐标点269、表示近指间关节的坐标点270、表示远指间关节的坐标点271、表示指尖关节的坐标点272;
59.无名指:表示根关节的坐标点260、表示中指间关节的坐标点273、表示近指间关节的坐标点274、表示远指间关节的坐标点275、表示指尖关节的坐标点276;
60.小指:表示根关节的坐标点260、表示中指间关节的坐标点277、表示近指间关节的坐标点278、表示远指间关节的坐标点279、表示指尖关节的坐标点280。
61.步骤1023、基于相邻的坐标点生成第一手掌模型中的第一向量。
62.在具体实现中,可以按照沿掌心到指尖对每个手指上的坐标点进行排序,对于相邻两个坐标点,可以将排序排序在先的数据点作为起点,指向排序在后的数据点,得到第一向量,使得第一向量表示相邻的坐标点对应关节点之间的手掌骨骼,将这些第一向量组合为特定的数据结构,可以表示第一手掌模型。
63.示例性地,对于如图2所示的手掌数据,可以构建如下树结构的第一手掌模型:
[0064][0065]
进一步地,对各个手指设定如下:
[0066]
拇指:拇指:
[0067]
食指:食指:
[0068]
中指:中指:
[0069]
无名指:无名指:
[0070]
小指:小指:
[0071]
令拇指食指中指中指无名指小指则第一手掌模型可以表示为
[0072]
在一些情况中,考虑到拇指的活动是比较灵活的,食指、中指、无名指、小指可以大体反应出手掌的姿态,可以省略拇指,使用食指、中指、无名指、小指对手掌数据建模,此时,第一手掌模型可以表示为
[0073]
步骤103、初始化用于描述手掌的第二手掌模型。
[0074]
在本实施例中,可以启动3d引擎,例如,unity引擎、虚幻引擎、cocos2dx引擎、自研引擎,等等,由3d引擎渲染符合人体手掌形态(如各个手指之间的长短比例、骨骼的范围、手指间隙的范围、关节的弯曲程度等)的虚拟手掌,该虚拟手掌可用第二手掌模型进行描述。
[0075]
进一步而言,描述第一手掌模型的形式与描述第二手掌模型的形式保持一致,例如,若第一手掌模型表示为则第二手掌模型可以表示为
[0076]
将描述手掌的姿态数据传入3d引擎中,映射为虚拟手掌,使得该虚拟手掌表现为该姿态数据。
[0077]
其中,该姿态数据可以是默认的值,也可以是根据当前用户输入的、与手掌形态具有相关性的生态参数(如性别、年龄、身高等)进行设定,使得虚拟手掌与用户真实的手掌形态更加接近,等等,本实施例对此不加以限制。
[0078]
以unity引擎为例,unity引擎通过网络接收数据包(即姿态数据),解包数据后将数据转换成unity的四元数,若四元数并不为世界坐标系,则可以对四元数变换到unity的世界坐标系,以方便后续的处理。
[0079]
在unity引擎中,虚拟手掌可以通过骨骼蒙皮动画(skinned mesh)的方式生成的,所谓骨骼蒙皮动画,是指在骨骼控制下,通过顶点混合动态计算蒙皮网格的顶点,而骨骼的运动相对于其父骨骼,并由动画关键帧数据驱动。一个骨骼蒙皮动画通常包括骨骼层次结构数据,网格(mesh)数据,网格蒙皮数据(skin info)和骨骼(bone)的动画(关键帧)数据。
[0080]
在unity引擎中,针对指定的虚拟手掌传入的姿态数据,使用bindpose(姿态绑定,bindpose用于在骨骼变换前预制一些骨骼变换,使得人物可以在同一动画上有不同的骨骼位置表现,简化工作流等)算法渲染虚拟手掌,bindpose算法如下表示:
[0081]
onebonebindpose=bone.worldtolocalmatrix*transform.localtoworldmatrix
[0082]
其中,姿态为骨骼的世界转局部坐标系矩阵worldtolocalmatrix乘上mesh的局部转世界矩阵localtoworldmatrix。
[0083]
通常将计算mesh的顶点受bone影响而产生的变化的过程称之为蒙皮,一般过程为:
[0084]
将顶点从mesh空间变换到bone空间:
[0085]
v
bone
=v
mesh
*bindpose
[0086]
将bone空间下的顶点经过当前bone的变换矩阵,从bone空间变换到mesh空间:
[0087]
v
out
=v
bone
*bonetomeshmatrix
[0088]
一个顶点可能受到多根骨骼的影响,所以最终是对受影响的几根骨骼进行变换,乘以boneweights中的权重相加混合得到:
[0089]
v
out0
=bonetomeshmatrix0*bindpose0*v
mesh
[0090]
v
out1
=bonetomeshmatrix1*bindpose1*v
mesh
[0091]
v
out2
=bonetomeshmatrix2*bindpose2*v
mesh
[0092]
v
out3
=bonetomeshmatrix3*bindpose3*v
mesh
[0093]
v
out
=v
out0
*weight0+v
out1
*weight1+v
out2
*weight2+v
out3
*weight3
[0094]
步骤104、将第二手掌模型调整与第一手掌模型匹配。
[0095]
第一手掌模型是从图像数据观察到的,虽然或多或少存在失真的情况,但还是可以较好地反映出用户真实手掌的姿态,第二手掌模型符合人体手掌的形态,但初始化时的姿态是一个默认的姿态,与用户真实手掌的姿态并不相同,因此,在本实施例中,可以以第一手掌模型的姿态作为参考,对第二手掌模型进行调整,使得第二手掌模型与第一手掌模型匹配,即,第二手掌模型表现的姿态与第一手掌模型表现的姿态相似。
[0096]
其中,所谓相似,可以指第二手掌模型与第一手掌模型之间的差异在合理的误差范围内。
[0097]
在本发明的一个实施例中,第一手掌模型中具有多个表示手掌骨骼的第一向量,第二手掌模型中具有多个表示手掌骨骼的第二向量,对于食指、中指、无名指、小指,手掌骨骼沿手掌根部到指尖接依次包括掌骨、近节指骨、中节指骨、远节指骨。
[0098]
在具体实现中,针对每个手指,可以分别按照一模式模式(如旋转矩阵)旋转表示掌骨的第二向量,直至表示掌骨的第二向量与表示掌骨的第一向量匹配,使得第二手指模型中的掌骨与第一手指中的掌骨匹配。
[0099]
若完成旋转表示掌骨的第二向量,则针对每个手指,可以分别按照一模式模式(如旋转矩阵)旋转表示近节指骨的第二向量,直至表示近节指骨的第二向量与表示近节指骨的第一向量匹配,使得第二手指模型中的近节指骨与第一手指中的近节指骨匹配。
[0100]
若完成旋转表示近节指骨的第二向量,则针对每个手指,可以分别按照一模式模式(如旋转矩阵)旋转表示中节指骨的第二向量,直至表示中节指骨的第二向量与表示中节指骨的第一向量匹配,使得第二手指模型中的中节指骨与第一手指中的中节指骨匹配。
[0101]
若完成旋转表示中节指骨的第二向量,则针对每个手指,可以分别按照一模式模式(如旋转矩阵)旋转表示远节指骨的第二向量,直至表示远节指骨的第二向量与表示远节指骨的第一向量匹配,使得第二手指模型中的远节指骨与第一手指中的远节指骨匹配。
[0102]
若完成旋转表示远节指骨的第二向量,则可以认为将第二手掌模型的姿态调整与第一手掌模型的姿态匹配。
[0103]
其中,所谓第二向量与第一向量匹配,可以指第二向量与第一向量之间的差异在
合理的误差范围内。
[0104]
在本实施例中,按照人体手掌中的骨骼顺序,依次旋转第二手掌模型中的各个关节,在保证第二手掌模型符合人体手掌形态的情况下,使得第二手掌模型的姿态调整与第一手掌模型的姿态匹配。
[0105]
步骤105、若调整完成,则检测第二手掌模型上的关键点,作为手掌的深度信息。
[0106]
通过对第二手掌模型的调整,使得第二手掌模型在符合用户真实手掌的形态的情况下、尽量贴近用户真实手掌的姿态,此时,可以输出调整之后的第二手掌模型中的关键点,作为手掌的深度信息。
[0107]
在本实施例中,采集图像数据,图像数据中具有手掌数据,将手掌数据转换为第一手掌模型,初始化用于描述手掌的第二手掌模型,将第二手掌模型调整至与第一手掌模型匹配,若调整完成,则检测第二手掌模型上的关键点,作为手掌的深度信息,本实施例提出用于检测手掌深度的框架,可以从图像数据观察到手掌数据转换为第一手掌模型,第一手掌模型可以较好地反映出用户真实手掌的姿态,而第二手掌模型独立于图像数据进行构建,可以是符合人体手掌的形态,以第一手掌模型的姿态作为参考对第二手掌模型的调整,使得第二手掌模型在符合用户真实手掌的形态的情况下、尽量贴近用户真实手掌的姿态,此时,从第二手掌模型中读取的深度信息具有较高的精确度,该框架并不依赖特定的神经网络,可以自适应业务场景,任意搭配神经网络将手掌数据转换为第一手掌模型,检测能力多样化,复用已有的神经网络,运维成本低。
[0108]
实施例二
[0109]
图3为本发明实施例二提供的一种手掌的深度检测方法的流程图,本实施例以前述实施例为基础,进一步细化调整第二手掌模型的操作,该方法具体包括如下步骤:
[0110]
步骤301、采集图像数据。
[0111]
其中,图像数据中具有手掌数据。
[0112]
步骤302、将手掌数据转换为第一手掌模型。
[0113]
步骤303、初始化用于描述手掌的第二手掌模型。
[0114]
步骤304、针对表示同一手掌骨骼的第一向量与第二向量,计算旋转模式。
[0115]
在本实施例中,第一手掌模型中具有多个表示手掌骨骼的第一向量第二手掌模型中具有多个表示手掌骨骼的第二向量可以将这些第一向量第二向量针对每个手指,划分为表示同一手掌骨骼的第一向量与第二向量记为向量对。
[0116]
对于每一个向量对,为使第一向量的姿态与第二向量的姿态一致、从而使得第一向量与第二向量匹配,这个过程可视为如下优化问题:
[0117][0118]
第二向量按照旋转模式r(如三阶的旋转矩阵)旋转后,与第二向量之间的差异最小化。
[0119]
在本发明的一个实施例中,步骤304包括如下步骤:
[0120]
步骤3041、将第一向量投影至预设的平面,得到第一投影向量。
[0121]
在第一向量的集合中,给定第一向量d=(d
x
,d
y
,d
z
),可以将其投影至世界坐标系中的任一平面,此时,第一投影向量与该平面上指定的轴形成第一夹角。
[0122]
示例性地,如图4所示,可以将第一向量d=(d
x
,d
y
,d
z
)投影至预设的xy平面,得到第一投影向量d
xy
=(d
x
,d
y
,0),其中,第一投影向量d
xy
与xy平面上的x轴形成第一夹角α
d
,此时,x=(1,0,0),那么:
[0123][0124]
当然,第一向量也可以投影至yz平面或xz平面得到第一投影向量,第一投影向量与y轴或z轴形成第一夹角,本实施例对此不加以限制。
[0125]
步骤3042、将绕该轴旋转目标角度之后的第二向量投影至平面,得到第二投影向量。
[0126]
在第二向量的集合中,给定第二向量m=(m
x
,m
y
,m
z
),可以将其投影至世界坐标系中的任一平面,此时,第二投影向量与该平面上该轴形成第二夹角。
[0127]
进一步而言,第一向量投影的平面与第二向量投影的平面相同,形成第一夹角的轴与形成第二夹角的轴相同。
[0128]
示例性地,如图4所示,将第二向量m=(m
x
,m
y
,m
z
)投影至xy平面,得到第二投影向量m
xy
=(m
x
,m
y
,0),其中,第二投影向量m
xy
与xy平面上的x轴形成第二夹角α
m

[0129]
当然,第二向量也可以投影至yz平面或xz平面得到第二投影向量,第二投影向量与y轴或z轴形成第二夹角,本实施例对此不加以限制。
[0130]
在本实施例中,调整第二向量的目标是将第二向量m绕指定的轴(如x轴)旋转目标角度θ,使得α
m
=α
d

[0131]
其中,目标角度初始可以是随机数值,默认的数值,等等,本实施例对此不加以限制。
[0132]
将第二向量绕指定的轴旋转目标角度,此时,旋转模式发生变化。
[0133]
示例性地,如图4所示,旋转模式r为三阶的旋转矩阵,将第二向量绕x轴旋转目标角度θ,由罗德里格公式可得旋转矩阵r:
[0134][0135]
因此,将第二向量m沿图4中的虚线旋转后,第二向量m
r
为:
[0136][0137]
则,旋转后的第二向量m
r
在xy平面上投影的第二投影向量m
rxy
为:
[0138][0139]
步骤3043、设定目标函数为第二夹角与第一夹角之间的差异。
[0140]
在本实施例中,设定目标函数,目标函数以目标角度θ作为参数,记为f(θ),用以衡量第二夹角与第一夹角之间的差异。
[0141]
示例性地,可设定目标函数为角度差值的平方,角度差值为第二夹角减去第一夹角的差值。
[0142]
则目标函数f(θ)表示为:
[0143]
f(θ)=(α
m

α
d
)2[0144]
步骤3044、以最小化差异为优化的目标,求解目标角度。
[0145]
目标函数f(θ)最小时,可使得第一向量与第二向量匹配,此时,目标角度θ的数值即为最优旋转量θ
best

[0146][0147]
在具体实现中,可以以梯度下降法、随机梯度下降法、牛顿法等优化方式,对目标函数进行优化,求解目标角度最优的数值。
[0148]
以梯度下降法为例,可使用目标函数对目标角度求导,获得梯度值。
[0149]
将预设的步长乘以梯度值,获得更新量,将目标角度减去更新量,作为新的目标角度。
[0150]
判断目标角度是否满足预设的迭代条件,例如,迭代的次数大于或等于预设的第一阈值,第二夹角与第一夹角之间的差异小于或等于预设的第二阈值。
[0151]
若是,则输出目标角度。
[0152]
若否,则返回使用目标函数对目标角度求导,获得梯度。
[0153]
那么,在本示例中,目标角度的迭代过程可以表示为:
[0154][0155]
其中,lr为步长。
[0156]
如图5所示,点为每次迭代中目标角度θ的数值,线条为目标函数f(θ)的最小值领域,在本示例中,当目标角度θ大致为15
°
时,目标函数f(θ)最小,此时,旋转基本正确。
[0157]
步骤305、按照旋转模式旋转第二向量,以使第二向量与第一向量匹配。
[0158]
对于每一个向量对,如果求解出最优的旋转模式,则可以按照该旋转模式旋转第二向量,从而使得第一向量与第二向量匹配。
[0159]
进一步地,旋转模式可以为绕指定的轴旋转目标角度,以三阶的旋转矩阵进行表示,此时,则可以将第二向量乘以该旋转矩阵,得到旋转之后的第二向量。
[0160]
步骤306、若旋转完成,则检测第二手掌模型上的关键点,作为手掌的深度信息。
[0161]
如果完成旋转每一个第二向量,则可以读取第二手掌模型上的关键点,记为手掌
的深度信息。
[0162]
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
[0163]
实施例三
[0164]
图6为本发明实施例三提供的一种手掌的深度检测装置的结构框图,具体可以包括如下模块:
[0165]
图像数据采集模块601,用于采集图像数据,所述图像数据中具有手掌数据;
[0166]
第一手掌模型转换模块602,用于将所述手掌数据转换为第一手掌模型;
[0167]
第二手掌模型初始化模块603,用于初始化用于描述手掌的第二手掌模型;
[0168]
手掌模型调整模块604,用于将所述第二手掌模型调整至与所述第一手掌模型匹配;
[0169]
深度信息读取模块605,用于若调整完成,则检测所述第二手掌模型上的关键点,作为所述手掌的深度信息。
[0170]
在本发明的一个实施例中,所述第一手掌模型转换模块602包括:
[0171]
手势识别模型加载模块,用于加载手势识别模型,所述手势识别模型用于识别表示手掌的关节点;
[0172]
手势识别模型调用模块,用于将所述图像数据输入所述手势识别模型中、识别所述手掌数据中表示关节点的坐标点;
[0173]
向量生成模块,用于基于相邻的所述坐标点生成第一手掌模型中的第一向量,所述第一向量表示相邻的所述坐标点对应关节点之间的手掌骨骼。
[0174]
在本发明的一个实施例中,所述第一手掌模型中具有多个表示手掌骨骼的第一向量,所述第二手掌模型中具有多个表示手掌骨骼的第二向量,所述手掌骨骼依次包括掌骨、近节指骨、中节指骨、远节指骨;
[0175]
所述手掌模型调整模块604包括:
[0176]
掌骨旋转模块,用于旋转表示所述掌骨的所述第二向量,直至表示所述掌骨的所述第二向量与表示所述掌骨的所述第一向量匹配;
[0177]
近节指骨旋转模块,用于若完成旋转表示所述掌骨的所述第二向量,则旋转表示所述近节指骨的所述第二向量,直至表示所述近节指骨的所述第二向量与表示所述近节指骨的所述第一向量匹配;
[0178]
中节指骨旋转模块,用于若完成旋转表示所述近节指骨的所述第二向量,则旋转表示所述中节指骨的所述第二向量,直至表示所中节指骨的所述第二向量与表示所述中节指骨的所述第一向量匹配;
[0179]
远节指骨旋转模块,用于若完成旋转表示所述中节指骨的所述第二向量,则旋转表示所述远节指骨的所述第二向量,直至表示所述远节指骨的所述第二向量与表示所述远节指骨的所述第一向量匹配。
[0180]
在本发明的另一个实施例中,所述第一手掌模型中具有多个表示手掌骨骼的第一
向量,所述第二手掌模型中具有多个表示手掌骨骼的第二向量;
[0181]
所述手掌模型调整模块604包括:
[0182]
旋转模式计算模块,用于针对表示同一所述手掌骨骼的所述第一向量与所述第二向量,计算旋转模式;
[0183]
向量旋转模块,用于按照所述旋转模式旋转所述第二向量,以使所述第二向量与所述第一向量匹配。
[0184]
在本发明的一个实施例中,所述旋转模式计算模块包括:
[0185]
第一向量投影模块,用于将所述第一向量投影至预设的平面,得到第一投影向量,其中,所述第一投影向量与所述平面上指定的轴形成第一夹角;
[0186]
第二向量投影模块,用于将绕所述轴旋转目标角度之后的所述第二向量投影至所述平面,得到第二投影向量,其中,所述第二投影向量与所述平面上所述轴形成第二夹角;
[0187]
目标函数设定模块,用于设定目标函数为所述第二夹角与所述第一夹角之间的差异;
[0188]
目标角度求解模块,用于以最小化所述差异为优化的目标,求解所述目标角度。
[0189]
在本发明实施例的一个示例中,所述第一向量投影模块还用于:
[0190]
将所述第一向量投影至预设的xy平面,得到第一投影向量,其中,所述第一投影向量与所述xy平面上的x轴形成第一夹角;
[0191]
所述第二向量投影模块还用于:
[0192]
将所述第二向量投影至所述xy平面,得到第二投影向量,其中,所述第二投影向量与所述xy平面上的x轴形成第二夹角。
[0193]
在本发明实施例的一个示例中,所述目标函数设定模块还用于:
[0194]
设定目标函数为角度差值的平方,所述角度差值为所述第二夹角减去所述第一夹角的差值。
[0195]
在本发明实施例的一个示例中,所述目标角度求解模块还用于:
[0196]
使用所述目标函数对所述目标角度求导,获得梯度值;
[0197]
将预设的步长乘以所述梯度值,获得更新量;
[0198]
将所述目标角度减去所述更新量,作为新的所述目标角度;
[0199]
判断所述目标角度是否满足预设的迭代条件;
[0200]
若是,则输出所述目标角度;
[0201]
若否,则返回执行所述使用所述目标函数对所述目标角度求导,获得梯度。
[0202]
本发明实施例所提供的手掌的深度检测装置可执行本发明任意实施例所提供的手掌的深度检测方法,具备执行方法相应的功能模块和有益效果。
[0203]
实施例四
[0204]
图7为本发明实施例四提供的一种计算机设备的结构示意图。图7示出了适于用来实现本发明实施方式的示例性计算机设备12的框图。图7显示的计算机设备12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
[0205]
如图7所示,计算机设备12以通用计算设备的形式表现。计算机设备12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
[0206]
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(isa)总线,微通道体系结构(mac)总线,增强型isa总线、视频电子标准协会(vesa)局域总线以及外围组件互连(pci)总线。
[0207]
计算机设备12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
[0208]
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(ram)30和/或高速缓存存储器32。计算机设备12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图7未显示,通常称为“硬盘驱动器”)。尽管图7中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如cd

rom,dvd

rom或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
[0209]
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
[0210]
计算机设备12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机设备12交互的设备通信,和/或与使得该计算机设备12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(i/o)接口22进行。并且,计算机设备12还可以通过网络适配器20与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机设备12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机设备12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、raid系统、磁带驱动器以及数据备份存储系统等。
[0211]
处理单元16通过运行存储在系统存储器28中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的手掌的深度检测方法。
[0212]
实施例五
[0213]
本发明实施例五还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述手掌的深度检测方法的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
[0214]
其中,计算机可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd

rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件
中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
[0215]
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1