1. Kinect driver 설치
http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx 에 들어가서 SDK와 Toolkit을 받고, 설치한다. 밑에 보이는 화면에서 Step 1, Step 2를 따라하면 된다. (물론 밑에 그림 클릭하면 안된다.)
<= 설치가 잘 되었다면 작업 관리자에 요롷게 뜬다.
2. MATLAB 2013 설치 (?)
MATLAB 2013을 설치한다. 정식으로 사려면 대략 2천만원 정도 하는 것 같다. 하지만 우리에겐 학교 라이센스가 있다! (없다면 어둠의 경로로?) 다만 시간이 엄청 오래걸린다..
3. 그러면 일단 다음 링크의 동영상을 보도록 하자.
위의 링크는 MATLAB Virtual Conference 2013의 한 동영상이다. 매트랩에서 키넥트를 어떻게 사용하는지에 대한 튜토리얼이라고 생각하면 되겠다.
<= 이런 아저씨가 나와서 푸근하게 설명해주신다.
4. MATLAB 다운로드가 끝날 생각을 안한다.... SNL 코리아를 본다.
최일구 아저씨!
5. Matlab 2013 Publish 기능을 사용해서 코드를 분석해보자.
Contents
Kinect를 사용해보는 코드이다.
clc; clear all; close all; imaqreset; % 카메라 세팅을 초기화
1. 어떤 device가 있나 확인해본다.
imaqhwinfo
ans = InstalledAdaptors: {'gentl' 'gige' 'kinect' 'matrox' 'winvideo'} MATLABVersion: '8.1 (R2013a)' ToolboxName: 'Image Acquisition Toolbox' ToolboxVersion: '4.5 (R2013a)'
2. 키넥트 카메라를 사용한다.
colorVid = videoinput('kinect', 1);
preview(colorVid);
pause();
closepreview(colorVid);
3. 키넥트 depth 카메라를 사용해본다.
depthVid = videoinput('kinect', 2);
preview(depthVid);
pause();
closepreview(depthVid);
4. Snapshot을 한다.
depthImage = getsnapshot(depthVid); imshow(depthImage, [0 4096]); % 0~4m만 보도록 스케일링을 한다. fprintf('Maximum distance: %.2f m \n', double(max(max(depthImage)))/1000 );
Maximum distance: 3.98 m
5. Skeleton을 구해보자.
imaqreset; % 카메라 세팅을 초기화 depthVid = videoinput('kinect', 2); % Depth 카메라를 설정하고 triggerconfig(depthVid, 'manual'); depthVid.FramesPerTrigger = 1; depthVid.TriggerRepeat = inf; set( getselectedsource(depthVid), 'TrackingMode', 'Skeleton');
6. Track을 한다.
start(depthVid); figure(); for i = 1:100 trigger(depthVid); % 현재 depthData와 MetaData를 읽어온다. [depthMap, ~, depthMetaData] = getdata(depthVid); imshow(depthMap, [0 4096]); title(sprintf('[%d/%d]', i, 100)); end
7. Skeleton을 보자.
depthMetaData.IsSkeletonTracked 가 skeleton이 검출되었는지 나온다.
if sum(depthMetaData.IsSkeletonTracked) % Skeleton이 검출 되었으면 fprintf('Skeleton detected \n'); imshow(depthMetaData.SegmentationData); else fprintf('No skeleton detected \n'); end
Skeleton detected
8. Skeleton을 더 자세히 보자. (depth image와 같이보자.)
skeletonJoints = depthMetaData.JointImageIndices(:, :, depthMetaData.IsSkeletonTracked); imshow(depthMap, [0 4096]); % imshow(depthMetaData.SegmentationData); hold on; plot(skeletonJoints(:, 1), skeletonJoints(:, 2), '*');
9. 실시간으로 Skeleton을 확인해보자.
clc; clear all; close all; imaqreset; % 카메라 세팅을 초기화 depthVid = videoinput('kinect', 2); triggerconfig(depthVid, 'manual'); depthVid.FramesPerTrigger = 1; depthVid.TriggerRepeat = inf; set( getselectedsource(depthVid), 'TrackingMode', 'Skeleton'); colorVid = videoinput('kinect', 1); triggerconfig(colorVid, 'manual'); colorVid.FramesPerTrigger = 1; colorVid.TriggerRepeat = inf; start(depthVid); start(colorVid); himg = figure; while ishandle(himg) trigger(colorVid); trigger(depthVid); image = getdata(colorVid); [depthMap, ~, depthMetaData] = getdata(depthVid); nrSkeleton = sum(depthMetaData.IsSkeletonTracked); if nrSkeleton > 0 skeletonJoints = depthMetaData.JointImageIndices(:, :, depthMetaData.IsSkeletonTracked); skeletonViewer(skeletonJoints, image, nrSkeleton); else imshow(image); end end stop(depthVid); stop(colorVid);
6. 여기까지 하면 Kinect의 대부분의 기능을 쓸 수 있게된다.
'Enginius > Matlab' 카테고리의 다른 글
Automatic Color Distribution for Multiple Plot + Use Tex Equation in Plot (0) | 2013.08.09 |
---|---|
keyDownListener + figCloseHandler + figTimer (0) | 2013.08.01 |
Get CLICK point in an Image (0) | 2013.07.03 |
Make a VIDEO with Matlab (writeVideo) (0) | 2013.07.02 |
Check Point in Polygon (inpolygon) (0) | 2013.05.13 |