function KinectRawRecordingDemo(deviceId) % KinectRawRecordingDemo - Capture, display and record video and depths data from a Kinect box. % % This connects to a Microsoft Kinect device on the USB bus, then captures % and displays video and depths data delivered by the Kinect. It also stores % the data to filesystem % Press any key to quit the demo. % % See help PsychKinect, help PsychKinectCore and help InstallKinect for % further info. % % History: % 25.11.2010 mk Written. if nargin < 1 deviceId = []; end AssertOpenGL %PsychDebugWindowConfiguration; InitializeMatlabOpenGL([],[],1); GetSecs; dst1 = [0, 0, 640, 480]; dst2 = [650, 0, 650+640, 480]; w = Screen('Openwindow', 0, 0, [0 0 1300 500]); % Open 'deviceId'th connected Kinect. % Use 300 internal buffers for buffering up to 10 secs of % capture at 30 fps max in the fifo. Disable (0) bayer filtering % to save memory: kinect = PsychKinect('Open', deviceId, 300, 0); PsychKinect('Start', kinect); count = 0; ts = GetSecs; elapsed = []; while 1 [rc, cts] = PsychKinect('GrabFrame', kinect, 1); if rc > 0 count = count + 1; % Visualization: % Image: if 0 %fprintf('Kinect frame %i, cts = %f\n', count, cts); [imbuff, width, height, channels] = PsychKinect('GetImage', kinect, 0, 1); if width > 0 && height > 0 tex = Screen('SetOpenGLTextureFromMemPointer', w, [], imbuff, width, height, channels, 1, GL.TEXTURE_RECTANGLE_EXT); Screen('DrawTexture', w, tex, [], dst1); Screen('Close', tex); end end % Color coded depth map: if 0 [imbuff, width, height, channels] = PsychKinect('GetImage', kinect, 1, 1); if width > 0 && height > 0 tex = Screen('SetOpenGLTextureFromMemPointer', w, [], imbuff, width, height, channels, 1, GL.TEXTURE_RECTANGLE_EXT); Screen('DrawTexture', w, tex, [], dst2); Screen('Close', tex); end end Screen('Flip', w, [], 2, 2); % Image & Depth data disc writeout: if 1 t1 = GetSecs; [imbuff, width, height, channels] = PsychKinect('GetImage', kinect, 0); depth = PsychKinect('GetDepthImage', kinect, 8); if ~IsWin save(sprintf('/tmp/testdepths_%i.mat', count), 'depth', 'imbuff'); else save(sprintf('D:\\temp\\testdepths_%i.mat', count), 'depth', 'imbuff'); end elapsed(end+1) = (GetSecs - t1) * 1000; end PsychKinect('ReleaseFrame', kinect); else WaitSecs('YieldSecs', 0.005); end [x,y,buttons]=GetMouse; if (x == 0 && y == 0) GetClicks; end if KbCheck(-1) break; end end fprintf('Average fps = %f [%i]\n', count / (GetSecs - ts), count); twrite = mean(elapsed) close all ; plot(elapsed); PsychKinect('Stop', kinect); PsychKinect('Close', kinect); sca; % load /tmp/testdepths_xxx.mat % imagesc(transpose(double(depth))) % img = transpose(imbuff); imshow(img)