我的教育项目是关于使用Kinect进行手势识别。我将kinect用于XBox One和适配器。
我使用以下代码记录了kinect的彩色和深度视频:(类似于所说的here)
clc
clear all
close all
imaqreset
%Call up dicertory containing utility functions
utilpath = fullfile(matlabroot, 'toolbox', 'imaq', 'imaqdemos', 'html', 'KinectForWindows');
addpath(utilpath);
%Create the videoinput objects for the colour and depth streams
colourVid = videoinput('kinect', 1, 'BGR_1920x1080');
depthVid = videoinput('kinect', 2, 'Depth_512x424');
depthSource = getselectedsource(depthVid);
depthSource.EnableBodyTracking = 'on';
%------------------------------------------------
%setting up record
%------------------------------------------------
% set the data streams to logging mode and to disk
set(colourVid, 'LoggingMode', 'Disk&Memory');
set(depthVid, 'LoggingMode', 'Disk&Memory');
%Set a video timeout property limit to 50 seconds
set(colourVid, 'Timeout',50);
set(depthVid, 'Timeout',50);
%Creat a VideoReader object
colourLogfile = VideoWriter('colourTrial5.avi', 'Uncompressed AVI');
depthLogfile = VideoWriter('depthTrial5.mj2', 'Archival');
%configure the video input object to use the VideoWriter object
colourVid.DiskLogger = colourLogfile;
depthVid.DiskLogger = depthLogfile;
%set the triggering mode to 'manual'
triggerconfig([colourVid depthVid], 'manual');
%set the FramePerTrigger property of the VIDEOINPUT objects to 100 to
%acquire 100 frames per trigger.
set([colourVid depthVid], 'FramesPerTrigger', 100);
%------------------------------------------------
%Initiating the aquisition
%------------------------------------------------
%Start the colour and depth device. This begins acquisition, but does not
%start logging of acquired data
start([colourVid depthVid]);
pause(20); %allow time for both streams to start
%Trigger the devices to start logging of data.
trigger([colourVid depthVid]);
%Retrieve the acquired data
[colourFrameData, colourTimeData, colourMetaData] = getdata(colourVid);
[depthFrameData, depthTimeData, depthMetaData] = getdata(depthVid);
skeletonData = depthMetaData; %making copy of data
save('skeletonData.mat','skeletonData')
stop([colourVid depthVid])
但是,当我播放视频时,很明显两个颜色和深度的视频不能同时准确记录。我当前的实现在两个传感器之间存在时滞(将近1秒!) 颜色传感器似乎在深度传感器之前已经开始工作,然后在拍摄了100帧之后,颜色传感器在深度传感器之前停止了工作。 我希望两个传感器都同步,以使每个传感器的视频处于同一时刻。
为什么会这样? 谁能提出解决方案?
任何解决方案将不胜感激。 谢谢。
答案 0 :(得分:0)
看看您的代码,我认为它可以正确捕获,但是捕获多个帧,然后触发并播放它们?如果您保存带有时间戳的图像而不是直接保存视频,则可以进行检查(以查看是否有重复的帧)。因此,您应该按如下所示设置FramePerTrigger:
set([colourVid depthVid], 'FramesPerTrigger', 1);
或者,您可以使用我前一段时间使用的small utility;但可以保存带有时间戳的图像。您可以按照随附的代码进行修改以保存到视频。希望这会有所帮助。