本周重点学习《Kinect体感程序设计入门》,且已翻译完英文文献。
Kinect传感器所能获取的基础信息共有5种:彩色图像、三轴加速度感应器、深度图像、红外线图像、声音。形成的重要交互功能有:
1)骨架识别——产生骨架信息(也可称骨架流、骨架图像、关节信息),其算法分析来自深度图像的数据。
2)语音识别——识别用户的语音命令,其算法分析来自麦克风阵列的数据。
3)脸部追踪——识别用户脸上的特征点,其算法分析来自彩色图像、深度图像,以及骨架信息的数据。
4)Kinect Interaction——辨识使用者手部的特殊动作(如握拳、按压),其算法分析来自三轴加速度感应器、深度图像,以及骨架信息的数据。
5)Kinect Fusion——提供3D建模的工具,其算法分析来自深度图像的数据。
Kinect所回传的骨架信息包含每个关节在骨架空间里的三维坐标(x,y,z),其单位为米(m),使用右手坐标系统,也就是所,从Kinec看过去,以传感器为中心,x轴向左为正,向右为负。Y轴向上为正,向下为负。z轴则是越靠近传感器,值越小;离传感器越远,值越大。
骨架信息流
SkeletonStreamKinect的骨架信息流来自于KinectSensor对象中的SkeletonStream,骨架信息默认为关闭,使用前必须调用其Enable()方法启动骨架信息流。
启动之后,需要注册SkeletonFrameReady事件的事件处理函数方能接收到来自Kinect的骨架信息。应用程序取得的是一系列坐标的集合,称为骨架关节(joint)位置。AllFramesReady也可以取得骨架信息,不过通常用于搭配彩色图像、深度图像。
当有人要与Kinect进行交互时,考虑到现实的复杂环境干扰,需要使传感器正确识别交互者,可使用握拳或按压两种方式实现,其中,握拳动作通过搭配机器学习算法来实现;而按压动作则通过Z轴变化来侦测,按压的整个过程基本上就是Z坐标从0变化到1的过程。
通过Kinect控制机械臂基本流程
系统结构图KinectSDK中自带的范例中提供了深度图像数据和骨骼跟踪的程序,但它们分开的,并且没有数据提取记录的相关程序,经过学习后,要自己编写应用程序,将骨骼跟踪和深度图相互结合,并记录提取相关的关键的骨骼关节数据。
跟踪程序流程设计主要有以下几个步骤,如图
第一步:设备环境设备初始化,并创建新的对象。
第二步:建立新的用户生成器,来保存捕捉到的目标的深度相关数据信息,方便以后调用。
第三步:完成相关回调函数的注册。需要调用的和骨骼跟踪相关的函数有新用户的生成、用户的丢失、骨骼姿态的检测等。
第四步:骨架校准,分析比较看捕捉到的骨骼关节是否可靠,如果分析结果达到要求则可进入下一步,否则返回第三步。
第五部:骨骼跟踪,记录骨骼关节的信息。
第六步:更新并读取数据,保证数据的实时性。
在Visual Studio 中进行人体骨骼点图的提取时,应注意到,具体的骨架信息是以关节点数据显示出来的,Joint有以下属性。第一种,Joint Type属性是Joint的一种枚举类型。第二种,每一个骨骼关节点有Skeleton Point的Position属性,这种属性是由X,Y,Z三个坐标值来进行显示每个关节点的位置信息,其中X,Y坐标值可以表示骨骼的在二维空间内的位置,Z坐标值是用来表示关节点的深度信息;Kinect传感器中有一系列关于点坐标的转换算法,可以用来将目标对象的骨骼坐标点转换成相应的深度。最后一种,每个Skeleton骨骼对象都有一个Joint Tracking State属性,这种属性表示这个关节点现有的跟踪情况和方式。利用Visual Studio编程提取出关节的坐标信息后,将坐标信息流经过计算机处理后发送给机械臂,通过舵机控制机械臂的运动实现交互功能。
网友评论