bool SetupImage(xn::Context& g_context) { XnStatus nRetVal = XN_STATUS_OK; fprintf(stderr,"Setting up the image generator\n"); if ((nRetVal = g_image.Create(g_context))!= XN_STATUS_OK) { printf("Could not create depth generator: %s\n", xnGetStatusString(nRetVal)); return FALSE; } if ((nRetVal = g_context.FindExistingNode(XN_NODE_TYPE_IMAGE, g_image)) != XN_STATUS_OK) { fprintf(stderr,"Could not find image sensor: %s\n", xnGetStatusString(nRetVal)); return FALSE; } XnMapOutputMode mapMode; mapMode.nXRes = XN_VGA_X_RES; mapMode.nYRes = XN_VGA_Y_RES; mapMode.nFPS = 30; if ((nRetVal = g_image.SetMapOutputMode(mapMode)) != XN_STATUS_OK) { fprintf(stderr,"Could not set image mode: %s\n", xnGetStatusString(nRetVal)); return FALSE; } return TRUE; }
bool CvCapture_OpenNI::setImageGeneratorProperty( int propIdx, double propValue ) { bool isSet = false; if( !imageGenerator.IsValid() ) return isSet; switch( propIdx ) { case CV_CAP_PROP_OPENNI_OUTPUT_MODE : { XnMapOutputMode mode; switch( cvRound(propValue) ) { case CV_CAP_OPENNI_VGA_30HZ : mode.nXRes = XN_VGA_X_RES; mode.nYRes = XN_VGA_Y_RES; mode.nFPS = 30; break; case CV_CAP_OPENNI_SXGA_15HZ : mode.nXRes = XN_SXGA_X_RES; mode.nYRes = XN_SXGA_Y_RES; mode.nFPS = 15; break; case CV_CAP_OPENNI_SXGA_30HZ : mode.nXRes = XN_SXGA_X_RES; mode.nYRes = XN_SXGA_Y_RES; mode.nFPS = 30; break; case CV_CAP_OPENNI_QVGA_30HZ : mode.nXRes = XN_QVGA_X_RES; mode.nYRes = XN_QVGA_Y_RES; mode.nFPS = 30; break; case CV_CAP_OPENNI_QVGA_60HZ : mode.nXRes = XN_QVGA_X_RES; mode.nYRes = XN_QVGA_Y_RES; mode.nFPS = 60; break; default : CV_Error( CV_StsBadArg, "Unsupported image generator output mode.\n"); } XnStatus status = imageGenerator.SetMapOutputMode( mode ); if( status != XN_STATUS_OK ) std::cerr << "CvCapture_OpenNI::setImageGeneratorProperty : " << xnGetStatusString(status) << std::endl; else isSet = true; break; } default: { std::stringstream ss; ss << "Image generator does not support such parameter (propIdx=" << propIdx << ") for setting.\n"; CV_Error( CV_StsBadArg, ss.str().c_str() ); } } return isSet; }
XnStatus ConfigureGenerators(const RecConfiguration& config, xn::Context& context, xn::DepthGenerator& depthGenerator, xn::ImageGenerator& imageGenerator) { XnStatus nRetVal = XN_STATUS_OK; xn::EnumerationErrors errors; // Configure the depth, if needed if (config.bRecordDepth) { nRetVal = context.CreateAnyProductionTree(XN_NODE_TYPE_DEPTH, NULL, depthGenerator, &errors); CHECK_RC_ERR(nRetVal, "Create Depth", errors); nRetVal = depthGenerator.SetMapOutputMode(*config.pDepthMode); CHECK_RC(nRetVal, "Set Mode"); if (config.bMirrorIndicated && depthGenerator.IsCapabilitySupported(XN_CAPABILITY_MIRROR)) { depthGenerator.GetMirrorCap().SetMirror(config.bMirror); } // Set Hole Filter depthGenerator.SetIntProperty("HoleFilter", TRUE); } // Configure the image, if needed if (config.bRecordImage) { nRetVal = context.CreateAnyProductionTree(XN_NODE_TYPE_IMAGE, NULL, imageGenerator, &errors); CHECK_RC_ERR(nRetVal, "Create Image", errors); nRetVal = imageGenerator.SetMapOutputMode(*config.pImageMode); CHECK_RC(nRetVal, "Set Mode"); if (config.bMirrorIndicated && imageGenerator.IsCapabilitySupported(XN_CAPABILITY_MIRROR)) { imageGenerator.GetMirrorCap().SetMirror(config.bMirror); } } // Configuration for when there are both streams if (config.bRecordDepth && config.bRecordImage) { // Registration if (config.bRegister && depthGenerator.IsCapabilitySupported(XN_CAPABILITY_ALTERNATIVE_VIEW_POINT)) { nRetVal = depthGenerator.GetAlternativeViewPointCap().SetViewPoint(imageGenerator); CHECK_RC(nRetVal, "Registration"); } // Frame Sync if (config.bFrameSync && depthGenerator.IsCapabilitySupported(XN_CAPABILITY_FRAME_SYNC)) { if (depthGenerator.GetFrameSyncCap().CanFrameSyncWith(imageGenerator)) { nRetVal = depthGenerator.GetFrameSyncCap().FrameSyncWith(imageGenerator); CHECK_RC(nRetVal, "Frame sync"); } } } return XN_STATUS_OK; }
information() { RC(context.Init(), "Context Intialized"); XnMapOutputMode mode; mode.nXRes = XN_VGA_X_RES; mode.nYRes = XN_VGA_Y_RES; mode.nFPS = 30; RC(image.Create(context), "Create image buffer"); RC(image.SetMapOutputMode(mode), "Set image mode"); RC(depth.Create(context), "Create depth buffer"); RC(depth.SetMapOutputMode(mode), "Set depth mode"); xn::Query q; RC(q.AddSupportedCapability(XN_CAPABILITY_SKELETON), "Request skeleton"); try { RC(context.FindExistingNode(XN_NODE_TYPE_USER, user), "User generator"); } catch (...) { RC(user.Create(context), "Get skeleton!!!"); } // RC(user.Create(context, &q), "Get skeleton!!!"); // // xn::NodeInfoList il; // RC(context.EnumerateProductionTrees(XN_NODE_TYPE_USER, &q, il, NULL), // "Enumerate nodes"); // // xn::NodeInfo i = *il.Begin(); // RC(context.CreateProductionTree(i), "Create skeleton node"); // RC(i.GetInstance(user), "Get skeleton"); user.RegisterUserCallbacks(User_NewUser, NULL, NULL, hUserCallbacks); user.GetSkeletonCap().RegisterCalibrationCallbacks(UserCalibration_CalibrationStart, UserCalibration_CalibrationEnd, &user, hCalibrationCallbacks); if (user.GetSkeletonCap().NeedPoseForCalibration()) { if (!user.IsCapabilitySupported(XN_CAPABILITY_POSE_DETECTION)) { post("Pose required, but not supported\n"); } else { user.GetPoseDetectionCap().RegisterToPoseCallbacks(UserPose_PoseDetected, NULL, &user, hPoseCallbacks); user.GetSkeletonCap().GetCalibrationPose(g_strPose); user.GetSkeletonCap().SetSkeletonProfile(XN_SKEL_PROFILE_ALL); } } RC(context.StartGeneratingAll(), "Start generating data"); post("Kinect initialized!\n"); }
void InitialKinect() { //1. Initial Context mContext.Init(); // 2. Set Map_mode (建構函數已定義) mapMode.nXRes = 640; mapMode.nYRes = 480; mapMode.nFPS = 30; // 3.a Create Depth_Generator mDepthGenerator.Create( mContext ); mDepthGenerator.SetMapOutputMode( mapMode ); // 3.b Create Image_Generator mImageGenerator.Create( mContext ); mImageGenerator.SetMapOutputMode( mapMode ); // 4. Correct view port mDepthGenerator.GetAlternativeViewPointCap().SetViewPoint( mImageGenerator ); std::cout << "正確:KinectSensor Intial Correct!" << std::endl; }
bool DataCapture::initialise() { context_.Shutdown(); XnStatus rc = context_.Init(); if( rc != XN_STATUS_OK ) { std::cout << "Init: " << xnGetStatusString(rc) << std::endl; return false; } rc = depthGen_.Create(context_); if( rc != XN_STATUS_OK ) { std::cout << "depthGen.Create: " << xnGetStatusString(rc) << std::endl; return false; } rc = imageGen_.Create(context_); if( rc != XN_STATUS_OK ) { std::cout << "imageGen.Create: " << xnGetStatusString(rc) << std::endl; return false; } rc = imageGen_.SetPixelFormat(XN_PIXEL_FORMAT_RGB24); if( rc != XN_STATUS_OK ) { std::cout << "SetPixelFormat: " << xnGetStatusString(rc) << std::endl; return false; } XnMapOutputMode imgMode; imgMode.nXRes = 640; // XN_VGA_X_RES imgMode.nYRes = 480; // XN_VGA_Y_RES imgMode.nFPS = 30; rc = imageGen_.SetMapOutputMode(imgMode); if( rc != XN_STATUS_OK ) { std::cout << "image SetMapOutputMode: " << xnGetStatusString(rc) << std::endl; return false; } rc = depthGen_.SetMapOutputMode(imgMode); if( rc != XN_STATUS_OK ) { std::cout << "depth SetMapOutputMode: " << xnGetStatusString(rc) << std::endl; return false; } depthGen_.GetMetaData(depthMd_); std::cout << "Depth offset " << depthMd_.XOffset() << " " << depthMd_.YOffset() << std::endl; // set the depth image viewpoint depthGen_.GetAlternativeViewPointCap().SetViewPoint(imageGen_); // read off the depth camera field of view. This is the FOV corresponding to // the IR camera viewpoint, regardless of the alternative viewpoint settings. XnFieldOfView fov; rc = depthGen_.GetFieldOfView(fov); std::cout << "Fov: " << fov.fHFOV << " " << fov.fVFOV << std::endl; pDepthData_ = new char [640 * 480]; pRgbData_ = new char [640 * 480 * 3]; return true; }
int main(int argc, char **argv) { nRetVal = XN_STATUS_OK; /* Context initialisieren (Kameradaten) */ nRetVal = context.Init(); checkError("Fehler beim Initialisieren des Context", nRetVal)?0:exit(-1); /* Tiefengenerator erstellen */ nRetVal = depth.Create(context); checkError("Fehler beim Erstellen des Tiefengenerators", nRetVal)?0:exit(-1); /* Tiefengenerator einstellen */ XnMapOutputMode outputModeDepth; outputModeDepth.nXRes = 640; outputModeDepth.nYRes = 480; outputModeDepth.nFPS = 30; nRetVal = depth.SetMapOutputMode(outputModeDepth); checkError("Fehler beim Konfigurieren des Tiefengenerators", nRetVal)?0:exit(-1); /* Imagegenerator erstellen */ nRetVal = image.Create(context); checkError("Fehler beim Erstellen des Bildgenerators", nRetVal)?0:exit(-1); /* Imagegenerator einstellen */ XnMapOutputMode outputModeImage; outputModeImage.nXRes = 640; outputModeImage.nYRes = 480; outputModeImage.nFPS = 30; nRetVal = image.SetMapOutputMode(outputModeImage); checkError("Fehler beim Konfigurieren des Bildgenerators", nRetVal)?0:exit(-1); /* Starten der Generatoren - volle Kraft vorraus! */ nRetVal = context.StartGeneratingAll(); checkError("Fehler beim Starten der Generatoren", nRetVal)?0:exit(-1); /* Glut initialisieren */ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); glutInitWindowSize(WINDOW_SIZE_X, WINDOW_SIZE_Y); glutInitWindowPosition(300,150); win = glutCreateWindow("kinect-head-tracking"); glClearColor(0, 0, 0, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau glEnable(GL_DEPTH_TEST); //Tiefentest aktivieren glDepthFunc(GL_LEQUAL); // glEnable(GL_CULL_FACE); //Backface Culling aktivieren // glEnable(GL_ALPHA_TEST); // glAlphaFunc(GL_GEQUAL, 1); /* Texturen */ glGenTextures(1, &texture_rgb); glBindTexture(GL_TEXTURE_2D, texture_rgb); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glGenTextures(1, &texture_depth); glBindTexture(GL_TEXTURE_2D, texture_depth); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glutDisplayFunc(glut_display); glutIdleFunc(glut_idle); glutMouseFunc(glut_mouse); glutMotionFunc(glut_mouse_motion); glutKeyboardFunc(glut_keyboard); glutMainLoop(); return 0; }
bool OpenNIVideo::init() { //open the video //if you are using a device, you can open the device //if you are using video streaming, you can initialize the connection //if you are using video files, you can read the configuration, cache the data, etc. xn::EnumerationErrors errors; int resolutionX = 640; int resolutionY = 480; unsigned int FPS = 30; XnStatus nRetVal = XN_STATUS_OK; nRetVal = context.Init(); CHECK_RC(nRetVal, "context global init"); //xn::NodeInfoList list; //nRetVal = context.EnumerateProductionTrees(XN_NODE_TYPE_DEVICE, NULL, list, &errors); //CHECK_RC(nRetVal, "enumerate production tree"); // HandsGenerator hands; //UserGenerator user; //GestureGenerator gesture; //SceneAnalyzer scene; nRetVal = depth_generator.Create(context); CHECK_RC(nRetVal, "creating depth generator"); nRetVal = image_generator.Create(context); CHECK_RC(nRetVal, "creating image generator"); if(depth_generator.IsCapabilitySupported(XN_CAPABILITY_ALTERNATIVE_VIEW_POINT)) { nRetVal = depth_generator.GetAlternativeViewPointCap().SetViewPoint(image_generator); CHECK_RC(nRetVal, "creating registered image/depth generator"); } else { printf("WARNING: XN_CAPABILITY_ALTERNATIVE_VIEW_POINT not supported"); } if (depth_generator.IsCapabilitySupported(XN_CAPABILITY_FRAME_SYNC)) { if( depth_generator.GetFrameSyncCap().CanFrameSyncWith(image_generator)) { //nRetVal=depth.GetFrameSyncCap().FrameSyncWith(image); //CHECK_RC(nRetVal, "creating frame sync image/depth generator"); } } else { printf("WARNING: XN_CAPABILITY_FRAME_SYNC not supported"); } XnMapOutputMode mode = {resolutionX,resolutionY,FPS}; nRetVal = depth_generator.SetMapOutputMode(mode); CHECK_RC(nRetVal, "set output mode"); //NOT NEEDED IF SYNCHRO nRetVal = image_generator.SetMapOutputMode(mode); CHECK_RC(nRetVal, "set output mode"); _depthBufferShort=new unsigned short[resolutionX*resolutionY]; _depthBufferByte=new unsigned char[resolutionX*resolutionY]; //we need to create one video stream _videoStreamList.push_back(new osgART::VideoStream()); _videoStreamList[0]->allocateImage(resolutionX,resolutionY, 1, GL_RGB, GL_UNSIGNED_BYTE); //we need to create one video stream _videoStreamList.push_back(new osgART::VideoStream()); // _videoStreamList[1]->allocateImage(resolutionX,resolutionY, 1, GL_LUMINANCE, GL_FLOAT); _videoStreamList[1]->allocateImage(resolutionX,resolutionY, 1, GL_LUMINANCE, GL_UNSIGNED_BYTE); //_videoStreamList[1]->allocateImage(resolutionX,resolutionY, 1, GL_LUMINANCE, GL_UNSIGNED_SHORT); //_videoStreamList[1]->allocateImage(w, h, 1, GL_DEPTHCOMPONENT16, GL_UNSIGNED_BYTE); if (m_flip_vertical) { _videoStreamList[0]->flipVertical(); _videoStreamList[1]->flipVertical(); } if (m_flip_horizontal) { _videoStreamList[0]->flipHorizontal(); _videoStreamList[1]->flipHorizontal(); } return true; }
bool SetupPrimesense(void) { XnStatus nRetVal = XN_STATUS_OK; if ((nRetVal = g_context.Init()) != XN_STATUS_OK) { fprintf(stderr,"Could not init OpenNI context: %s\n", xnGetStatusString(nRetVal)); return FALSE; } if ((nRetVal = g_depth.Create(g_context))!= XN_STATUS_OK) { fprintf(stderr,"Could not create depth generator: %s\n", xnGetStatusString(nRetVal)); g_haveDepth = FALSE; } else if ((nRetVal = g_context.FindExistingNode(XN_NODE_TYPE_DEPTH, g_depth)) != XN_STATUS_OK) { fprintf(stderr,"Could not find depth sensor: %s\n", xnGetStatusString(nRetVal)); g_haveDepth = FALSE; } if ((nRetVal = g_image.Create(g_context))!= XN_STATUS_OK) { fprintf(stderr,"Could not create image generator: %s\n", xnGetStatusString(nRetVal)); g_haveImage = FALSE; } else if ((nRetVal = g_context.FindExistingNode(XN_NODE_TYPE_IMAGE, g_image)) != XN_STATUS_OK) { fprintf(stderr,"Could not find image sensor: %s\n", xnGetStatusString(nRetVal)); g_haveImage = FALSE; } if (!g_haveImage && !g_haveDepth) { fprintf(stderr,"Could not find either depth or image sources.\n"); return FALSE; } XnMapOutputMode mapMode; mapMode.nXRes = XN_VGA_X_RES; mapMode.nYRes = XN_VGA_Y_RES; mapMode.nFPS = 30; if (g_haveDepth && ( (nRetVal = g_depth.SetMapOutputMode(mapMode)) != XN_STATUS_OK)) { fprintf(stderr,"Could not set depth mode: %s\n", xnGetStatusString(nRetVal)); return FALSE; } if (g_haveDepth) { g_depth.GetMetaData(g_depthMD); g_depthWidth = g_depthMD.FullXRes(); g_depthHeight = g_depthMD.FullYRes(); } if (g_haveImage && (nRetVal = g_image.SetMapOutputMode(mapMode)) != XN_STATUS_OK) { fprintf(stderr,"Could not set image: %s\n", xnGetStatusString(nRetVal)); return FALSE; } if ((nRetVal = g_context.StartGeneratingAll()) != XN_STATUS_OK) { fprintf(stderr,"Could not start: %s\n", xnGetStatusString(nRetVal)); return FALSE; } return TRUE; }