gpt4 book ai didi

android - 从字符串加载 OpenCV 的 ML (SVM)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:32 24 4
gpt4 key购买 nike

我目前正在开发一种基于机器学习的纹理分类算法,主要是支持 vector 机 (SVM)。我能够在我的测试数据上获得一些非常好的结果,现在想在生产环境中使用 SVM。

在我的案例中,高效意味着,它将在多个桌面和移动平台(即 Android、iOS)上运行,并且始终在 native 线程的深处运行。出于软件结构和平台访问策略的原因,我无法从使用 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 源代码并交叉编译到我的每个目标平台,但我会尽量避免这种情况,因为这是一项 hell 般的工作,此外我非常确信我不是第一个有这个问题。

非常感谢所有想法(也非常规)和/或提示!

最佳答案

只要您坚持使用 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)

关于android - 从字符串加载 OpenCV 的 ML (SVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com