首页 / 专利库 / 信号处理 / 稀疏信号 / 基于星型网络结构的三维场景数据获取方法及系统

基于星型网络结构的三维场景数据获取方法及系统

阅读:632发布:2020-05-08

专利汇可以提供基于星型网络结构的三维场景数据获取方法及系统专利检索,专利查询,专利分析的服务。并且本公开公开了基于星型网络结构的三维场景数据获取方法及系统,它首先采用一种基于NTP的网络时间同步系统让各Kinect 节点 和中心 服务器 同步对时,然后借助Winsock通信技术让中心服务器给各 传感器 节点下达传输数据的指令,各节点利用 深度图 像 压缩技术和传输控制协议对所采集的数据进行压缩和传输,最后中心服务器采用内存池和多线程的技术接收各节点发来的数据并协同处理。,下面是基于星型网络结构的三维场景数据获取方法及系统专利的具体信息内容。

1.基于星型网络结构的三维场景数据获取方法,其特征是,包括:
构建一个以中心服务器为根节点且以各个计算机终端为叶子节点的星型网络拓扑;中心服务器与各个计算机终端连接,每个计算机终端与一个Kinect传感器连接,每个计算机终端和其所相连的Kinect传感器组成一个Kinect客户端;基于网络时间协议的客户端/服务器工作模式让每个Kinect客户端与中心服务器对时同步,进而使得所有Kinect客户端在统一的时间标准下工作;
中心服务器向各个Kinect客户端下发数据采集和传输指令;每个Kinect客户端在统一的时间标准下采集图像数据并对所采集的图像数据进行压缩,对压缩后的每一图像数据附加一个全局的时间戳,结合传输控制协议将压缩后的数据传至中心服务器;
中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,使用内存池方式来接收不同Kinect客户端的图像数据,并将数据解压缩,实时显示各Kinect客户端获取的图像信息。
2.如权利要求1所述的方法,其特征是,基于网络时间协议的客户端/服务器工作模式让每个Kinect客户端与中心服务器对时同步,进而使得所有Kinect客户端在统一的时间标准下工作的具体步骤为:
步骤(1-1):同一局域网内,采用网络时间协议NTP的客户端/服务器模式,中心服务器作为服务端,与各个Kinect客户端作为客户端;Kinect客户端A发送一个NTP报文给中心服务器,所述NTP报文携有离开Kinect客户端A时的时间戳T1;
步骤(1-2):当所述NTP报文到达中心服务器时,中心服务器在时间戳T1后面加上时间戳T2;
步骤(1-3):中心服务器将所述NTP报文反馈给Kinect客户端A,当所述NTP报文离开中心服务器时,中心服务器在时间戳T2后面再加上时间戳T3;
步骤(1-4):当Kinect客户端A接收到所述NTP报文时,Kinect客户端A在时间戳T3后面再加上本地时间戳T4;
步骤(1-5):计算NTP报文的往返时延delay:
delay=(T4-T1)-(T3-T2)
计算Kinect客户端A的相对时间差offset:
offset=((T2-T1)+(T3-T4))/2
步骤(1-6):Kinect客户端A根据往返时延和相对时间差,计算Tm来同步自己的系统时钟,使Kinect客户端系统时钟与中心服务器的时钟保持同步;
Tm=Tn+offset-delay
其中,Tm表示同步后的系统时间,Tn表示同步前的系统时间。
3.如权利要求1所述的方法,其特征是,中心服务器向各个Kinect客户端下发数据采集和传输指令之前,还包括建立中心服务器和各个Kinect客户端之间的TCP连接的具体步骤。
4.如权利要求3所述的方法,其特征是,建立起中心服务器和各个Kinect客户端之间的TCP连接的具体步骤为:
步骤(2-1):采用Winsock通信所具有的C/S体系结构设计,中心服务器为服务端,各个连接Kinect客户端为客户端;在服务端和客户端均调用WSAStartup函数初始化Winsock动态链接库,并调用Socket函数来建立套接字,定义Socket函数使用TCP/IP通信协议;
步骤(2-2):在服务端调用bind函数为步骤(2-1)所定义的Socket函数绑定一个IP地址和端口;
步骤(2-3):服务端Socket对象绑定完成之后,调用listen函数使服务端的Socket进入监听状态,设定与服务端的最大连接数;
步骤(2-4):客户端Socket使用connect函数提出与服务端Socket建立连接的申请,服务端则调用accept函数接收客户端的连接请求,服务端为每个连接新开线程,进而服务端和客户端建立连接。
5.如权利要求1所述的方法,其特征是,中心服务器向各个Kinect客户端下发数据采集和传输指令的具体步骤为:
步骤(3-1):服务端调用send函数向各Kinect客户端发送指令;
步骤(3-2):Kinect客户端调用recv函数,在未接收到数据时recv函数一直处于阻塞状态,直至接收到服务端发来的指令,recv函数开始继续执行;
步骤(3-3):Kinect客户端收到指令后,初始化Kinect传感器,并调用
GetDefaultKinectSensot函数和Open函数启动Kinect传感器;
步骤(3-4):启动Kinect传感器后,客户端调用get_DepthFrameSource函数获取深度图像数据,调用get_ColorFrameSource函数获彩色图像数据,调用get_BodyIndexFrameSouce函数获取人体索引数据,人体索引数据即人体在深度图像中的位置,调用get_BodyFrameSource函数获取人体骨架数据;
步骤(3-5):客户端调用OpenReader函数打开深度图像数据、彩色图像数据、人体索引数据和人体骨架数据的读取器;客户端调用recv函数阻塞等待服务端发送的采集数据指令;
步骤(3-6):服务端发送采集数据指令给客户端,阻塞等待客户端发来的数据,客户端接收数据后调用AcquireLatestFrame函数获取各数据帧。
6.如权利要求1所述的方法,其特征是,每个Kinect客户端在统一的时间标准下采集图像数据并对所采集的图像数据进行压缩的具体步骤为:
步骤(4-1):Kinect客户端顺序调用get_FrameDescription函数、get_Width函数和get_Height函数获取各数据帧的像素信息,调用GetLocalTime函数获取同步后的本地时间戳;
步骤(4-2):服务端接收到数据包后,接收采集的RGB-D图像数据;
步骤(4-3):客户端调用AccessUnderlyingBuffer函数访问图像数据的缓存,对数据进行压缩处理;
步骤(4-4):对客户端采集的每一帧图像数据进行小波正交变换,对长度为N的原始数据x,以小波基Ψ=[Ψ1,Ψ2,...ΨN]的形式展开,即:
其中, 是一个N维矩阵, 是一个N×N的矩阵;
因此,原始数据x用小波基Ψ下的一组稀疏系数y=[y1,y2,…,yN]T,
将稀疏系数y中的分量从大到小进行排序,保留排序靠前的K个分量,将剩余N-K个分量置零;进而得到了x的稀疏近似表示,即原始信号x由小波基Ψ下的K稀疏系数y=[y1,y2,…,yN]T来表示,其中,y中不为零分量的数量小于等于K个;
步骤(4-5):在客户端,将由步骤(4-4)得到的稀疏化数据x,投影到观测基Φ=[Φ1,Φ2,…,ΦM]T, 得到x的线性测量s,即
s=Φx=ΦΨy=Ay
其中,传感矩阵A=ΦΨ是一个M×N的矩阵,即
7.如权利要求1所述的方法,其特征是,对压缩后的每一帧图像数据附加一个全局的时间戳,结合传输控制协议将压缩后的数据传至中心服务器的具体步骤为:
步骤(5-1):各客户端对压缩后的每一帧图像数据附加一个全局的时间戳,将压缩后的数据发送至服务端,并使用select函数使客户端的非阻塞等待服务端的结束指令,以不阻碍每一帧数据的发送;
步骤(5-2):Kinect客户端调用release函数释放帧数据。
8.如权利要求1所述的方法,其特征是,中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,使用内存池方式来接收不同Kinect客户端的图像数据,并将数据解压缩,实时显示各Kinect客户端获取的图像信息的具体步骤为:
步骤(6-1):中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,创建内存池,在服务端申请一连续的内存空间,所述内存空间可容纳设定数量的对象;
步骤(6-2):服务端接收并使用贪婪SAMP算法解压各Kinect客户端采集的数据,即根据压缩信号s和传感矩阵A,估计信号x的稀疏表示系数 以重构原始信号
步骤(6-3):首先从压缩数据包中得到压缩信号s和传感矩阵A,设定步长B;
步骤(6-4):设定初始值,令残差r0=s,重建信号 支撑集 支撑集大小L=B,迭代次数t=1;
步骤(6-5):计算u=abs(ATrt-1),即计算uj=,其中uj代表u的第j个分量,选择u中L个最大值,并将L个最大值对应A的列序号构成集合Bk;<·,·>表示求向量的内积,abs(·)表示求绝对值;
步骤(6-6):计算候选集Ck=Fk-1∪Bk,
步骤(6-7):求s=Atyt的最小二乘解:
步骤(6-8):从 中选出绝对值最大的L个分量,L个分量所对应的A的列记为AtL,L个分量所对应的A的列序号记为集合FtL;
步骤(6-9):更新残差
步骤(6-10):
如果残差rnew=0,则停止迭代,执行步骤(6-11);
如果||rnew||2≥||rt-1||2,更新步长L=L+B,返回步骤(6-5)继续迭代;
如果rnew≠0且||rnew||2<||rt-1||2,则Ft=FtL,rt=rnew,t=t+1;
如果 则停止迭代,执行步骤(6-11);否则,返回步骤(6-5)继续迭代;
步骤(6-11):重构 在FtL所对应的索引项的值为 其余项为零;
经过循环迭代,求出信号X近似稀疏系数 利用稀疏矩阵公式 求出初始信号X的近似值 在服务端重构信号,恢复客户端节点缓冲区获取的每一帧初始图像数据;
步骤(6-12):从内存池中为压缩后的数据分配内存节点,并将所述内存节点从内存池的链表结构中剔除;
步骤(6-13):借助OpenCV将所述内存节点的数据转为Mat结构,并调用imshow函数实时显示各传感器节点获取的图像信息,为防止多线程使用imshow函数冲突,在先调用cvNameWindow函数;对内存节点内的数据做相应处理,处理完每帧数据后释放所述内存节点,所述内存节点重新加入空闲内存节点链表。
9.基于星型网络结构的三维场景数据获取系统,其特征是,包括:中心服务器和若干个Kinect客户端;
构建一个以中心服务器为根节点且以各个计算机终端为叶子节点的星型网络拓扑;中心服务器与各个计算机终端连接,每个计算机终端与一个Kinect传感器连接,每个计算机终端和其所相连的Kinect传感器组成一个Kinect客户端;基于网络时间协议的客户端/服务器工作模式让每个Kinect客户端与中心服务器对时同步,进而使得所有Kinect客户端在统一的时间标准下工作;
中心服务器向各个Kinect客户端下发数据采集和传输指令;每个Kinect客户端在统一的时间标准下采集图像数据并对所采集的图像数据进行压缩,对压缩后的每一帧图像数据附加一个全局的时间戳,结合传输控制协议将压缩后的数据传至中心服务器;
中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,使用内存池方式来接收不同Kinect客户端的图像数据,并将数据解压缩,实时显示各Kinect客户端获取的图像信息。

