ARToolkit:是否可以在设备上训练 NFT 标记?
ARToolkit: Is it possible to train an NFT marker on a device?
是否可以在实际设备上训练图像(由相机捕获)的图像/数据集?或者这是否可以使用命令行工具来完成?
是否存在 API 或我必须为设备编译 genTexData
工具?
ARToolkit 不支持标记的自动训练。事实上,对于复杂或大型标记,命令行工具可能需要很长时间。
这是可能的,但你需要自己做。正如您所建议的那样,为设备编译 genTexData 是可行的方法(或将其放入服务器并通过 http 访问)。
你说的我已经试过了。可以在 Phone 上生成数据。我用的是三星 Galaxy S5。
应用程序拍摄了相机的照片,然后通过一个按钮对 genTexData.cpp(修改为与 android 一起使用)进行 JNICall 调用,将 iset、fset 和 fset3 文件保存到缓存文件夹。 (用 InfoButton 检查它)。唯一的问题是,一张大图片最多需要 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 是带有图像名称的应用程序缓存文件夹的路径。
我修改了 genTexData,使其不要求选项参数并为应用程序设置默认值。该方法采用的唯一参数是 imagePath。它 Returns 结果代码是原始的退出代码。在 AndroidActivity 中,它只是检查结果代码并向用户提供相应的消息。
版本还不完善,我还需要删除一些在这种genTexData(背景,用户输入)中不会出现的退出代码。另外正如我所见,要优化生成,需要更改其他 .c 文件(例如 featureMap.c、featureSet.c)
是否可以在实际设备上训练图像(由相机捕获)的图像/数据集?或者这是否可以使用命令行工具来完成?
是否存在 API 或我必须为设备编译 genTexData
工具?
ARToolkit 不支持标记的自动训练。事实上,对于复杂或大型标记,命令行工具可能需要很长时间。
这是可能的,但你需要自己做。正如您所建议的那样,为设备编译 genTexData 是可行的方法(或将其放入服务器并通过 http 访问)。
你说的我已经试过了。可以在 Phone 上生成数据。我用的是三星 Galaxy S5。
应用程序拍摄了相机的照片,然后通过一个按钮对 genTexData.cpp(修改为与 android 一起使用)进行 JNICall 调用,将 iset、fset 和 fset3 文件保存到缓存文件夹。 (用 InfoButton 检查它)。唯一的问题是,一张大图片最多需要 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 是带有图像名称的应用程序缓存文件夹的路径。
我修改了 genTexData,使其不要求选项参数并为应用程序设置默认值。该方法采用的唯一参数是 imagePath。它 Returns 结果代码是原始的退出代码。在 AndroidActivity 中,它只是检查结果代码并向用户提供相应的消息。
版本还不完善,我还需要删除一些在这种genTexData(背景,用户输入)中不会出现的退出代码。另外正如我所见,要优化生成,需要更改其他 .c 文件(例如 featureMap.c、featureSet.c)