标记点的识别方法、装置、设备及存储介质与流程

文档序号:19933290发布日期:2020-02-14 22:16阅读:364来源:国知局
标记点的识别方法、装置、设备及存储介质与流程

本发明涉及动作捕捉技术领域,尤其涉及标记点的识别方法、装置、设备及存储介质。



背景技术:

目前,在虚拟现实(virtualreality,vr)游戏或一些体感游戏中,动作捕捉技术有着广泛的应用。所谓动作捕捉,是指在运动物体的关键部位设置跟踪器(如反光标记点),通过捕捉跟踪器位置,再经过计算机处理后得到三维空间坐标的数据。当数据被计算机识别后,可以应用在动画制作,步态分析,生物力学,人机工程等领域。

在现有的光学运动捕捉系统中,一般通过捕捉反光标记点的运动轨迹以实现目标对象的运动姿态识别与轨迹跟踪。在此过程中,光学运动捕捉系统需要依赖标记点投射到周围两个以上相机的像素点的二维坐标,根据这些二维坐标计算出标记点的三维位置坐标,具体是通过相机的姿态和像素点的二维坐标,计算出投影轨迹,如果有两条轨迹交叉,这个交叉点便是标记点的位置,所有两个像素点的组合都需要计算它们的投影轨迹是否有交叉,像素点的数量越多,所需的计算量也就越大。如此存在的问题是:当标记点数量或相机数量较多时,由于像素点的数量增大,计算每个标记点的三维位置坐标会变得非常耗时。



技术实现要素:

本发明的主要目的在于提出一种标记点的识别方法、装置、设备及存储介质,旨在提高运动捕捉标记点的识别效率,减少计算耗时。

为实现上述目的,本发明提供一种标记点的识别方法,所述方法包括如下步骤:

获取摄像机采集到的物体运动图像,将所述物体运动图像中的像素点从0至n-1进行编号,其中n为所述物体运动图像中的像素点的个数;

调用图形处理器,在所述图像处理器中创建n-1个线程组;

在创建的第i个线程组中,通过并行执行的线程,判断所述物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉,其中,i,j为像素点的编号,1≤i≤n-1,0≤j<i;

若所述物体运动图像中的像素点i与像素点j之间存在轨迹交叉,则获取交叉点的位置,将所述交叉点的位置作为运动捕捉标记点的位置。

可选地,所述在创建的第i个线程组中,通过并行执行的线程,判断所述物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉的步骤包括:

在第i个线程组中创建i个并行执行的线程;

通过所述i个并行执行的线程,判断所述物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉。

可选地,所述通过所述i个并行执行的线程,判断所述物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉的步骤包括:

在每个并行执行的线程中,从所述第i个线程组的共享内存中读取所述像素点i的坐标数据及对应的相机姿态,并从预设的全局内存中读取所述像素点j的坐标数据及对应的相机姿态;

根据从所述共享内存中读取到的所述像素点i的坐标数据及对应的相机姿态,以及从所述全局内存中读取到的所述像素点j的坐标数据及对应的相机姿态,判断所述像素点i与所述像素点j之间是否存在轨迹交叉。

可选地,所述通过并行执行的线程,判断所述物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉的步骤之前,还包括:

从所述全局内存中读取所述像素点i的坐标数据及对应的相机姿态;

将从所述全局内存中读取到的所述像素点i的坐标数据及对应的相机姿态写入所述第i个线程组的共享内存中。

可选地,所述在创建的第i个线程组中,通过并行执行的线程,判断所述物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉的步骤之前,还包括:

分别在每个线程组的共享内存中定义一个初始值为0的原子变量;

所述获取交叉点的位置,将所述交叉点的位置作为运动捕捉标记点的位置的步骤之后,还包括:

将所述第i个线程组的共享内存中定义的原子变量的值加一。

此外,为实现上述目的,本发明还提供一种标记点的识别装置,所述装置包括:

获取模块,用于获取摄像机采集到的物体运动图像,将所述物体运动图像中的像素点从0至n-1进行编号,其中n为所述物体运动图像中的像素点的个数;

创建模块,用于调用图形处理器,在所述图像处理器中创建n-1个线程组;

