我目前正在开发一种基于机器学习的纹理分类算法,主要使用支持向量机(SVM)。我能够在测试数据中获得非常好的结果,现在想在生产环境中使用SVM。
在我的情况下,生产环境意味着它将在多个桌面和移动平台上运行(例如Android、iOS),并且始终在本地线程中运行。由于软件结构和平台访问策略的原因,我无法从使用SVM的位置访问文件系统。然而,我的框架支持在可以访问文件系统的环境中读取文件,并将文件内容作为std::string传输到我的应用程序的SVM部分。
配置SVM的标准过程是使用文件名,OpenCV直接从文件中读取。
我在OpenCV的文档或源代码中没有找到任何迹象表明这是可能的,但这并不是第一个存在但未被记录或广泛知晓的OpenCV功能。当然,我可以破解OpenCV源代码并交叉编译到我的每个目标平台,但我会尽量避免这样做,因为这是一项巨大的工作,而且我相信我不是第一个遇到这个问题的人。欢迎提出所有想法(包括非传统的)和/或提示!
在我的情况下,生产环境意味着它将在多个桌面和移动平台上运行(例如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源代码并交叉编译到我的每个目标平台,但我会尽量避免这样做,因为这是一项巨大的工作,而且我相信我不是第一个遇到这个问题的人。欢迎提出所有想法(包括非传统的)和/或提示!
FileStorage fs (data_string, FileStorage::READ | FileStorage::MEMORY); _svm.read(*fs,*fs.getFirstTopLevelNode());
- Thomas Bergmueller