Kinect工作流程

来源:互联网 发布:java transient 作用 编辑:程序博客网 时间:2024/05/22 12:17
这个学期在搞Kinect的开发,主要是交互这一块儿,所以着重写写和交互相关的部分的内容。3D重建的部分自己也还没完全搞清楚,那个以后再说吧。由于懒和语文不好,以及没写过技术博客,所以就简单概括一下好了,有啥问题问我好了。Kinect2.0推出以后,微软推出了SDK2.0,2.0和1.x之间是有比较大的差别的,还是需要注意一下。


  Kinect主要用的接口有以下几个:
IKinectSensor这是连接Kinect设备用的接口。ICoordinateMapper 这是用来把数据流的坐标转换为世界坐标系的接口I*FrameSource这是和Kinect设备某一数据流绑定的数据源接口,*处是不同的数据种类,比如彩色数据流是IColorFrameSource、深度数据流是IDepthFrameSource等等。I*FrameReader这是用来读取翻译数据流获得数据帧的接口,*处是不同的数据种类。I*Frame 这是用来保存翻译好的数据帧的类,其中深度帧、图像帧可以用AcquireUnderlyingBuffer方法来将其中的内容保存到一个数组当中,肢体识别帧可以用GetAndRefreshBodyData来将数据保存到一个IBody类型的数组中。



  当然还有很多其它的接口和功能,但是事实上这些接口就可以从Kinect设备获取数据了,非常简单方便,SDK的样例的代码也都不长,而且很大一部分都是用来利用D2D设备进行渲染的。简单而方便的SDK结构大大简化了Kinect开发,这大概也是Kinect流行的一个原因吧。


  所以整个流程基本如下:
1、使用GetDefaultKinectSensor(IKinectSensor)来获取当前的Kinect设备。
2、使用IKinectSensor::open()方法来打开Kinect设备。
3、使用IKinectSensor::get_CoordinateMapper(ICoordinateMapper *)方法来获取坐标变换器
4、使用IKinectSensor::get_*FrameSource(I*FrameSource *)获得某种数据流的数据源
5、I*FrameSource::OpenReader(I*FrameReader *)连接数据源与读取翻译接口
6、在主循环中不断询问是否有新的数据帧:I*FrameReader::AcquireLatestFrame(I*Frame *)
7、根据需要对数据进行处理


  由于Kinect的数据都是30.00fps,所以需要不断地去尝试是否有新的数据帧生成,有就得到然后进行处理。
0 0
原创粉丝点击