判断模块,用于在创建的第i个线程组中,通过并行执行的线程,判断所述物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉,其中,i,j为像素点的编号,1≤i≤n-1,0≤j<i;

识别模块,用于若所述物体运动图像中的像素点i与像素点j之间存在轨迹交叉,则获取交叉点的位置,将所述交叉点的位置作为运动捕捉标记点的位置。

此外,为实现上述目的,本发明还提供一种标记点的识别设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的标记点的识别程序,所述标记点的识别程序被所述处理器执行时实现如上所述的标记点的识别方法的步骤。

此外,为实现上述目的,本发明还提供一种存储介质,所述存储介质上存储有标记点的识别程序,所述标记点的识别程序被处理器执行时实现如上所述的标记点的识别方法的步骤。

本发明获取摄像机采集到的物体运动图像,将所述物体运动图像中的像素点从0至n-1进行编号,其中n为所述物体运动图像中的像素点的个数;调用图形处理器,在所述图像处理器中创建n-1个线程组;在创建的第i个线程组中,通过并行执行的线程,判断所述物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉,其中,i,j为像素点的编号,1≤i≤n-1,0≤j<i;若所述物体运动图像中的像素点i与像素点j之间存在轨迹交叉,则获取交叉点的位置,将所述交叉点的位置作为运动捕捉标记点的位置。本发明通过将图形处理器划分为多个线程组,每个线程组用于计算物体运动图像中的一个像素点与所有编号更小的像素点之间是否存在轨迹交叉,由于每个线程组中的线程可以并行执行计算,因此能够快速计算出运动捕捉标记点的位置,在像素点数量较多时,相比于仅通过cpu进行计算,本发明能够提高运动捕捉标记点的识别效率,减少计算耗时。

附图说明

图1是本发明实施例方案涉及的硬件运行环境的设备结构示意图;

图2为本发明标记点的识别方法第一实施例的流程示意图;

图3为本发明标记点的识别装置一实施例的模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,图1是本发明实施例方案涉及的硬件运行环境的设备结构示意图。

本发明实施例标记点的识别设备可以是计算机或服务器。

如图1所示,该设备可以包括:处理器1001,例如cpu,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatilememory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

本领域技术人员可以理解,图1中示出的设备结构并不构成对设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及标记点的识别程序。

在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端(用户端),与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的标记点的识别程序,并执行下述标记点的识别方法各个实施例中的操作。

基于上述硬件结构,提出本发明标记点的识别方法各个实施例。

参照图2,图2为本发明标记点的识别方法第一实施例的流程示意图,方法包括:

步骤s10,获取摄像机采集到的物体运动图像,将物体运动图像中的像素点从0至n-1进行编号,其中n为物体运动图像中的像素点的个数;

在现有的光学运动捕捉系统中,一般通过捕捉反光标记点(是指表面覆盖有特殊反光材料的标记物,常见的形状有球形和半球形等,常用于运动对象的捕捉)的运动轨迹以实现目标对象的运动姿态识别与轨迹跟踪。为快速识别出标记点的位置,本实施例提出一种基于图形处理器(graphicsprocessingunit,gpu)进行标记点识别的方法。

在本实施例中,以执行标记点识别方法的设备为服务器为例进行说明。首先,可以由动捕空间中部署的摄像机采集物体运动图像并发送至服务器,服务器接收摄像机采集到的物体运动图像,并将该物体运动图像中的像素点从0至n-1进行编号,其中n为物体运动图像中的像素点的个数,即,分别将每个像素点编号为0,1,…,n-1。

步骤s20,调用图形处理器,在图像处理器中创建n-1个线程组;

在对像素点进行编号后,服务器调用图形处理器gpu,并在该图形处理器中创建n-1个线程组(由线程组成的管理线程的类),其中每个线程组用于计算物体运动图像中的一个像素点(编号为0的像素点除外)与所有编号小于该像素点的像素点之间是否存在轨迹交叉。

步骤s30,在创建的第i个线程组中,通过并行执行的线程,判断物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉,其中,i,j为像素点的编号,1≤i≤n-1,0≤j<i;

