主要内容

使用Kinect为Windows V1从图像采集工具

这个例子展示了如何获取的数据可以从Kinect®Windows®V1传感器使用图像采集工具箱™:

效用函数

为了让这个例子尽可能的简单,一些使用Kinect的效用函数为Windows元数据创建了。这些效用函数包括skeletalViewer函数接受骨骼数据,彩色图像和骨骼的数量作为输入并显示彩色图像的骨架上

看看Kinect为Windows设备和格式是可用的

Kinect为Windows有两个传感器,一个颜色传感器和深度传感器。启用独立收购从这些设备,他们被当作两个独立的设备图像采集工具。这意味着需要创建单独的VIDEOINPUT对象为每个颜色和深度(IR)设备。

% Kinect为Windows在IMAQHWINFO传感器显示为两个独立的设备。hwInfo = imaqhwinfo (“kinect”)
hwInfo = AdaptorDllName: [1 x68 char] AdaptorDllVersion:“4.5 (R2013a抢先版)”AdaptorName:“kinect的deviceid: {[1] [2]} DeviceInfo: [1 x2 struct]
hwInfo.DeviceInfo (1)
ans = DefaultFormat:‘RGB_640x480 DeviceFileSu金宝apppported: 0设备名称:“Kinect色彩传感器”的DeviceID: 1 VideoInputConstructor:“videoinput (Kinect, 1)“VideoDeviceConstructor: imaq。VideoDevice (kinect, 1)“Su金宝apppportedFormats: {1} x7细胞
hwInfo.DeviceInfo (2)
ans = DefaultFormat:‘Depth_640x480 DeviceFileSu金宝apppported: 0设备名称:“Kinect深度传感器”的DeviceID: 2 VideoInputConstructor:“videoinput (Kinect, 2)“VideoDeviceConstructor: imaq。VideoDevice (kinect, 2)“Su金宝apppportedFormats: {“Depth_320x240”“Depth_640x480”“Depth_80x60”}

获取颜色和深度数据

为了获得同步的颜色和深度数据,我们必须使用手动触发,而不是立即触发。默认直接触发患有流在执行同步采集之间的滞后。这是由于开始的开销顺序流。

%创建VIDEOINPUT对象为两个流colorVid = videoinput (“kinect”,1)
总结视频使用Kinect的颜色传感器的输入对象。采集源(s):颜色来源是可用的。采集参数:“颜色来源”是当前选中的源。10帧/触发使用选定的来源。“RGB_640x480”视频数据被记录在开始。首先抓住每帧(s)。日志数据触发“记忆”。触发参数:1“立即”触发(s)开始。状态:等待开始。0帧开始以来获得的。 0 frames available for GETDATA.
depthVid = videoinput (“kinect”,2)
总结视频使用Kinect深度传感器的输入对象。采集源(s):深源是可用的。采集参数:“深源”是当前选中的源。10帧/触发使用选定的来源。“Depth_640x480”视频数据被记录在开始。首先抓住每帧(s)。日志数据触发“记忆”。触发参数:1“立即”触发(s)开始。状态:等待开始。0帧开始以来获得的。 0 frames available for GETDATA.
%将触发模式设置为“手动”triggerconfig ([colorVid depthVid),“手动”);

设置FramesPerTrigger属性VIDEOINPUT对象的“100”获得100帧/触发。在这个例子中100帧给Kinect为Windows传感器获得足够的时候开始跟踪一个骨架。

colorVid。FramesPerTrigger = 100;depthVid。FramesPerTrigger = 100;
%开始设备的颜色和深度。这开始收购,但是没有获得数据的%开始登录。开始([colorVid depthVid]);
%触发设备开始记录数据。触发([colorVid depthVid]);
%检索获得的数据[colorFrameData, colorTimeData colorMetaData] = getdata (colorVid);[depthFrameData, depthTimeData depthMetaData] = getdata (depthVid);
%停止设备停止([colorVid depthVid]);

配置骨骼追踪

Kinect为Windows传感器提供了不同的模式来追踪骨骼。这些模式可以访问和配置设备VIDEOSOURCE对象的深度。让我们看看如何启用骨架跟踪。

%得到深度的VIDEOSOURCE对象设备的VIDEOINPUT对象。depthSrc = getselectedsource (depthVid)
显示总结视频源对象:一般设置:家长= [1 x1 videoinput]选择= SourceName =深度源标签=类型= videosource设备特定属性:加速度计= (-0.008547 -0.98046 -0.11966)BodyPosture =站CameraElevationAngle = 9 DepthMode =默认的帧速率= 30 IREmitter = SkeletonsToTrack = [1 x0双]TrackingMode =

