3

我试图在 android 中设置 libsvm 以检测加速度计的运动。我不知道如何在 android 中设置 libsvm 以及如何使用它。伙计们,你能提供线索吗?

4

3 回答 3

3

您无需设置libsvm,只需将库包装器用于您用于开发 android 应用程序的语言(我猜是 Java?)。Wrapper 包含在正式版本中。它还包括这个特定库的使用示例。这里没有什么特别的——如果你知道如何开发安卓应用程序,那么使用额外的库应该不是问题。如果您不知道如何开发这样的应用程序 - 那么从动作识别开始是个坏主意。这同样适用于将 SVM 用于任何事情的能力。如果您从未使用过 SVM,最好从更简单的东西开始,例如编写应用程序的“非移动”版本并熟悉此模型。否则,失败的可能性很大。

于 2013-10-27T18:24:01.730 回答
1

对不起我之前错误的答案格式

由于 libsvm 是用 C 编写的,因此您可以轻松地通过 JNI 接口包装代码并在 Java 中使用 libsvm。

可以在以下位置找到包装器:https ://github.com/yctung/AndroidLibSvm

例如,一旦你在 Android Studio 中导入这个项目,你可以调用

 jniSvmTrain(String options);

使 svm 训练与原始 libsvm 的界面相同。

如果您查看代码,它只是 libsvm 中原始“svm-train.c”的包装器

#include "./libsvm/svm-train.h"
// helper function to be called in Java for making svm-train
extern "C" void Java_edu_umich_eecs_androidlibsvm_MainActivity_jniSvmTrain(JNIEnv *env, jobject obj, jstring cmdIn){
    const char *cmd = env->GetStringUTFChars(cmdIn, 0);
    debug("jniSvmTrain cmd = %s", cmd);

    std::vector<char*> v;

    // add dummy head to meet argv/command format
    std::string cmdString = std::string("dummy ")+std::string(cmd);
    cmdToArgv(cmdString, v);

    // make svm train by libsvm
    svmtrain::main(v.size(),&v[0]);

    // free vector memory
    for(int i=0;i<v.size();i++){
        free(v[i]); 
    }   

    // free java object memory 
    env->ReleaseStringUTFChars(cmdIn, cmd);
}
于 2015-09-21T21:20:44.490 回答
0

“设置”我认为您要求将 LIBSVM 作为库提供的 jar 文件添加到您的 android studio 项目中。你可以看看这里:

Android Studio:将 jar 添加为库?

在 LIBSVM 网站上,您可以下载一个 zip 文件,其中包含 JAVA jar 文件和使用示例。

于 2016-10-16T18:20:30.247 回答