void object_recognition_core::db::DummyDocument::set_attachment<cv::linemod::Detector>(const AttachmentName& attachment_name, const cv::linemod::Detector& value) { // First write the class to a file std::string file_name = temporary_yml_file_name(true); { cv::FileStorage fs(file_name, cv::FileStorage::WRITE); value.write(fs); std::vector < std::string > ids = value.classIds(); fs << "classes" << "["; for (int i = 0; i < (int) ids.size(); ++i) { fs << "{"; value.writeClass(ids[i], fs); fs << "}"; // current class } fs << "]"; // classes fs.release(); } // Read the file as a stream std::ifstream reader(file_name.c_str()); std::stringstream out; out << reader.rdbuf(); set_attachment_stream(attachment_name, out, MIME_TYPE); boost::filesystem::remove(file_name.c_str()); }
void object_recognition_core::db::Document::get_attachment<shape_msgs::Mesh>( const AttachmentName &attachment_name, shape_msgs::Mesh &value) const { // Get the binary file std::string file_name = temporary_yml_file_name(false); std::stringstream ss; this->get_attachment_stream(attachment_name, ss, MIME_TYPE); // Write it to disk std::ofstream writer(file_name.c_str()); writer << ss.rdbuf() << std::flush; // Read it //value.read(file_name); //boost::filesystem::remove(file_name.c_str()); }
void yaml2mats(std::map<std::string, cv::Mat>& mm,std::istream& in, bool do_gzip) { std::string fname = temporary_yml_file_name(do_gzip); { std::ofstream writer(fname.c_str()); writer << in.rdbuf(); } { cv::FileStorage fs(fname, cv::FileStorage::READ); typedef std::pair<std::string, cv::Mat> pair_t; BOOST_FOREACH(const pair_t& x, mm) { fs[x.first] >> mm[x.first]; } }
void object_recognition_core::db::Document::get_attachment<transpod::PoseEstimator>(const AttachmentName &attachment_name, transpod::PoseEstimator &value) const { // Get the binary file std::string file_name = temporary_yml_file_name(true); std::stringstream ss; this->get_attachment_stream(attachment_name, ss, MIME_TYPE); // Write it to disk std::ofstream writer(file_name.c_str()); writer << ss.rdbuf() << std::flush; // Read it value.read(file_name); boost::filesystem::remove(file_name.c_str()); }
void object_recognition_core::db::DummyDocument::get_attachment<std::vector<cv::Mat> >(const AttachmentName& attachment_name, std::vector<cv::Mat> &value) const { // Get the binary file std::string file_name = temporary_yml_file_name(false); std::stringstream ss; this->get_attachment_stream(attachment_name, ss, MIME_TYPE); // Write it to disk std::ofstream writer(file_name.c_str()); writer << ss.rdbuf() << std::flush; // Read it cv::FileStorage fs(file_name, cv::FileStorage::READ); cv::FileNode matrices = fs["matrices"]; matrices >> value; boost::filesystem::remove(file_name.c_str()); }
void object_recognition_core::db::Document::set_attachment<transpod::PoseEstimator>(const AttachmentName &attachment_name, const transpod::PoseEstimator &value) { // First write the class to a file std::string file_name = temporary_yml_file_name(true); { cv::FileStorage fs(file_name, cv::FileStorage::WRITE); value.write(fs); fs.release(); } // Read the file as a stream std::ifstream reader(file_name.c_str()); std::stringstream out; out << reader.rdbuf(); set_attachment_stream(attachment_name, out, MIME_TYPE); boost::filesystem::remove(file_name.c_str()); }
void object_recognition_core::db::DummyDocument::set_attachment<std::vector<cv::Mat> >(const AttachmentName& attachment_name, const std::vector<cv::Mat>& value) { // First write the class to a file std::string file_name = temporary_yml_file_name(false); { cv::FileStorage fs(file_name, cv::FileStorage::WRITE); fs << "matrices" << value; fs.release(); } // Read the file as a stream std::ifstream reader(file_name.c_str()); std::stringstream out; out << reader.rdbuf(); set_attachment_stream(attachment_name, out, MIME_TYPE); boost::filesystem::remove(file_name.c_str()); }
void object_recognition_core::db::DummyDocument::get_attachment<cv::linemod::Detector>(const AttachmentName& attachment_name, cv::linemod::Detector& value) const { // Get the binary file std::string file_name = temporary_yml_file_name(true); std::stringstream ss; this->get_attachment_stream(attachment_name, ss, MIME_TYPE); // Write it to disk std::ofstream writer(file_name.c_str()); writer << ss.rdbuf() << std::flush; // Read it cv::FileStorage fs(file_name, cv::FileStorage::READ); value.read(fs.root()); cv::FileNode fn = fs["classes"]; for (cv::FileNodeIterator i = fn.begin(), iend = fn.end(); i != iend; ++i) value.readClass(*i); // Delete the tmp file boost::filesystem::remove(file_name.c_str()); }