마이크로소프트 정식 버 전 Kinect for Windows SDK 를 위 한 kinect - mssdk - openni - bridge

2012-4-24 23:30:00
from:http://viml.nchc.org.tw/blog/paper_info.php?CLASS_ID=1&SUB_ID=1&PAPER_ID=329
현재 윈도 우즈 에서 Kinect 의 응용 프로그램 개발 을 진행 하려 면 주로 두 가지 선택 이 있어 야 한다. 하 나 는 마이크로소프트 공식 적 인 것 이다. Kinect for Windows SDK, 다른 하 나 는 오픈 플랫폼 입 니 다. OpenNI。기본적으로 크로스 플랫폼 의 문제 와 마이크로소프트 의 개발 환경 에 대한 의심 을 고려 하여 Heresy 자신 은 모두 OpenNI 를 사용 합 니 다 ~ 마이크로소프트 의 Kinect for Windows SDK 에 대해 Heresy 는 대체적으로 대충 보 았 을 뿐 실제 적 으로 그의 프로그램 을 쓰 고 있 지 않 습 니 다.
그러나 이들 의 구동 프로그램 이 다 르 기 때문에 일반적으로 같은 컴퓨터 에서 이 두 가지 개발 환경 을 편리 하 게 동시에 사용 할 수 없다.하지만 OpenNI 의 개방 성 때문에 실제로 Kinect for Windows SDK 의 베타 버 전이 나 왔 을 때 이미 네티즌 들 이 그 를 대상 으로 패 키 지 를 만들어 OpenNI 에서 사용 할 수 있 는 모듈 을 썼 습 니 다 ~ 이 모듈 은 Heresy 가 전에 'OpenNI 가 마이크로소프트 Kinect SDK 를 통 해 Kinect 의 자 료 를 읽 을 수 있 도록!' 라 는 글 에서 소개 한 것 입 니 다."kiect - mssdk - openni - bridge" (홈 페이지).
당시 이 'kinect - mssdk - openni - bridge' (이하 'Bridge' 라 고 약칭) 는 Kinect for Windows SDK Beta 1 쓴 것 은 나중에 새로운 베타 2 와 정식 판 이 출시 되 었 을 때 도 모두 업데이트 되 었 다. 그러나 Kinect for Windows SDK 정식 판 의 개작 에 대해 서 는 사실상 많이 늦 은 편 이 고 4 월 이 되 어서 야 정식 지원 (하 는 모습) 이 나 왔 다.
하지만 최근 작 가 는 상당히 부지런 하 게 업 데 이 트 된 것 같 습 니 다. 4 월 초부 터 키 넥 트 for Windows SDK 1.0 을 지원 하기 시 작 했 습 니 다. 지금까지 여러 차례 리 메 이 크 되 어 1.0.0.4 로 업데이트 되 었 습 니 다. 그 는 정식 SDK 뿐만 아니 라 키 넥 트 의 모터 제어, 사 운 드 캡 처 (사 운 드 소스 검색, 메아리 제거 등 기능 포함) 도 지원 합 니 다.그리고 새로운 Kinect for Windows 하드웨어 의 'Near Mode'!
이러한 기능 이 도입 되 었 기 때문에 현재 로 서 는 그의 기능 이 상당히 완전 하 다 고 할 수 있 습 니 다. Heresy 에 서 는 Kinect for Windows SDK 를 설치 할 수 있 는 환경 (Windows 7 / 8) 에서 OpenNI + Kinect 프로그램 개발 을 하려 고 한다 면 이 'kinect - msdk - openni - bridge' 를 잘 사용 할 수 없 을 것 입 니 다.더 좋 은 선택 이 야 ~
어떻게 사용 해 야 할 까요? 공식 'README en. TXT' 라 는 파일 (연결) 을 참고 하 세 요. 그 안에 상당히 완전한 설명 이 있 습 니 다. Heresy 는 자신 이 정말 놀 러 가지 않 았 지만 그의 몇 가지 중요 한 설명 을 대충 열거 해 보 세 요.
User Generator 설정
우선, User Generator 부분 에 서 는 production node 의 이름 (name) 을 통 해 사용 을 제어 합 니 다. OpenNI 에 이 bridge 가 제공 하 는 user generator 를 만 들 려 면 만 들 때 query 를 통 해 이름 을 지정 해 야 합 니 다. XML 을 사용 하여 초기 화 하 는 경우 ('XML 설정 파일 을 사용 하여 OpenNI 초기 화' 를 참고 하 십시오.) 그의 글 씨 는 다음 과 같다.
<OpenNI>
...
<ProductionNodes>
...
<Node type="User" name="User1">
<Query>
<Name>KinectSDKUserSkeletonGenerator</Name>
</Query>

