从字符串加载 OpenCV 的 ML (SVM)
Load OpenCV's ML (SVM) from string
我目前正在开发一种基于机器学习的纹理分类算法,主要是支持向量机(SVM)。我能够在我的测试数据上获得一些非常好的结果,现在我想在生产环境中使用SVM。
在我的情况下,高效意味着它将在多个桌面和移动平台(即Android、iOS)上运行,并且总是在本地线程的深处运行。由于软件结构和平台的访问策略的原因,我无法从使用SVM的位置访问文件系统。然而,我的框架支持在允许访问文件系统的环境中读取文件,并将文件内容作为std::string传输到我的应用程序的SVM部分。
如何配置SVM的标准程序是使用文件名和OpenCV直接从文件中读取:
cv::SVM _svm;
_svm.load("/home/<usrname>/DEV/TrainSoftware/trained.cfg", "<trainSetName>");
我想要这个(基本上是从其他地方读取文件,并将文件的内容作为字符串传递给SVM):
cv::SVM _svm;
std::string trainedCfgContentStr="<get the content here>";
_svm.loadFromString(trainedCfgContentStr, "<trainSetName>") // This method is desired
我在OpenCV的文档或源代码中找不到任何可能的东西,但这不是第一个没有文档或广为人知的OpenCV功能。当然,我可以破解OpenCV源代码,并交叉编译到我的每个目标平台,但我会尽量避免这种情况,因为这是一项艰巨的工作,而且我很确信我不是第一个遇到这个问题的人。
所有想法(也是非传统的)和/或暗示都将受到高度赞赏!
只要你坚持使用c++api,FileStorage就可以从内存中读取:
string data_string; //containing xml/yml data
FileStorage fs( data_string, FileStorage::READ | FileStorage::MEMORY);
svm.read(fs.getFirstTopLevelNode()); // or the node with your trainset
(不幸的是,没有暴露于java)
相关文章:
- 在 SVM-Struct 中未定义对 sqrt 的引用(已使用 -lm)
- 使用 SVM 进行分类,使用来自 Bag of Word 的词汇构建
- SVM 规模:找不到命令
- 将svm分类器设置为HOG检测器
- SVM 训练时间是否取决于输入数据的内容?
- OPENCV 3.4.1获取经过定制训练的线性SVM HOG DETECTMULTISCALE的原始形式
- 如何使用 dlib 训练或合并多个 .svm 并检测多个类
- 如何在OPENCV 2.4.13中导入训练有素的SVM检测器
- 使用CV :: ML :: STATMODEL :: TRAIN使用KNN的OPENCV错误
- 如何使用2通道垫子中的OPENCV中使用SVM
- 如何在C++代码中使用 SVM Light?(可能无需从C++代码调用可执行文件)
- 贝叶斯和SVM分类器在OpenCV3中的实现
- OPENCV SVM-对象不属于任何受过训练的类
- Opencv ml 头文件不起作用
- C++中的对象序列化,用于存储 OpenCV 的 SVM 对象 [OpenCV 3.1.0]
- 断言 sv_count !=0 失败 - 函数 train_auto,SVM 类型 - EPS_SVR
- 支持向量机 (SVM) 与 K-NN 测试效率
- OpenCV 3 and SVM training
- 如何通过安卓NDK加载svm训练文件
- 从字符串加载 OpenCV 的 ML (SVM)