具体地,服务器可以在第1个线程组中,通过并行执行的线程,计算物体运动图像中编号为1的像素点与编号为0的像素点之间是否存在轨迹交叉,在第2个线程组中,通过并行执行的线程,计算物体运动图像中编号为2的像素点与编号为0、1的像素点之间是否存在轨迹交叉,……,以此类推,可以计算出物体运动图像中的所有像素点的两两交叉情况。

需要说明的是,相对于中央处理器cpu,gpu的优势在于可以产生大量的线程做并行计算,从而减少总计算耗时。

若物体运动图像中的像素点i与像素点j之间存在轨迹交叉,则执行步骤s40,获取交叉点的位置,将交叉点的位置作为运动捕捉标记点的位置。

当服务器判断物体运动图像中的像素点i与像素点j之间存在轨迹交叉时,获取交叉点的位置,将该交叉点的位置作为运动捕捉标记点的位置,由此实现了对物体运动图像中的标记点进行识别。其中,交叉点的位置可以以三维坐标的方式进行表示,获取交叉点的三维位置坐标的具体方式可以参照相关现有技术,此处不做赘述。

在本实施例中,通过将图形处理器划分为多个线程组,每个线程组用于计算物体运动图像中的一个像素点与所有编号更小的像素点之间是否存在轨迹交叉,由于每个线程组中的线程可以并行执行计算,因此能够快速计算出运动捕捉标记点的位置,在像素点数量较多时,相比于仅通过cpu进行计算,本实施例能够提高运动捕捉标记点的识别效率,减少计算耗时。

进一步地,基于本发明标记点的识别方法第一实施例,提出本发明标记点的识别方法第二实施例。

在本实施例中,上述步骤s30可以包括:在第i个线程组中创建i个并行执行的线程;通过i个并行执行的线程,判断物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉。

具体地,服务器可以在第1个线程组中创建1个线程,通过执行该线程判断物体运动图像中的像素点1与像素点0之间是否存在轨迹交叉,在第2个线程组中创建2个线程,通过这2个线程分别判断物体运动图像中的像素点2与像素点0、像素点1之间是否存在轨迹交叉,……,以此类推,可以计算出物体运动图像中的所有像素点的两两交叉情况。

进一步地,通过i个并行执行的线程,判断物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉的步骤可以进一步包括:在每个并行执行的线程中,从第i个线程组的共享内存中读取像素点i的坐标数据及对应的相机姿态,并从预设的全局内存中读取像素点j的坐标数据及对应的相机姿态;根据从共享内存中读取到的像素点i的坐标数据及对应的相机姿态,以及从全局内存中读取到的像素点j的坐标数据及对应的相机姿态,判断像素点i与像素点j之间是否存在轨迹交叉。

对于gpu中的线程组,其会有少量的共享内存,该共享内存仅能够被该线程组中的线程访问,而全局内存可以被所有线程组中的线程访问。共享内存和全局内存的差异在于,共享内存读写速度更快,可以让同一个线程组之中的线程做数据交互,但是容量较小;所有数据只能存储在全局内存,计算时才能暂时使用共享内存。

基于上述特点,对于一个线程组,由于在判断物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉时,其中的每个线程都需要用到像素点i的坐标数据及对应的相机姿态,因此该像素点i的坐标数据及对应的相机姿态可以首先写入该线程组的共享内存,以供每个线程直接从共享内存中读取,从而提高数据读取效率。

具体实施时,在第i个线程组中,服务器在每个并行执行的线程中,从线程组i的共享内存中读取像素点i的坐标数据及对应的相机姿态,并从预设的全局内存中读取像素点j的坐标数据及对应的相机姿态,然后,根据从共享内存中读取到的像素点i的坐标数据及对应的相机姿态,以及从全局内存中读取到的像素点j的坐标数据及对应的相机姿态,判断像素点i与像素点j之间是否存在轨迹交叉。由于像素点i的坐标数据及对应的相机姿态是直接从共享内存中读取的,因此进一步提高了计算效率,减少了计算耗时。

进一步地,通过并行执行的线程,判断物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉的步骤之前,还可以包括:从全局内存中读取像素点i的坐标数据及对应的相机姿态;将从全局内存中读取到的像素点i的坐标数据及对应的相机姿态写入第i个线程组的共享内存中。