</Node>
...
</ProductionNodes>
</OpenNI>

포 인 트 는 덧 붙 이 는 거 예요. , 그리고 지정  "KinectSDK User SkeletonGenerator" 를 위해 ~
프로그램 에 쓰 려 면, 사용 합 니 다. xn::Query 제어 하기:
xn::Query mQuery;
mQuery.SetName( "MSRKinectUserSkeletonGenerator" );

xn::UserGenerator mUserGenerator;
mUserGenerator.Create( mContext, &mQuery );

또한 주의해 야 할 것 은 이 User Generator 는 표준 교정 자세 가 필요 없 는 구조 ('자 세 를 교정 하지 않 는 NITE 1.5' 참조) 를 사용 합 니 다. 만약 에 프로그램의 인체 골격 추적 이 초기 에 'Psi' 표준 교정 자세의 구 조 를 사용 해 야 한다 면 (을 참고 하 십시오)위 에서 사용 하 는 'KinectSDK User SkeletonGenerator' 라 는 이름 을 'KinectSDK User SkeletonGenerator WithPsiposeEmulation' 으로 바 꾸 어 Psi 자세 탐지 사건 을 모 의 해 야 합 니 다.

Depth Generator
깊이 감지 기 를 만 드 는 방법 은 특별한 것 이 없 을 것 입 니 다. 이전 과 같이 사용 하면 됩 니 다. 하지만 깊이 감지 기 는 QVGA (320 x240) 와 VGA (640 x480) 두 가지 해상도 (MapOutputMode) 를 지원 합 니 다.단, VGA 모드 로 설정 하 더 라 도 위의 User generator 를 사용 하 는 경우 해상도 가 QVGA 로 강제 설정 되 고 VGA 로 시 뮬 레이 션 되 므 로 사용 상 주의해 야 할 사항 입 니 다.
또한 새 브 릿 지 는 Kinect for Windows Hardware 의 'Near mode' 도 지원 합 니 다. 사용 하려 면 Depth Generator 의 'nearMode' 속성 (Property) 을 통 해 설정 합 니 다. XML 에 서 는 Near mode 를 사용 하 는 방법 은 다음 과 같 습 니 다.
<Node type="Depth" name="Depth1">
<Configuration>
<Property type="int" name="nearMode" value="1"/>
</Configuration>
</Node>

프로그램 에 대응 하면 아래 와 같 을 것 이다.
xn::DepthGenerator xDepthGen;
xDepthGen.Create( mContext );
xDepthGen.SetIntProperty( "nearMode", 1 );

마지막 으로 Bridge 가 제공 하 는 depth generator 는 깊이 가 너무 가 깝 고 너무 멀 며 알 수 없 는 이 세 가지 상황 을 설정 할 수 있 습 니 다. 서로 다른 값 을 전달 할 수 있 습 니 다.이 속성 을 제어 합 니 다. 기본 적 인 위 방법 은 위의 'nearMode' 와 같 습 니 다.

Image Generator
Bridge 가 제공 하 는 Image Generator 는 VGA (640 x480) 와 1280 x1024 @ 15FPS 라 는 두 가지 해상도 만 제공 하 는 것 같 아 QVGA 를 지원 하지 않 는 것 같다 는 점 은 사용 시 주의해 야 한다.

Kinect 모터 사용 하기
Kinect 의 모터 각도 제 어 는 주로 Image Generator, Depth Generator 또는 User Generator 의 'camera Elevation Angle' 이라는 속성 을 통 해 제 어 됩 니 다. 그의 설정 방법 은 기본적으로 다음 과 같은 형식 입 니 다.
XnUInt64 angle = 10;
xDepthGen.GetIntProperty( "cameraElevationAngle", angle );
xDepthGen.SetIntProperty( "cameraElevationAngle", angle );

