void ntk::MultipleGrabber::onImageUpdated(EventBroadcaster *sender) { RGBDGrabber* grabber = dynamic_cast<RGBDGrabber*>(sender); int grabber_index = 0; while (m_grabbers[grabber_index] != grabber) ++grabber_index; m_all_grabbers_updated_mutex.lock(); grabber->copyImageTo(m_temp_grabbed_images[grabber_index]); m_updated_grabbers.insert(grabber); if (m_updated_grabbers.size() == m_grabbers.size()) { m_all_grabbers_updated_condition.wakeAll(); } else if (m_disconnect_alternatively) { m_grabbers[grabber_index]->stop(); m_grabbers[grabber_index]->disconnectFromDevice(); for (int i = 0; i < m_grabbers.size(); ++i) { if (m_updated_grabbers.find(m_grabbers[i]) == m_updated_grabbers.end()) { m_grabbers[i]->connectToDevice(); m_grabbers[i]->start(); break; } } } m_all_grabbers_updated_mutex.unlock(); }
int main (int argc, char** argv) { arg_base::set_help_option("-h"); arg_parse(argc, argv); ntk_debug_level = opt::debug_level(); cv::setBreakOnError(true); QApplication app (argc, argv); // Config dir is supposed to be next to the binaries. QDir prev_dir = QDir::current(); QDir::setCurrent(QApplication::applicationDirPath()); MultipleGrabber* multi_grabber = new MultipleGrabber(); MultiKinectScanner scanner; RGBDGrabberFactory& grabber_factory = RGBDGrabberFactory::instance(); RGBDGrabberFactory::Params params; if (opt::directory()) params.directory = opt::directory(); if (opt::openni()) params.default_type = RGBDGrabberFactory::OPENNI; if (opt::freenect()) params.default_type = RGBDGrabberFactory::FREENECT; if (opt::kin4win()) params.default_type = RGBDGrabberFactory::KIN4WIN; if (opt::softkinetic()) params.default_type = RGBDGrabberFactory::SOFTKINETIC; if (opt::pmd()) params.default_type = RGBDGrabberFactory::PMD; if (opt::calibration_dir()) params.calibration_dir = opt::calibration_dir(); if (opt::high_resolution()) params.high_resolution = true; if (opt::no_registration()) params.hardware_registration = false; if (opt::sync()) params.synchronous = true; std::vector<RGBDGrabberFactory::GrabberData> grabbers; grabbers = grabber_factory.createGrabbers(params); ntk_dbg_print(grabbers.size(), 1); for (int i = 0; i < grabbers.size(); ++i) { RGBDGrabber* grabber = grabbers[i].grabber; bool ok = grabber->connectToDevice(); if (!ok) { ntk_dbg(0) << "WARNING: connectToDevice failed."; continue; } multi_grabber->addGrabber(grabber); scanner.addGrabber(grabber); } QDir::setCurrent(prev_dir.absolutePath()); GuiMultiKinectController* controller = new GuiMultiKinectController(&scanner); if (opt::bbox()) { ntk::Rect3f bbox = readBoundingBoxFromYamlFile(opt::bbox()); controller->setBoundingBox(bbox, true); } scanner.plugController(controller); controller->scanner().calibratorBlock().setCalibrationPattern(0.034, 10, 7); if (opt::sync()) controller->scanner().setPaused(true); scanner.start(); return app.exec(); }
int main (int argc, char** argv) { arg_base::set_help_option("-h"); arg_parse(argc, argv); ntk_debug_level = opt::debug_level(); cv::setBreakOnError(true); QApplication::setGraphicsSystem("raster"); QApplication app (argc, argv); const char* fake_dir = opt::image(); bool is_directory = opt::directory() != 0; if (opt::directory()) fake_dir = opt::directory(); ntk::RGBDProcessor* processor = 0; RGBDGrabber* grabber = 0; #ifdef NESTK_USE_OPENNI OpenniDriver* ni_driver = 0; #endif bool use_openni = !opt::freenect(); #ifndef NESTK_USE_OPENNI use_openni = false; #endif if (opt::image() || opt::directory()) { std::string path = opt::image() ? opt::image() : opt::directory(); FileGrabber* file_grabber = new FileGrabber(path, opt::directory() != 0); grabber = file_grabber; } #ifdef NESTK_USE_OPENNI else if (use_openni) { // Config dir is supposed to be next to the binaries. QDir prev = QDir::current(); QDir::setCurrent(QApplication::applicationDirPath()); if (!ni_driver) ni_driver = new OpenniDriver(); OpenniGrabber* k_grabber = new OpenniGrabber(*ni_driver); k_grabber->setTrackUsers(false); // k_grabber->setCustomBayerDecoding(true); if (opt::high_resolution()) k_grabber->setHighRgbResolution(true); k_grabber->initialize(); QDir::setCurrent(prev.absolutePath()); grabber = k_grabber; } #endif #ifdef NESTK_USE_FREENECT else { FreenectGrabber* k_grabber = new FreenectGrabber(); k_grabber->initialize(); k_grabber->setIRMode(false); grabber = k_grabber; } #endif ntk_ensure(grabber, "Could not create any grabber. Kinect support built?"); if (use_openni) { processor = new ntk::OpenniRGBDProcessor(); } else { processor = new ntk::FreenectRGBDProcessor(); } if (opt::sync()) grabber->setSynchronous(true); RGBDFrameRecorder frame_recorder (opt::dir_prefix()); frame_recorder.setSaveOnlyRaw(false); ntk::RGBDCalibration* calib_data = 0; if (opt::calibration_file()) { calib_data = new RGBDCalibration(); calib_data->loadFromFile(opt::calibration_file()); } else if (use_openni) { calib_data = grabber->calibrationData(); } else if (QDir::current().exists("kinect_calibration.yml")) { { ntk_dbg(0) << "[WARNING] Using kinect_calibration.yml in current directory"; ntk_dbg(0) << "[WARNING] use --calibration to specify a different file."; } calib_data = new RGBDCalibration(); calib_data->loadFromFile("kinect_calibration.yml"); } ntk_ensure(calib_data, "You must specify a calibration file (--calibration)"); grabber->setCalibrationData(*calib_data); GuiController gui_controller (*grabber, *processor); grabber->addEventListener(&gui_controller); gui_controller.setFrameRecorder(frame_recorder); if (opt::sync()) gui_controller.setPaused(true); SurfelsRGBDModeler modeler; modeler.setMinViewsPerSurfel(1); processor->setFilterFlag(RGBDProcessorFlags::ComputeNormals, 1); processor->setMaxNormalAngle(90); processor->setFilterFlag(RGBDProcessorFlags::ComputeMapping, true); ModelAcquisitionController* acq_controller = 0; acq_controller = new ModelAcquisitionController (gui_controller, modeler); IncrementalPoseEstimatorFromImage* pose_estimator = 0; // FeatureSetParams params ("FAST", "BRIEF64", true); FeatureSetParams params ("SURF", "SURF64", true); pose_estimator = new IncrementalPoseEstimatorFromRgbFeatures(params, opt::use_icp()); acq_controller->setPoseEstimator(pose_estimator); gui_controller.setModelAcquisitionController(*acq_controller); grabber->start(); app.exec(); delete acq_controller; }
int main (int argc, char** argv) { arg_base::set_help_option("-h"); arg_parse(argc, argv); ntk_debug_level = 1; cv::setBreakOnError(true); QApplication::setGraphicsSystem("raster"); QApplication app (argc, argv); const char* fake_dir = opt::image(); bool is_directory = opt::directory() != 0; if (opt::directory()) fake_dir = opt::directory(); ntk::RGBDProcessor* processor = 0; RGBDGrabber* grabber = 0; bool use_openni = !opt::freenect(); #ifndef USE_OPENNI use_openni = false; #endif if (opt::image() || opt::directory()) { std::string path = opt::image() ? opt::image() : opt::directory(); FileGrabber* file_grabber = new FileGrabber(path, opt::directory() != 0); grabber = file_grabber; } else if (use_openni) { NiteRGBDGrabber* k_grabber = new NiteRGBDGrabber(); if (opt::high_resolution()) k_grabber->setHighRgbResolution(true); k_grabber->initialize(); grabber = k_grabber; } else { KinectGrabber* k_grabber = new KinectGrabber(); k_grabber->initialize(); k_grabber->setIRMode(false); grabber = k_grabber; } if (use_openni) { processor = new ntk::NiteProcessor(); } else { processor = new ntk::KinectProcessor(); } if (opt::sync()) grabber->setSynchronous(true); RGBDFrameRecorder frame_recorder (opt::dir_prefix()); frame_recorder.setSaveOnlyRaw(false); ntk::RGBDCalibration* calib_data = 0; if (use_openni) { calib_data = grabber->calibrationData(); } else if (opt::calibration_file()) { calib_data = new RGBDCalibration(); calib_data->loadFromFile(opt::calibration_file()); } else if (QDir::current().exists("kinect_calibration.yml")) { { ntk_dbg(0) << "[WARNING] Using kinect_calibration.yml in current directory"; ntk_dbg(0) << "[WARNING] use --calibration to specify a different file."; } calib_data = new RGBDCalibration(); calib_data->loadFromFile("kinect_calibration.yml"); } ntk_ensure(calib_data, "You must specify a calibration file (--calibration)"); grabber->setCalibrationData(*calib_data); GuiController gui_controller (*grabber, *processor); grabber->addEventListener(&gui_controller); gui_controller.setFrameRecorder(frame_recorder); if (opt::sync()) gui_controller.setPaused(true); SurfelsRGBDModeler modeler; modeler.setMinViewsPerSurfel(1); processor->setFilterFlag(RGBDProcessor::ComputeNormals, 1); processor->setMaxNormalAngle(90); ModelAcquisitionController* acq_controller = 0; acq_controller = new ModelAcquisitionController (gui_controller, modeler); RelativePoseEstimator* pose_estimator = 0; FeatureSetParams params ("FAST", "BRIEF64", true); pose_estimator = new RelativePoseEstimatorFromImage(params); acq_controller->setPoseEstimator(pose_estimator); gui_controller.setModelAcquisitionController(*acq_controller); grabber->start(); app.exec(); delete acq_controller; }
int main (int argc, char** argv) { arg_base::set_help_option("-h"); arg_parse(argc, argv); ntk_debug_level = opt::debug_level(); cv::setBreakOnError(true); QApplication::setGraphicsSystem("raster"); QApplication app (argc, argv); RGBDGrabberFactory grabber_factory; RGBDGrabberFactory::Params params; if (opt::directory()) params.directory = opt::directory(); if (opt::openni()) params.default_type = RGBDGrabberFactory::OPENNI; if (opt::freenect()) params.default_type = RGBDGrabberFactory::FREENECT; if (opt::kin4win()) params.default_type = RGBDGrabberFactory::KIN4WIN; if (opt::softkinetic()) params.default_type = RGBDGrabberFactory::SOFTKINETIC; if (opt::pmd()) params.default_type = RGBDGrabberFactory::PMD; if (opt::calibration_file()) params.calibration_file = opt::calibration_file(); if (opt::high_resolution()) params.high_resolution = true; if (opt::sync()) params.synchronous = true; std::vector<RGBDGrabberFactory::GrabberData> grabbers; grabbers = grabber_factory.createGrabbers(params); if (grabbers.size() < 1) { QMessageBox::critical(0, "Fatal error", "Cannot connect to any RGBD device.\n\nPlease check that it is correctly plugged to the computer."); return 1; } RGBDGrabber* grabber = grabbers[0].grabber; RGBDProcessor* processor = grabbers[0].processor; bool ok = grabber->connectToDevice(); if (!ok) { ntk_dbg(0) << "WARNING: connectToDevice failed."; return 1; } RGBDFrameRecorder frame_recorder (opt::dir_prefix()); frame_recorder.setFrameIndex(opt::first_index()); frame_recorder.setSaveOnlyRaw(true); frame_recorder.setUseBinaryRaw(true); frame_recorder.setSavePCLPointCloud(opt::savePCD()); ObjectDetector detector; MeshGenerator* mesh_generator = 0; ntk::RGBDCalibrationPtr calib_data = grabber->calibrationData(); if (calib_data) { mesh_generator = new MeshGenerator(); } GuiController gui_controller (*grabber, *processor); grabber->addEventListener(&gui_controller); gui_controller.setFrameRecorder(frame_recorder); gui_controller.setObjectDetector(detector); if (opt::sync()) gui_controller.setPaused(true); if (mesh_generator) { mesh_generator->setUseColor(true); gui_controller.setMeshGenerator(*mesh_generator); } grabber->start(); app.exec(); delete mesh_generator; }
int main (int argc, char** argv) { arg_base::set_help_option("-h"); arg_parse(argc, argv); ntk_debug_level = opt::debug_level(); cv::setBreakOnError(true); QApplication::setGraphicsSystem("raster"); QApplication app (argc, argv); RGBDGrabberFactory& grabber_factory = RGBDGrabberFactory::instance(); RGBDGrabberFactory::Params params; if (opt::directory()) params.directory = opt::directory(); if (opt::openni()) params.default_type = RGBDGrabberFactory::OPENNI; if (opt::freenect()) params.default_type = RGBDGrabberFactory::FREENECT; if (opt::kin4win()) params.default_type = RGBDGrabberFactory::KIN4WIN; if (opt::softkinetic()) params.default_type = RGBDGrabberFactory::SOFTKINETIC; if (opt::pmd()) params.default_type = RGBDGrabberFactory::PMD; if (opt::calibration_file()) params.calibration_file = opt::calibration_file(); if (opt::sync()) params.synchronous = true; std::vector<RGBDGrabberFactory::GrabberData> grabbers; grabbers = grabber_factory.createGrabbers(params); if (grabbers.size() < 1) { QMessageBox::critical(0, "Fatal error", "Cannot connect to any RGBD device.\n\nPlease check that it is correctly plugged to the computer."); return 1; } RGBDGrabber* grabber = grabbers[0].grabber; RGBDProcessor* rgbd_processor = grabbers[0].processor; bool ok = grabber->connectToDevice(); if (!ok) { ntk_dbg(0) << "WARNING: connectToDevice failed."; return 1; } rgbd_processor->setMaxNormalAngle(40); rgbd_processor->setFilterFlag(RGBDProcessorFlags::ComputeMapping, true); rgbd_processor->setFilterFlag(RGBDProcessorFlags::FilterThresholdDepth, true); rgbd_processor->setMinDepth(0.05f); rgbd_processor->setMaxDepth(1.5f); MeshGenerator* mesh_generator = 0; ntk::RGBDCalibrationPtr calib_data = grabber->calibrationData(); if (calib_data) { mesh_generator = new MeshGenerator(); } RGBDFrameRecorder frame_recorder (opt::dir_prefix()); frame_recorder.setFrameIndex(opt::first_index()); frame_recorder.setSaveOnlyRaw(true); frame_recorder.setUseBinaryRaw(true); GuiController gui_controller (*grabber, *rgbd_processor); grabber->addEventListener(&gui_controller); gui_controller.setFrameRecorder(frame_recorder); if (opt::sync()) gui_controller.setPaused(true); TableObjectRGBDModeler modeler; modeler.setDepthFilling(true); modeler.setRemoveSmallStructures(true); ModelAcquisitionController* acq_controller = 0; acq_controller = new ModelAcquisitionController (gui_controller, modeler); acq_controller->setPaused(true); IncrementalPoseEstimatorFromImage* pose_estimator = new DummyIncrementalPoseEstimator(); acq_controller->setPoseEstimator(pose_estimator); gui_controller.setModelAcquisitionController(*acq_controller); if (mesh_generator) gui_controller.setMeshGenerator(*mesh_generator); grabber->start(); app.exec(); delete mesh_generator; delete acq_controller; }
int main (int argc, char** argv) { arg_base::set_help_option("-h"); arg_parse(argc, argv); ntk_debug_level = opt::debug_level(); cv::setBreakOnError(true); QApplication::setGraphicsSystem("raster"); QApplication app (argc, argv); // Opening cameras. Its important to remember that CvCapture has to be done // before PMD otherwise will crash // 1.- Logitech (openCV) // 2.- PMD (pmdlibrary) const char* fake_dir = opt::image(); bool is_directory = opt::directory() != 0; if (opt::directory()) fake_dir = opt::directory(); ntk::RGBDProcessor* rgbd_processor = 0; RGBDGrabber* grabber = 0; #ifdef NESTK_USE_OPENNI OpenniDriver* ni_driver = 0; #endif bool use_openni = false; if (opt::use_kinect()) { #ifdef NESTK_USE_OPENNI if (opt::use_freenect()) { rgbd_processor = new FreenectRGBDProcessor(); } else { rgbd_processor = new OpenniRGBDProcessor(); use_openni = true; } #else rgbd_processor = new FreenectRGBDProcessor(); #endif } else { rgbd_processor = new RGBDProcessor(); } rgbd_processor->setMaxNormalAngle(40); rgbd_processor->setFilterFlag(RGBDProcessor::ComputeMapping, true); rgbd_processor->setFilterFlag(RGBDProcessor::FilterThresholdDepth, true); rgbd_processor->setMinDepth(0.3); rgbd_processor->setMaxDepth(1.5); if (opt::image() || opt::directory()) { std::string path = opt::image() ? opt::image() : opt::directory(); FileGrabber* file_grabber = new FileGrabber(path, is_directory); grabber = file_grabber; // Image are saved with flipping applied. rgbd_processor->setFilterFlag(RGBDProcessor::FlipColorImage, false); } else if (opt::use_kinect()) { if (opt::use_freenect()) { #ifdef NESTK_USE_FREENECT FreenectGrabber* k_grabber = new FreenectGrabber(); k_grabber->initialize(); k_grabber->setIRMode(false); grabber = k_grabber; #else fatal_error("Freenect support not built."); #endif } else { #ifdef NESTK_USE_OPENNI // Config dir is supposed to be next to the binaries. QDir prev = QDir::current(); QDir::setCurrent(QApplication::applicationDirPath()); if (!ni_driver) ni_driver = new OpenniDriver(); OpenniGrabber* k_grabber = new OpenniGrabber(*ni_driver); k_grabber->setTrackUsers(false); if (opt::high_resolution()) k_grabber->setHighRgbResolution(true); k_grabber->initialize(); QDir::setCurrent(prev.absolutePath()); grabber = k_grabber; #else fatal_error("OpenNI support not built, try --freenect."); #endif } } else { ntk_assert(0, "PMDSDK support not enabled."); } MeshGenerator* mesh_generator = 0; ntk::RGBDCalibration* calib_data = 0; if (opt::calibration_file()) { calib_data = new RGBDCalibration(); calib_data->loadFromFile(opt::calibration_file()); } else if (use_openni) { calib_data = grabber->calibrationData(); } if (calib_data) { mesh_generator = new MeshGenerator(); grabber->setCalibrationData(*calib_data); } if (opt::sync()) grabber->setSynchronous(true); RGBDFrameRecorder frame_recorder (opt::dir_prefix()); frame_recorder.setFrameIndex(opt::first_index()); frame_recorder.setSaveOnlyRaw(true); frame_recorder.setUseBinaryRaw(true); GuiController gui_controller (*grabber, *rgbd_processor); grabber->addEventListener(&gui_controller); gui_controller.setFrameRecorder(frame_recorder); if (opt::sync()) gui_controller.setPaused(true); TableObjectRGBDModeler modeler; modeler.setDepthFilling(true); modeler.setRemoveSmallStructures(true); ModelAcquisitionController* acq_controller = 0; acq_controller = new ModelAcquisitionController (gui_controller, modeler); acq_controller->setPaused(true); RelativePoseEstimator* pose_estimator = new DummyRelativePoseEstimator(); acq_controller->setPoseEstimator(pose_estimator); gui_controller.setModelAcquisitionController(*acq_controller); if (mesh_generator) gui_controller.setMeshGenerator(*mesh_generator); grabber->start(); app.exec(); delete mesh_generator; delete acq_controller; }
int main(int argc, char *argv[]) { // Create kinect node ros::init(argc, argv, "kinectListenner"); RGBDGrabber grabber; ros::NodeHandle n("~"); // ros::Subscriber sub = n.subscribe("/camera/depth_registered/points", 2, &DataCompressionNode::pointCloudCallback, &dataCompressor); ros::Subscriber sub2 = n.subscribe("/camera/rgb/image_color", 10, &RGBDGrabber::colorImageCallback, &grabber); ros::Subscriber sub3 = n.subscribe("/camera/depth_registered/image_rect_raw", 10, &RGBDGrabber::depthImageCallback, &grabber); ros::Rate loop_rate(10); bool saveMismatched= true; n.getParam("saveMismatched", saveMismatched); std::cout<<"------------------------- RGBD_GRABBER started -----------------------------"<<std::endl; grabber.setSaveMismatchedImages(saveMismatched); if (saveMismatched) { std::cout<<"--------------- RGBDGrabber will save mismatched images. You will get all the frames. ---------------- "<<std::endl; } else { std::cout<<"--------------- RGBDGrabber will NOT save mismatched images. You might miss some frames. ---------------- "<<std::endl; } bool loop = true; while (ros::ok() && loop) { int ch = keyPressed(); // std::cout<<ch<<std::endl; switch (ch) { case 113: // key q { std::cout<<"------------------------- Exitting program -----------------------------"<<std::endl; loop = false; break; } case 115: // key s { grabber.setSaveOneFrame(true); std::cout<<"------------------------- Saving a frame -----------------------------"<<std::endl; break; } case 97: // key a { grabber.setSaveFrameSeq(true); std::cout<<"------------------------- Saving frame sequence-----------------------------"<<std::endl; break; } case 122: // key z { grabber.setSaveFrameSeq(false); std::cout<<"------------------------- Stopping saving -----------------------------"<<std::endl; break; } case 110: // key n { grabber.createNewFolder(); std::string folderName = grabber.getFolderName(); std::cout<<"------------------------- Created new folder "<<folderName<<"-----------------------------"<<std::endl; break; } case 105: // key i { grabber.increaseFrameSkip(); std::cout<<"------------------------- Frameskip increased to "<<grabber.getFrameSkip()<<"-----------------------------"<<std::endl; break; } case 117: // key u { grabber.decreaseFrameSkip(); std::cout<<"------------------------- Frameskip decreased to "<<grabber.getFrameSkip()<<"-----------------------------"<<std::endl; break; } case 0: break; default: break; } ros::spinOnce(); loop_rate.sleep(); } }
int main (int argc, char** argv) { arg_base::set_help_option("-h"); arg_parse(argc, argv); ntk_debug_level = opt::debug_level(); cv::setBreakOnError(true); QApplication::setGraphicsSystem("raster"); QApplication app (argc, argv); const char* fake_dir = opt::image(); bool is_directory = opt::directory() != 0; if (opt::directory()) fake_dir = opt::directory(); ntk::RGBDProcessor* processor = 0; #ifdef NESTK_USE_OPENNI OpenniDriver* ni_driver = 0; #endif RGBDGrabber* grabber = 0; bool use_openni = !opt::freenect(); #ifndef NESTK_USE_OPENNI use_openni = false; #endif if (opt::image() || opt::directory()) { std::string path = opt::image() ? opt::image() : opt::directory(); FileGrabber* file_grabber = new FileGrabber(path, opt::directory() != 0); grabber = file_grabber; } #ifdef NESTK_USE_OPENNI else if (use_openni) { // Config dir is supposed to be next to the binaries. QDir prev = QDir::current(); QDir::setCurrent(QApplication::applicationDirPath()); if (!ni_driver) ni_driver = new OpenniDriver(); OpenniGrabber* k_grabber = new OpenniGrabber(*ni_driver); k_grabber->setTrackUsers(false); if (opt::high_resolution()) k_grabber->setHighRgbResolution(true); k_grabber->initialize(); QDir::setCurrent(prev.absolutePath()); grabber = k_grabber; } #endif #ifdef NESTK_USE_FREENECT else { FreenectGrabber* k_grabber = new FreenectGrabber(); k_grabber->initialize(); k_grabber->setIRMode(false); grabber = k_grabber; } #endif ntk_ensure(grabber, "Could not create any grabber. Kinect support built?"); if (use_openni) { processor = new ntk::OpenniRGBDProcessor(); } else { processor = new ntk::FreenectRGBDProcessor(); } processor->setFilterFlag(RGBDProcessor::FilterEdges, true); if (opt::sync()) grabber->setSynchronous(true); RGBDFrameRecorder frame_recorder (opt::dir_prefix()); frame_recorder.setSaveOnlyRaw(false); ntk::RGBDCalibration* calib_data = 0; if (opt::calibration_file()) { calib_data = new RGBDCalibration(); calib_data->loadFromFile(opt::calibration_file()); } else if (use_openni) { calib_data = grabber->calibrationData(); } else if (QDir::current().exists("kinect_calibration.yml")) { { ntk_dbg(0) << "[WARNING] Using kinect_calibration.yml in current directory"; ntk_dbg(0) << "[WARNING] use --calibration to specify a different file."; } calib_data = new RGBDCalibration(); calib_data->loadFromFile("kinect_calibration.yml"); } ntk_ensure(calib_data, "You must specify a calibration file (--calibration)"); grabber->setCalibrationData(*calib_data); PeopleTrackerParameters tracker_parameters; tracker_parameters.loadFromYamlFile(opt::tracker_config()); PeopleTracker tracker (tracker_parameters); GuiController gui_controller (*grabber, *processor, tracker); grabber->addEventListener(&gui_controller); gui_controller.setFrameRecorder(frame_recorder); if (opt::sync()) gui_controller.setPaused(true); grabber->start(); app.exec(); }