在本实施例中,在计算物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉之前,服务器可以首先从全局内存中读取像素点i的坐标数据及对应的相机姿态,然后将读取到的像素点i的坐标数据及对应的相机姿态写入第i个线程组的共享内存中。如此为后续直接从共享内存中读取像素点i的坐标数据及对应的相机姿态提供了前提保证。

进一步地,基于本发明标记点的识别方法第一、第二实施例,提出本发明标记点的识别方法第三实施例。

在本实施例中,在上述步骤s30之前,还可以包括:分别在每个线程组的共享内存中定义一个初始值为0的原子变量;对应地,在获取交叉点的位置,将交叉点的位置作为运动捕捉标记点的位置的步骤之后,还包括:将第i个线程组的共享内存中定义的原子变量的值加一。

其中,原子变量指的是同一时刻只允许一个线程对其进行操作的变量,原子变量可以在多线程同时写入的情况下保证数据的准确性。在本实施例中,原子变量用于记录第i个线程组中计算得到的运动捕捉标记点的数量,由于原子变量的读写非常耗时,所以可以在共享内存中定义原子变量,以提高读写效率。

具体地,可以在每个线程组的共享内存中定义一个初始值为0的原子变量,当服务器每次判定物体运动图像中的像素点i与像素点j之间存在轨迹交叉时,获取交叉点的位置,将交叉点的位置作为运动捕捉标记点的位置,并将第i个线程组的共享内存中定义的原子变量的值加一。

通过上述方式,实现了对运动捕捉标记点的位置和数量进行记录。

本发明还提供一种标记点的识别装置。参照图3,图3为本发明标记点的识别装置一实施例的模块示意图。本实施例中,所述标记点的识别装置包括:

获取模块,用于获取摄像机采集到的物体运动图像,将所述物体运动图像中的像素点从0至n-1进行编号,其中n为所述物体运动图像中的像素点的个数;

创建模块,用于调用图形处理器,在所述图像处理器中创建n-1个线程组;

判断模块,用于在创建的第i个线程组中,通过并行执行的线程,判断所述物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉,其中,i,j为像素点的编号,1≤i≤n-1,0≤j<i;

识别模块,用于若所述物体运动图像中的像素点i与像素点j之间存在轨迹交叉,则获取交叉点的位置,将所述交叉点的位置作为运动捕捉标记点的位置。

进一步地,所述判断模块还用于:

在第i个线程组中创建i个并行执行的线程;

通过所述i个并行执行的线程,判断所述物体运动图像中的像素点i与像素点j之间是否存在轨迹交叉。

进一步地,所述判断模块还用于:

在每个并行执行的线程中,从所述第i个线程组的共享内存中读取所述像素点i的坐标数据及对应的相机姿态,并从预设的全局内存中读取所述像素点j的坐标数据及对应的相机姿态;

根据从所述共享内存中读取到的所述像素点i的坐标数据及对应的相机姿态,以及从所述全局内存中读取到的所述像素点j的坐标数据及对应的相机姿态,判断所述像素点i与所述像素点j之间是否存在轨迹交叉。

进一步地,所述装置还包括:

读取模块,用于从所述全局内存中读取所述像素点i的坐标数据及对应的相机姿态;

写入模块,用于将从所述全局内存中读取到的所述像素点i的坐标数据及对应的相机姿态写入所述第i个线程组的共享内存中。

进一步地,所述装置还包括:

定义模块,用于分别在每个线程组的共享内存中定义一个初始值为0的原子变量;

记录模块,用于若所述物体运动图像中的像素点i与像素点j之间存在轨迹交叉,则将所述第i个线程组的共享内存中定义的原子变量的值加一。

上述各程序模块实现的方法及有益效果可参照本发明标记点的识别方法实施例,此处不再赘述。

本发明还提供一种存储介质。

本发明存储介质上存储有标记点的识别程序,所述标记点的识别程序被处理器执行时实现如上所述的标记点的识别方法的步骤。

其中,在所述处理器上运行的标记点的识别程序被执行时所实现的方法可参照本发明标记点的识别方法各个实施例,此处不再赘述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1