ARToolkit:是否可以在设备上训练NFT标记?

时间:2016-09-11 14:16:35

标签: android ios artoolkit iphone-ar-toolkit

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

是否存在此API或我是否必须为设备编译ArrayAdapter工具?

2 个答案:

答案 0 :(得分:1)

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

有可能,但您需要自己动手。正如您所建议的那样,为设备编译genTexData是一种方法(或将其放入服务器并通过http访问它)。

答案 1 :(得分:1)

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

应用程序拍摄了一张相机照片,然后通过一个按钮,它生成了一个JNICall到genTexData.cpp(修改为与android一起使用),它将iset,fset和fset3文件保存到缓存文件夹中。 (使用InfoButton检查)。唯一的问题是,使用大图像需要长达25分钟。我试图对此进行优化,但如果没有适当的api oder良好的文档关于函数中发生的事情,那真的很难。

我也使用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的Application的cache-folder的路径。

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

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