说明书全文

基于星型网络结构的三维场景数据获取方法及系统

技术领域

[0001] 本公开涉及基于星型网络结构的三维场景数据获取方法及系统。

背景技术

[0002] 本部分的陈述仅仅是提高了与本公开相关的背景技术,并不必然构成现有技术
[0003] 近年来,RGB-D图像获取设备(例如Kinect如HoloLen)得到了快速发展。利用RGB-D图像获取设备可以获取现实场景中的更多空间信息,进而可借助计算机视觉人工智能技术可以对这些信息进行融合、提取等处理。
[0004] 空间信息的获取对复杂三维场景的重建,特别是三维人体的重建,具有十分关键的作用。KinectFusion算法是通过移动深度相机即可实时重建出三维场景。但对于人体重建,该方法有较大的局限性,如要求被采集人体固定不动或者保持大致刚性的姿态。Hao Li等人将由KinectFusion系统重建的模型与数据库中已采集好的完整光滑人体模型进行非刚性变形,从而得到一个完整的人体模型。最近,DynamicFusion系统将KinectFusion工作推广到动态物体重建,例如,有部分遮挡的运动人脸、人体等,但这种方法在用设备获取物体信息时要求物体运动速度较慢。Helten等人根据两个Kinect顺序采集到的深度信息估计出采集人的个性化人体模型,然后用该模型跟踪深度相机所拍摄对象的实时姿态变化,但该系统在采集人背对镜头,或当身体的某些部位在Kinect的采集范围之外时会失败。
[0005] 在一个复杂三维场景中,特别是包含了多个人体的大规模三维场景,重建的关键在于多视的RGB-D图像的获取。对于更为复杂的动态场景,其重建过程则需要对多源时空数据进行实时的获取和进一步融合。但是,目前为止,还没有一个能够全方位时序化的多源深度图像采集系统。发明内容
[0006] 为了解决现有技术的不足,本公开提供了基于星型网络结构的三维场景数据获取方法及系统,其构建了一个面向复杂场景数据获取的分布式网络系统,实时感知和收集复杂三维场景的多视角RGB-D图像数据,并解决了多源RGB-D图像获取的时间一致性问题。
[0007] 第一方面,本公开提供了基于星型网络结构的三维场景数据获取方法;
[0008] 基于星型网络结构的三维场景数据获取方法,包括:
[0009] 中心服务器向各个Kinect客户端下发数据采集和传输指令;每个Kinect客户端在统一的时间标准下采集图像数据并对所采集的图像数据进行压缩,对压缩后的每一图像数据附加一个全局的时间戳,结合传输控制协议将压缩后的数据传至中心服务器;
[0010] 中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,使用内存池方式来接收不同Kinect客户端的图像数据,并将数据解压缩,实时显示各Kinect客户端获取的图像信息。
[0011] 作为可能的一些实施方式,所述方法还包括:构建一个以中心服务器为根节点且以各个计算机终端为叶子节点的星型网络拓扑;中心服务器与各个计算机终端连接,每个计算机终端与一个Kinect传感器连接,每个计算机终端和其所相连的Kinect传感器组成一个Kinect客户端;基于网络时间协议的客户端/服务器工作模式让每个Kinect客户端与中心服务器对时同步,进而使得所有Kinect客户端在统一的时间标准下工作。
[0012] 作为可能的一些实施方式,基于网络时间协议的客户端/服务器工作模式让每个Kinect客户端与中心服务器对时同步,进而使得所有的Kinect客户端在统一的时间标准下工作的具体步骤为:
[0013] 步骤(1-1):同一局域网内,采用网络时间协议NTP的客户端/服务器模式,中心服务器作为服务端,与Kinect客户端作为客户端;Kinect客户端A发送一个NTP报文给中心服务器,所述NTP报文携有离开Kinect客户端A时的时间戳T1;
[0014] 步骤(1-2):当所述NTP报文到达中心服务器时,中心服务器在时间戳T1后面加上时间戳T2;
[0015] 步骤(1-3):中心服务器将所述NTP报文反馈给Kinect客户端A,当所述NTP报文离开中心服务器时,中心服务器在时间戳T2后面再加上时间戳T3;
[0016] 步骤(1-4):当Kinect客户端A接收到所述NTP报文时,Kinect客户端A在时间戳T3后面再加上本地时间戳T4;
[0017] 步骤(1-5):计算NTP报文的往返时延delay:
[0018] delay=(T4-T1)-(T3-T2)
[0019] 计算Kinect客户端A的相对时间差offset:
[0020] offset=((T2-T1)+(T3-T4))/2
[0021] 步骤(1-6):Kinect客户端A根据往返时延和相对时间差,计算Tm来同步自己的系统时钟,使Kinect客户端系统时钟与中心服务器的时钟保持同步。
[0022] Tm=Tn与offset-delay
[0023] 其中,Tm表示同步后的系统时间,Tn表示同步前的系统时间;
[0024] 作为可能的一些实施方式,中心服务器向各个Kinect客户端下发数据采集和传输指令之前,还包括建立中心服务器和各个Kinect客户端之间的TCP连接的具体步骤。
[0025] 作为可能的一些实施方式,建立起中心服务器和各个Kinect客户端之间的TCP连接的具体步骤为:
[0026] 步骤(2-1):采用Winsock通信所具有的C/S体系结构设计,中心服务器为服务端,各个连接Kinect客户端为客户端;在服务端和客户端均调用WSAStartup函数初始化Winsock动态链接库,并调用Socket函数来建立套接字,定义Socket函数使用TCP/IP通信协议;
[0027] 步骤(2-2):在服务端调用bind函数为步骤(2-1)所定义的Socket函数绑定一个IP地址和端口;
[0028] 步骤(2-3):服务端Socket对象绑定完成之后,调用listen函数使服务端的Socket进入监听状态,设定与服务端的最大连接数;
[0029] 步骤(2-4):客户端Socket使用connect函数提出与服务端Socket建立连接的申请,服务端则调用accept函数接收客户端的连接请求,服务端为每个连接新开线程,进而服务端和客户端建立连接。
[0030] 作为可能的一些实施方式,中心服务器向各个Kinect客户端下发数据采集和传输指令的具体步骤为:
[0031] 步骤(3-1):服务端调用send函数向各Kinect客户端发送指令;
[0032] 步骤(3-2):Kinect客户端调用recv函数,在未接收到数据时recv函数一直处于阻塞状态,直至接收到服务端发来的指令,recv函数开始继续执行;
[0033] 步骤(3-3):Kinect客户端收到指令后,初始化Kinect传感器,并调用GetDefaultKinectSensot函数和Open函数启动Kinect传感器;
[0034] 步骤(3-4):启动Kinect传感器后,客户端调用get_DepthFrameSource函数获取深度图像数据,调用get_ColorFrameSource函数获彩色图像数据,调用get_BodyIndexFrameSouce函数获取人体索引数据,人体索引数据即人体在深度图像中的位置,调用get_BodyFrameSource函数获取人体骨架数据;
[0035] 步骤(3-5):客户端调用OpenReader函数打开深度图像数据、彩色图像数据、人体索引数据和人体骨架数据的读取器;客户端调用recv函数阻塞等待服务端发送的采集数据指令;
[0036] 步骤(3-6):服务端发送采集数据指令给客户端,阻塞等待客户端发来的数据,客户端接收数据后调用AcquireLatestFrame函数获取各数据帧。
[0037] 作为可能的一些实施方式,每个Kinect客户端在统一的时间标准下采集图像数据并对所采集的图像数据进行压缩的具体步骤为:
[0038] 步骤(4-1):Kinect客户端顺序调用get_FrameDescription函数、get_Width函数和get_Height函数获取各数据帧的像素信息,调用GetLocalTime函数获取同步后的本地时间戳;
[0039] 步骤(4-2):服务端接收到数据包后,接收采集的RGB-D图像数据;
[0040] 步骤(4-3):客户端调用AccessUnderlyingBuffer函数访问图像数据的缓存,对数据进行压缩处理;
[0041] 步骤(4-4):对客户端采集的每一帧图像数据进行小波正交变换,对长度为N的原始数据x,以小波基Ψ=[ψ1,Ψ2,...ψN]的形式展开,即:
[0042]
[0043] 其中, 是一个N维矩阵, 是一个N×N的矩阵;
[0044] 因此,原始数据x用小波基Ψ下的一组稀疏系数
[0045] 将稀疏系数y中的分量从大到小进行排序,保留排序靠前的K个分量,将剩余N-K个分量置零;进而得到了x的稀疏近似表示,即原始信号x由小波基Ψ下的K稀疏系数y=[y1,y2,…,yN]T来表示,其中,y中不为零分量的数量小于等于K个;
[0046] 步骤(4-5):在客户端,将由步骤(4-4)得到的稀疏化数据x,投影到观测基得到x的线性测量s,即
[0047] s=Φx=ΦΨy=Ay
[0048] 其中,传感矩阵A=ΦΨ是一个M×N的矩阵,即
[0049] 由于S仅包含了M个分量,且M<<N,上述方法达到了压缩的效果。s即为X的压缩信号
[0050] 为保证可以根据压缩信号重构原始信号X的K稀疏表示,Φ需要满足K阶有限等距准则(Restricted Isometry Property,RIP)。实际中,一般采用独立同分布的随机高斯矩阵作为观测基。
[0051] 作为一些可能的实现方式,对压缩后的每一帧图像数据附加一个全局的时间戳,结合传输控制协议将压缩后的数据传至中心服务器的具体步骤为:
[0052] 步骤(5-1):各客户端对压缩后的每一帧图像数据附加一个全局的时间戳,将压缩后的数据发送至服务端,并使用select函数使客户端的非阻塞等待服务端的结束指令,以不阻碍每一帧数据的发送;
[0053] 步骤(5-2):Kinect客户端调用release函数释放帧数据。
[0054] 作为一些可能的实现方式,中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,使用内存池方式来接收不同Kinect客户端的图像数据,并将数据解压缩,实时显示各Kinect客户端获取的图像信息的具体步骤为:
[0055] 步骤(6-1):中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,创建内存池,在服务端申请一连续的内存空间,所述内存空间可容纳设定数量的对象;
[0056] 步骤(6-2):服务端接收并使用贪婪SAMP算法解压各Kinect客户端采集的数据,即根据压缩信号s和传感矩阵A,估计信号x的稀疏表示系数 以重构原始信号
[0057] 步骤(6-3):首先从压缩数据包中得到压缩信号s和传感矩阵A,设定步长B;
[0058] 步骤(6-4):设定初始值,令残差r0=s,重建信号 支撑集 支撑集大小L=B,迭代次数t=1;
[0059] 步骤(6-5):计算u=abs(ATrt-1),即计算uj=,其中uj代表u的第j个分量,选择u中L个最大值,并将L个最大值对应A的列序号构成集合Bk;<·,·>表示求向量的内积,abs(·)表示求绝对值;
[0060] 步骤(6-6):计算候选集Ck=Fk-1∪Bk,
[0061] 步骤(6-7):求s=Atyt的最小二乘解:
[0062] 步骤(6-8):从 中选出绝对值最大的L个分量,L个分量所对应的A的列记为AtL,L个分量所对应的A的列序号记为集合FtL;
[0063] 步骤(6-9):更新残差
[0064] 步骤(6-10):
[0065] 如果残差rnew=0,则停止迭代,执行步骤(6-11);
[0066] 如果||rnew||2≥||rt-1||2,更新步长L=L+B,返回步骤(6-5)继续迭代;
[0067] 如果rnew≠0且||rnew||2<||rt-1||2,则Ft=FtL,rt=rnew,t=t+1;
[0068] 如果 则停止迭代,执行步骤(6-11);否则,返回步骤(6-5)继续迭代;
[0069] 步骤(6-11):重构 在FtL所对应的索引项的值为 其余项为零;
[0070] 经过循环迭代,求出信号X近似稀疏系数 利用稀疏矩阵公式 求出初始信号X的近似值 在服务端重构信号,恢复客户端节点缓冲区获取的每一帧初始图像数据;
[0071] 步骤(6-12):从内存池中为压缩后的数据分配内存节点,并将所述内存节点从内存池的链表结构中剔除;
[0072] 步骤(6-13):借助OpenCV将所述内存节点的数据转为Mat结构,并调用imshow函数实时显示各传感器节点获取的图像信息,为防止多线程使用imshow函数冲突,在先调用cvNameWindow函数;对内存节点内的数据做相应处理,处理完每帧数据后释放所述内存节点,所述内存节点重新加入空闲内存节点链表。
[0073] t表示迭代次数,表示最大迭代次数,表示空集合,B为步长,rt表示第t次迭代的残差, 代表第t次迭代中产生的稀疏表示系数的估计,aj代表矩阵A的第j列,[aj]j∈C表示按照索引集合C选出的矩阵A的列向量组成的矩阵,Ft表示第t次迭代中产生的索引(矩阵A的列序号)的集合。
[0074] 基于星型网络结构的三维场景数据获取方法,还包括:
[0075] 中心服务器给各Kinect客户端发送结束采集数据的指令,释放分配的相关资源和接口
[0076] Kinect客户端接收到服务器的结束命令,停止发送数据,释放分配的相关资源和接口,并关闭传感器。
[0077] 第二方面,本公开还提供了基于星型网络结构的三维场景数据获取系统;
[0078] 基于星型网络结构的三维场景数据获取系统,包括:中心服务器和若干个Kinect客户端;
[0079] 中心服务器向各个Kinect客户端下发数据采集和传输指令;每个Kinect客户端在统一的时间标准下采集图像数据并对所采集的图像数据进行压缩,对压缩后的每一帧图像数据附加一个全局的时间戳,结合传输控制协议将压缩后的数据传至中心服务器;
[0080] 中心服务器在每接收到一个Kinect客户端的加入网络请求时,便启动一个线程接收该Kinect客户端传来的数据,使用内存池方式来接收不同Kinect客户端的图像数据,并将数据解压缩,实时显示各Kinect客户端获取的图像信息。
[0081] 与现有技术相比,本公开的有益效果是:使用同步的星型Kinect网络,通过数据压缩和传输控制机制,实现了时序化三维场景数据(特别是人体数据)的实时传输。附图说明
[0082] 构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。
[0083] 图1是本发明的整体架构图;
[0084] 图2是容器图;
[0085] 图3是组件图;
[0086] 图4(a)-图4(d)是NTP同步过程图;
[0087] 图5是基于压缩感知理论的深度数据压缩步骤图;
[0088] 图6是Socket通信和数据传输流程图
[0089] 图7(a)-图7(f)是服务端实时显示各客户端采集的RGB-D图像。