深源对象上的属性控制骨骼TrackingMode跟踪特性,SkeletonToTrack VIDEOSOURCE和BodyPosture属性。

TrackingMode控制骨骼追踪是否启用,如果启用了它,是否所有的关节都跟踪,“骨架”,或者只是臀部位置追踪,“位置”。TrackingMode设置为“关闭”(默认)禁用所有跟踪和减少了CPU负载。

“BodyPosture”属性决定了有多少关节跟踪。如果“BodyPosture”设置为“站”,二十跟踪关节。如果它被设置为“坐”,然后跟踪10个关节。

SkeletonToTrack属性可用于选择性地跟踪一个或两个使用SkeletonTrackingID的骨架。当前有效的值“SkeletonTrackingID”作为元数据的一部分返回设备的深度。

%打开骨骼跟踪。depthSrc。TrackingMode =“骨架”;

骨骼数据的访问

Kinect的骨架数据为Windows生产从深度访问设备GETDATA返回的元数据的一部分。Kinect为Windows可以跟踪的位置视图和六人可以积极跟踪的关节位置的两个六个骨架。它还支持两种跟踪金宝app模式人基于他们是否站或坐着。在站模式下,满20关节位置跟踪和返回;坐在模式返回10上肢关节。骨骼数据的更多细节,请参阅MATLAB在Kinect为Windows适配器文档。

%获得100帧与跟踪。%记得有一个人在人的前面% Kinect为Windows看到有效的跟踪数据。colorVid。FramesPerTrigger = 100;depthVid。FramesPerTrigger = 100;
开始([colorVid depthVid]);触发([colorVid depthVid]);
%检索框架,检查是否有骨骼追踪[frameDataColor] = getdata (colorVid);[frameDataDepth, timeDataDepth metaDataDepth] = getdata (depthVid);
%骨骼数据视图从深度的元数据metaDataDepth
metaDataDepth = 100 x1结构体数组字段:AbsTime FrameNumber IsPositionTracked IsSkeletonTracked JointDepthIndices JointImageIndices JointTrackingState JointWorldCoordinates PositionDepthIndices PositionImageIndices PositionWorldCoordinates RelativeFrame SegmentationData SkeletonTrackingID TriggerIndex

我们随机选择第95帧图像形象化和骨骼数据。

%检查追踪骨骼从深度的元数据anyPositionsTracked =任何(metaDataDepth (95)。任何(metaDataDepth IsPositionTracked ~ = 0) anySkeletonsTracked = (95)。IsSkeletonTracked ~ = 0)
anyPositionsTracked = 1 anySkeletonsTracked = 1

上述结果表明,至少有一个骨架被跟踪。如果启用了跟踪与TrackingID财产但没有指定id, Kinect为Windows软件自动选择两个骨骼追踪。使用IsSkeletonTracked元数据,以确定哪些骨架被跟踪。

%见骨架被跟踪。trackedSkeletons =找到(metaDataDepth (95) .IsSkeletonTracked)
trackedSkeletons = 1

显示骨骼的关节坐标。注意,如果“BodyPosture”属性设置为“坐”,“JointCoordinates”和“JointIndices”仍有一个长度为20,但指数2 - 11(上身关节)仅将填充。

jointCoordinates = metaDataDepth (95)。JointWorldCoordinates (:,:, trackedSkeletons)%骨架联合指数对彩色图像jointIndices = metaDataDepth (95)。JointImageIndices (:,:, trackedSkeletons)
jointCoordinates = -0.0119 -0.0072 1.9716 -0.0107 0.0545 2.0376 -0.0051 0.4413 2.0680 0.0033 0.6430 2.0740 -0.1886 0.3048 2.0469 -0.3130 0.0472 2.0188 -0.3816 -0.1768 1.9277 -0.3855 -0.2448 1.8972 0.1724 0.3022 2.0449 0.3102 0.0382 2.0304 0.3740 -0.1929 1.9591 0.3786 -0.2625 1.9356 -0.0942 -0.0850 1.9540 -0.1367 -0.4957 1.9361 -0.1356 -0.8765 1.9339 -0.1359 -0.9284 1.8341 0.0683 -0.0871 1.9504 0.0706 -0.4822 1.9293 0.0858 -0.8804 1.9264 0.0885 -0.9321 1.8266 jointIndices = 318 256 317 240 318 143 319 92 271 177 239 243 219 303 216 323 363 177 399 243 421 303 424 322 296 277 286 387 288 492 286 520 340 277 342 384 347 493 350 522

画出相应的彩色图像的骨架

%退出第95帧颜色形象= frameDataColor (:,:,:, 95);%发现骨骼追踪nSkeleton =长度(trackedSkeletons);%画出框架util_skeletonViewer (jointIndices、图像、nSkeleton);