実機で(カメラで撮影した)画像・画像のデータセットをトレーニングすることは可能ですか?それとも、これはコマンド ライン ツールを使用して行うことで可能ですか?
genTexData
このための API はありますか、それともデバイス用のツールをコンパイルする必要がありますか?
実機で(カメラで撮影した)画像・画像のデータセットをトレーニングすることは可能ですか?それとも、これはコマンド ライン ツールを使用して行うことで可能ですか?
genTexData
このための API はありますか、それともデバイス用のツールをコンパイルする必要がありますか?
ARToolkit は、マーカーの自動トレーニングをサポートしていません。実際、コマンド ライン ツールは、複雑なマーカーや大きなマーカーの場合、時間がかかる場合があります。
可能ですが、自分で行う必要があります。あなたが示唆したように、デバイスのgenTexDataをコンパイルするのが道です(またはサーバーに入れてhttp経由でアクセスします)。
私はあなたが言及したことをやろうとしました。電話でデータを生成することが可能です。Samsung 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 は、Imagename を持つアプリケーションのキャッシュ フォルダーへのパスです。
Option パラメータを要求しないように genTexData を変更し、アプリケーションのデフォルト値を設定しました。メソッドが取る唯一のパラメーターは、imagePath です。元の終了コードである結果コードを返します。AndroidActivity では、結果コードをチェックし、対応するメッセージをユーザーに提供します。
バージョンはまだ完全ではありません。また、この種の genTexData (Background、Userinput) では発生しないいくつかの終了コードを削除する必要があります。また、世代を最適化するには、他の .c ファイル (featureMap.c、featureSet.c など) を変更する必要があります。