또한 더 제어 하려 면 'nuiSensor Pointer' 라 는 속성 을 통 해 Kinect for Windows SDK 의 'INuiSensor' 의 물건 지 표를 얻 고 강제 전환 방법 으로 조작 할 수 있 습 니 다. 다음은 사용 하 는 범례 입 니 다. (개인 은 이런 용법 이 매우 위험 하 다 고 생각 합 니 다.)
XnUInt64 i;
xDepthGen.GetIntProperty("nuiSensorPointer", i);
INuiSensor* pSensor = (INuiSensor*)i;
pSensor->NuiXxx(...);

여기 서 주의해 야 할 것 은 모터 의 제어 기능 은 자료 (StartGeneratingAll () 가 생기 기 시작 한 후에 만 사용 할 수 있다 는 점 이다.
마지막 으로 이 버 전의 Bridge 는 User Generator 부분 에서 사용자 에 게 모터 각 도 를 자동 으로 조정 할 수 있 는 기능 을 제공 합 니 다. 이 기능 을 켜 려 면 User Generator 의 이름 을 원래 의 'KinectSDK User SkeletonGenerator' 에서 'KinectSDK User SkeletonGenerator With AutoElevation' 으로 바 꾸 어야 합 니 다.

소리의 취득
Audio Generator 부분 은 사실 Heresy 가 OpenNI 에서 도 사용 해 본 적 이 없 기 때문에 잘 알 지 못 합 니 다. 여기 서 Bridge 가 제공 하 는 Audio Generator 는 원시 음성 자 료 를 얻 을 수 있 을 뿐만 아니 라 Kinect for Windows SDK 가 사 운 드 를 처리 하 는 여러 가지 기능 을 속성 으로 이 식 했 을 것 입 니 다 ~ 다음은 그의 XML 설정 입 니 다.설명:
<Node type="Audio" name="Audio1">
<Configuration>
<!-- Beam forming mode
0: Adaptive (Controlled by Kinect-specific DSP)
1: Automatic (Controlled by DMO)
2: Manual (Controlled by the application via the beamAngle property
explained later) -->

<Property type="int" name="beamAngleMode" value="0"/>
<!-- Automatic gain control: 0(off), 1(on) -->
<Property type="int" name="automaticGainControl" value="0"/>
<!-- Echo cancellation (AEC) and suppression of residual signal (AES)
0: None
1: AEC
2: AEC and AES once
3: AEC and AES twice -->

<Property type="int" name="echoCancellationMode" value="2"/>
<!-- Center clipping (a technique to remove the residual signal after AEC) and
Noise filling (a technique to make the sound natural by using a small
amount of noise instead of silence after removing the residual signal)
0: None
1: Center clipping
2: Center clipping and Noise filling -->

<Property type="int" name="centerClippingMode" value="0"/>
<!-- Noise suppression: 0(off), 1(on) -->
<Property type="int" name="noiseSuppression" value="1"/>
<!-- Audio buffer size in milliseconds. The audio data is
lost unlsee the application polls the audio data
within this interval. Set before StartGenerating. -->

<Property type="int" name="bufferSizeInMs" value="1000"/>
</Configuration>
</Node>

프로그램 에서 관련 수 치 를 얻 으 려 면 기본적으로:
double beamAngle, sourceAngle, sourceAngleConfidence;
audioGenerator.GetRealProperty("beamAngle", beamAngle);
// read-only or read-write when beamAngleMode is manual
audioGenerator.GetRealProperty("sourceAngle", sourceAngle);
// read-only
audioGenerator.GetRealProperty("sourceAngleConfidence", sourceAngleConfidence);
// read-only


이 편 은 대략 이렇다. 그러나 실제로 Heresy 는 실제로 사용 해 본 적 이 없고 파일 에 따라 만 썼 다 는 것 을 일 깨 워 준다. 사용 상의 문제 가 있 으 면 저자 가 공식 포럼 에서 보 낸 'KinectSDK 1.0 + OpenNI / NITE at the same time (Part 2)' 이라는 토론 에 직접 가서 보고 질문 할 수도 있다.
Heresy 를 보면 그 가 아 쉬 운 점 은 64 비트 원 판 을 지원 하지 않 고 32 비트 원 판 만 지원 한 다 는 것 이다. 그래서 64 비트 원 의 컴퓨터 라 도 32 비트 원 의 OpenNI 만 사용 할 수 있다 는 것 이다.

좋은 웹페이지 즐겨찾기