具体实施方式

[0090] 应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。
[0091] 需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
[0092] 网络时间协议Network Time Protocol,NTP;
[0093] 客户端/服务器Client/Server,C/S;
[0094] 稀疏度自适应匹配追踪Sparsity Adaptive Matching Pursuit,SAMP;
[0095] 传输控制协议Transmission Control Protocol,TCP;
[0096] 有限等距准则Restricted Isometry Property,RIP。
[0097] 如图1、图2和图3所示,本发明包括以下步骤:
[0098] 步骤(1):置中心服务器与各传感器设备于同一局域网内,通过NTP(Network Time Protocol)令传感器各节点各自的系统时钟与中心服务器的系统时钟对时,并记录下NTP报文的往返时延,和相对中心服务器的时间差等相关信息;
[0099] 步骤(2):在步骤(1)所构建的网络拓扑结构基础上采用Winsock通信技术的C/S模式,建立起一个中心服务器和各Kinect客户端之间的连接,使其能够互相通信;如图6所示;
[0100] 步骤(3):基于步骤(2),服务器与各Kinect客户端一对多通信,发送指令使各Kinect客户端打开Kinect传感器并初始化Kinect传感器,准备采集数据;
[0101] 步骤(4):服务器发送命令给各Kinect客户端,令各Kinect客户端采集图像数据,服务器阻塞等待接收数据;
[0102] 步骤(5):各Kinect客户端接收命令后,获取各模态数据帧的相关信息和此帧的时间戳,封装成结构体发送给服务器,并访问从Kinect传感器获取的最新帧数据所在缓冲区,应用压缩感知理论对缓冲区内采集的每帧图像数据先进行小波正交变换,进行稀疏表示,得到系数向量y,再由有限等距准(RIP,Restricted Isometry Property)求出观测基Φ,将系数向量y投影到观测基Φ={Φ0,Φ1,...ΦM}上,求出X的压缩信号S(M个线性测量S=Φy),减少缓冲区内数据的大小,达到压缩的目的,如图5所示。
[0103] 步骤(6):沿步骤(2)所建立的连接,结合TCP(Transmission Control Protocol)协议,将压缩后的数据发送至服务器端,并及时释放缓冲区,各客户端非阻塞等待服务器的结束指令;
[0104] 步骤(7):根据步骤(5)发送来的结构体,分析每一种数据帧的缓冲区大小,为接收数据预分配合适内存块,然后解压压缩包得到的压缩信号S及传感矩阵A=ΦΨ,通过贪婪SAMP算法将压缩数据进行逆向多次迭代计算,求出信号X近似稀疏系数 进而利用稀疏矩阵公式 求出初始信号X的近似值 近似重构原始图像数据。然后将解压缩数据保存至创建的内存池内,根据相应的工程需求处理数据并及时释放内存;
[0105] 步骤(8):服务器给各客户端发送结束采集数据的指令;
[0106] 步骤(9):客户端接收到服务器的结束命令,释放相关资源和接口,并关闭传感器;
[0107] 所述步骤(1)的步骤如下:
[0108] 步骤(1-1):同一局域网内,采用NTP的客户端/服务器模式,中心服务器为服务端,其余与各Kinect传感器直接相连的计算机终端为客户端,客户端A发送一个NTP报文给中心服务器,该报文协携有它离开客户端A时的时间戳,记为T1;如图4(a)所示;
[0109] 步骤(1-2):当此报文到达中心服务器时,中心服务器加上自己的时间戳,该时间戳为T2;如图4(b)所示;
[0110] 步骤(1-3):当此报文离开中心服务器时,中心服务器再加上此时的时间戳,记为T3;如图4(c)所示;
[0111] 步骤(1-4):当客户端A接收到该响应报文时,客户端A的本地时间戳为T4;如图4(d)所示;
[0112] 步骤(1-5):根据以上步骤参数,计算NTP报文的往返时延:
[0113] Delay=(T4-T1)-(T3-T2);
[0114] 计算客户端A相对Device的时间差:
[0115] offset=((T2-T1)+(T3-T4));
[0116] 步骤(1-6):Kinect客户端A根据往返时延和相对时间差,计算Tm来同步自己的系统时钟,使Kinect客户端系统时钟与中心服务器的时钟保持同步。
[0117] Tm=Tn+offset-delay
[0118] 其中,Tm表示同步后的系统时间,Tn表示同步前的系统时间。
[0119] 其余各客户端同步方法同上所述步骤。
[0120] 所述步骤(2)的步骤如下:
[0121] 步骤(2-1):采用Winsock通信技术所具有的C/S体系结构设计,中心服务器为服务端,其余各传感器节点为客户端,在服务端和客户端调用WSAStartup函数初始化Winsock动态链接库,并均调用Socket函数来建立套接字,定义Socket使用TCP/IP通信协议。
[0122] 步骤(2-2):在服务端调用bind函数为步骤(2-1)所定义的监听的Socket指定一个IP地址和端口;
[0123] 步骤(2-3):服务端Socket对象绑定完成之后,调用listen函数使服务器的Socket进入监听状态,且可设定最大连接数;
[0124] 步骤(2-4):客户端Socket使用connect函数提出与服务器端Socket建立连接的申请,服务器端则调用accept函数接收客户端的连接请求,并为每个连接新开线程,此后服务器和客户端的连接就此建立;
[0125] 所述步骤(3)的步骤如下:
[0126] 步骤(3-1):经步骤(2)建立连接以后,服务端与各客户端便可相互通信,服务端调用send函数向各客户端发送指令;
[0127] 步骤(3-2):客户端调用recv函数,在未接收到数据时recv函数一直处于阻塞状态,直至接收到服务器发来的指令,程序开始继续执行;
[0128] 步骤(3-3):收到指令后,初始化Kinect,并调用GetDefaultKinectSensot函数和Open函数打开Kinect传感器;
[0129] 步骤(3-4):启动Kinect传感器后,客户端调用get_DepthFrameSource函数获取深度图像数据,调用get_ColorFrameSource函数获彩色图像数据,调用get_BodyIndexFrameSouce函数获取人体索引数据,人体索引数据即人体在深度图像中的位置,调用get_BodyFrameSource函数获取人体骨架数据;
[0130] 步骤(3-5):客户端调用OpenReader函数打开深度图像数据、彩色图像数据、人体索引数据和人体骨架数据的读取器;客户端调用recv函数阻塞等待服务端发送的采集数据指令;
[0131] 步骤(3-6):服务端发送采集数据指令给客户端,阻塞等待客户端发来的数据,客户端接收数据后调用AcquireLatestFrame函数获取各数据帧。
[0132] 所述步骤(4)的步骤如下:
[0133] 服务器发送采集数据指令给客户端,阻塞等待客户端发来的数据,客户端接收数据后调用AcquireLatestFrame函数获取各信息帧;
[0134] 所述步骤(5)的步骤如下:
[0135] 步骤(5-1):Kinect客户端顺序调用get_FrameDescription函数,get_Width()和get_Height函数获取各数据帧的像素信息,调用GetLocalTime函数获取此帧的时间戳,将这些信息融合在结构体中发送给服务器;
[0136] 步骤(5-2):服务端接收到结构体包含的信息后,分析数据信息,准备接收采集的帧数据;
[0137] 步骤(5-3):客户端调用AccessUnderlyingBuffer函数防问图像数据的底层Buffer,可对数据先进行压缩处理;
[0138] 步骤(5-4):首先对客户端节点采集的每一帧图像数据进行小波正交变换,对原始数据X,以小波基Ψ={ψ1,Ψ2,...ψN}展开,即:
[0139]
[0140] 其中, 是一个N维矩阵, 是一个N×N的矩阵;
[0141] 因此,原始数据x用小波基Ψ下的一组稀疏系数
[0142] 将稀疏系数y中的分量从大到小进行排序,保留排序靠前的K个分量,将其余N-K个较小分量置零,近似稀疏化。
[0143] 步骤(5-5):将由步骤(5-4)得到的稀疏化数据x,投影到观测基得到x的线性测量s,即
[0144] s=Φx=ΦΨy=Ay
[0145] 其中,传感矩阵A=ΦΨ是一个M×N的矩阵,即 s即为X的压缩信号。
[0146] 所述步骤(6)的步骤如下:
[0147] 步骤(6-1):各客户端将压缩后的数据发送至服务端,并使用select模型使客户端非阻塞等待服务端的结束指令,以不阻碍每一帧数据的发送;
[0148] 步骤(6-2):调用release函数释放帧数据;
[0149] 所述步骤(7)的步骤如下:
[0150] 步骤(7-1):创建内存池,在服务端申请一块连续的内存空间,该内存空间可容纳一定数量的对象;
[0151] 步骤(7-2):服务端接收并解压各客户端采集的数据,根据步骤(5-5)的参数信息,使用贪婪SAMP算法解压,即根据压缩信号s和传感矩阵A,计算信号稀疏表示稀疏;
[0152] 步骤(7-3):首先从压缩数据包中得到压缩信号s,传感矩阵A(A=ΦΨ),设定步长B;
[0153] 步骤(7-4):设定初始值,令余量r0=y,重建信号 支撑集 支撑集大小L=B,迭代次数t=1;
[0154] 步骤(7-5):计算u=abs[Arrt-1],选择u中L个最大值,将这些值对应A的序列号j构成集合Bk;
[0155] 步骤(7-6):计算候选集Ck=Fk-1∪Bk,
[0156] 步骤(7-7):求S=Atyt的最小二乘解:
[0157] 步骤(7-8):从 中选出绝对值最大的L记为 对应的At中的L列记为AtL,对应A的序列号记为FtL,记集合F=FtL;
[0158] 步骤(7-9):更新残差
[0159] 步骤(7-10):如果残差rnew=0则停止迭代执行步骤(7-11);如果||rnew||2≥||rt-1||2,更新步长L=L+B返回步骤(7-5)继续迭代;如果两条件都不符合,则Ft=F,rt=rnew,t=t+1,如果t≤M停止迭代执行步骤(7-11),否则返回步骤(7-5)继续迭代;
[0160] 步骤(7-11):重构所得 在FtL处有非零项,其值分别为最后一次迭代所得[0161] 经过多次循环迭代,求出信号X近似稀疏系数 利用稀疏矩阵公式 求出初始信号X的近似值 在服务端重构信号,恢复客户端节点缓冲区获取的每一帧初始图像数据;
[0162] 步骤(7-12):从内存池中为压缩后的数据分配内存节点,并将此内存节点从内存池的链表结构中剔除;
[0163] 步骤(7-13):借助OpenCV可将此内存节点的数据转为Mat结构,并调用imshow函数实时显示各传感器节点获取的图像信息,为防多线程使用imshow函数冲突,需在先调用cvNameWindow函数,另一方面,可对内存节点内的数据做所需处理,处理完每帧数据后释放此内存节点,该节点重新加入空闲内存节点链表;
[0164] 所述步骤(8)的步骤如下:服务器给各客户端发送结束采集数据的指令,释放分配的相关资源和接口;
[0165] 所述步骤(9)的步骤如下:客户端接收到服务器的结束命令,停止发送数据,释放分配的相关资源和接口,并关闭传感器;
[0166] 图7(a)-图7(f)为服务器端接收到的来自3个客户端的图像数据并实时显示。
[0167] 以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