PeopleDetector(ros::NodeHandle& nh, std::string& model_file, std::string& rgb_camera_topic, std::string& depth_camera_topic, std::string& tracker_frame) : nh_(nh), it_(nh) { tracker_frame_ = tracker_frame; resource_retriever::Retriever retver; resource_retriever::MemoryResource resource; try { resource = retver.get("package://people_identifier/data/" + model_file); } catch (resource_retriever::Exception& e) { printf("Resource retriever failed to find the file!\n"); } FILE * tempfile = fopen("tmp_model.xml", "w"); fwrite(resource.data.get(), resource.size, 1, tempfile); fclose(tempfile); detector = cvLoadLatentSvmDetector("tmp_model.xml"); if (!detector) { printf("Unable to load the model file?!\n"); fflush(stdout); exit(1); } iscalibrated = 0; tracking_pub_ = nh_.advertise<person_tracker::TrackerState>("tracker_state", 100); image_sub_ = it_.subscribe(rgb_camera_topic, 1, &PeopleDetector::imageCb, this); depth_sub_ = it_.subscribe(depth_camera_topic, 1, &PeopleDetector::depthCb, this); cv::namedWindow(COLORWINDOW); ROS_INFO("Startup complete"); }
bool LatentSvmDetector::load( const std::vector<String>& filenames, const std::vector<String>& _classNames ) { clear(); CV_Assert( _classNames.empty() || _classNames.size() == filenames.size() ); for( size_t i = 0; i < filenames.size(); i++ ) { const String filename = filenames[i]; if( filename.length() < 5 || filename.substr(filename.length()-4, 4) != ".xml" ) continue; CvLatentSvmDetector* detector = cvLoadLatentSvmDetector( filename.c_str() ); if( detector ) { detectors.push_back( detector ); if( _classNames.empty() ) { classNames.push_back( extractModelName(filenames[i]) ); } else classNames.push_back( _classNames[i] ); } } return !empty(); }