0

是否可以在实际设备上训练图像的图像/数据集(由相机捕获)?或者这只是可能使用命令行工具吗?

是否存在用于此的 API,或者我是否必须genTexData为设备编译该工具?

4

2 回答 2

1

ARToolkit 不支持标记的自动训练。事实上,命令行工具对于复杂或大型标记可能需要很长时间。

这是可能的,但你需要自己做。正如您所建议的,为设备编译 genTexData 是可行的方法(或将其放入服务器并通过 http 访问它)。

于 2016-09-12T08:06:25.450 回答
1

我已经尝试做你提到的事情。可以在电话上生成数据。我用的是三星 Galaxy S5。

应用程序拍摄了相机的照片,然后通过按钮向 genTexData.cpp(已修改为与 android 一起使用)发出 JNICall,将 iset、fset 和 fset3 文件保存到缓存文件夹中。(用信息按钮检查它)。唯一的问题是,大图像最多需要 25 分钟。我正在尝试优化这一点,但如果没有适当的 api 或关于函数中发生的事情的良好文档,这真的很难。

我也使用 FAST 和 SIFT 来生成(应该)更快的文件,但我不知道从它们生成的数据是否适合 ARToolKit 跟踪。

如果您得到更好的结果或优化它,请不要犹豫回答。这里是我使用的 JNICode:

extern "C"
JNIEXPORT jint JNICALL JNIFUNCTION_NATIVE(trainNFT(JNIEnv *env, jobject obj,     jstring imagePath))
{
    jint resultCode;
    ReturnCode result;
    //Get the native string from imagePath
    const char* nativePath = env->GetStringUTFChars(imagePath, 0);

    result = genTexData(nativePath);

    switch(result)
    {
    case E_NO_ERROR:
        resultCode = 0;
        break;
    case E_BAD_PARAMETER:
        resultCode = 64;
        break;
    case E_INPUT_DATA_ERROR:
        resultCode = 65;
        break;
    case E_USER_INPUT_CANCELLED:
        resultCode = 66;
        break;
    case E_BACKGROUND_OPERATION_UNSUPPORTED:
        resultCode = 69;
        break;
    case E_DATA_PROCESSING_ERROR:
        resultCode = 70;
        break;
    case E_UNABLE_TO_DETACH_FROM_CONTROLLING_TERMINAL:
        resultCode = 71;
        break;
    case E_COULDNT_READ_IMAGE_FROM_FILE:
        resultCode = 73;
        break;
    case E_GENERIC_ERROR:
        resultCode = 255;
        break;
    default:
        resultCode = 42;
        break;
    }

    env->ReleaseStringUTFChars(imagePath, nativePath);

    return resultCode;
}

jstring 是带有 Imagename 的应用程序缓存文件夹的路径。

我修改了 genTexData,它不要求提供选项参数并为应用程序设置默认值。该方法采用的唯一参数是 imagePath。它返回一个结果代码,它是原始的退出代码。在 AndroidActivity 中,它只检查结果代码并向用户提供相应的消息。

版本还不完美,我还需要删除一些在这种 genTexData(背景,用户输入)中不能出现的退出代码。此外,正如我所见,要优化生成需要更改其他.c 文件(例如 featureMap.c、featureSet.c)

于 2016-09-20T09:30:57.707 回答