2017년 1월 25일 수요일

Asus Xtion Pro 드라이버 설치하기 & OpenCV를 이용하여 영상 받아들이기

문제: Asus Xtion Pro driver를 설치해보자. & Opencv를 이용하여 영상을 받아보자.

해결:
<참고: https://fivedots.coe.psu.ac.th/~ad/kinect/installation.html>
<참고: http://answers.opencv.org/question/21716/run-asus-xtion-with-highgui-howto/>
1. 일단 컴퓨터의 프로그램(제어판->프로그램->프로그램 및 기능)에서 primesense, openni, kinect, xbox, nite가 언급된 모든 드라이버를 깨끗하게 삭제한다.
2. program files/primesens 폴더와 openNI폴더를 삭제한다.
3. 재부팅
4. 다음 페이지에서 OpenNI 패키지, XtionStore installer, Xtion Pro driver&SDK 패키지를 다운받는다.
https://www.asus.com/3D-Sensor/Xtion_PRO_LIVE/HelpDesk_Download/
5. 설치( 후 재부팅.
6. NiViewer.exe를 실행시켜 정상동작을 확인한다.
7. OpenCV를 이용하기전 유의문과 예문을 확인한다.
http://docs.opencv.org/2.4/doc/user_guide/ug_kinect.html
8. OpenCV에 OpenNI를 사용할 수 있도록 빌드되었는지 아래 함수로 확인한다.
cout << cv::getBuildInformation() << endl;
를 넣으면 opencv에 rgbd를 받도록 빌드되었는 확인가능함.
9. 만약 no라면 OpenCV에서 OpenNI가 가능하게끔 다시 빌드해야한다. yes라면 다음 구문을 넣어 테스트한다.

printf("%s\n", cv::getBuildInformation().c_str()); // 현재 opencv의 여러설정들을 보여줌(여기에는 openni가 사용가능한지도 있음).

 // Open Kinect sensor
cv::VideoCapture capture(CV_CAP_OPENNI_ASUS);

if (!capture.isOpened()) {
_cprintf("Could not open OpenNI-capable sensor\n");
}

capture.set(CV_CAP_PROP_OPENNI_REGISTRATION, 1);
double focal_length = capture.get(CV_CAP_OPENNI_DEPTH_GENERATOR_FOCAL_LENGTH);

// Main loop
cv::Mat _color, _depth;
for (;;)
{
// Capture next color/depth pair
capture.grab();
capture.retrieve(_depth, CV_CAP_OPENNI_DEPTH_MAP);

capture.retrieve(_color, CV_CAP_OPENNI_BGR_IMAGE);

  cv::imshow("color", _color);
cv::imshow("depth", _depth);

cv::waitKey(10);
}