bool ofxArtool5::initNFT(ARParamLT * cparamLT, AR_PIXEL_FORMAT pixFormat){ kpmHandle = kpmCreateHandle(cparamLT, pixFormat); if (!kpmHandle) { ofLogError("ofxArtool5::initNFT","kpmCreateHandle"); return false; } if((ar2Handle = ar2CreateHandle(cparamLT, pixFormat, AR2_TRACKING_DEFAULT_THREAD_NUM))==NULL){ ofLogError("ofxArtool5::initNFT","ar2CreateHandle"); kpmDeleteHandle(&kpmHandle); return false; } if(threadGetCPU()<=1){ ofLogWarning("ofxArtool5::initNFT","Using NFT settings for a single CPU"); ar2SetTrackingThresh(ar2Handle, 5.0); ar2SetSimThresh(ar2Handle, 0.50); ar2SetSearchFeatureNum(ar2Handle, 16); ar2SetSearchSize(ar2Handle, 6); ar2SetTemplateSize1(ar2Handle, 6); ar2SetTemplateSize2(ar2Handle, 6); }else{ cout<<"ofxArtool5::initNFT: Using NFT settings for multi CPU"<<endl; ar2SetTrackingThresh(ar2Handle, 5.0); ar2SetSimThresh(ar2Handle, 0.50); ar2SetSearchFeatureNum(ar2Handle, 16); ar2SetSearchSize(ar2Handle, 12); ar2SetTemplateSize1(ar2Handle, 6); ar2SetTemplateSize2(ar2Handle, 6); } return true; }
// Modifies globals: kpmHandle, ar2Handle. static int initNFT(ARParamLT *cparamLT, AR_PIXEL_FORMAT pixFormat) { #ifdef DEBUG LOGE("Initialising NFT.\n"); #endif // // NFT init. // // KPM init. kpmHandle = kpmCreateHandle(cparamLT, pixFormat); if (!kpmHandle) { LOGE("Error: kpmCreatHandle.\n"); return (false); } //kpmSetProcMode( kpmHandle, KpmProcHalfSize ); // AR2 init. if( (ar2Handle = ar2CreateHandle(cparamLT, pixFormat, AR2_TRACKING_DEFAULT_THREAD_NUM)) == NULL ) { LOGE("Error: ar2CreateHandle.\n"); kpmDeleteHandle(&kpmHandle); return (false); } if (threadGetCPU() <= 1) { #ifdef DEBUG LOGE("Using NFT tracking settings for a single CPU.\n"); #endif ar2SetTrackingThresh( ar2Handle, 5.0 ); ar2SetSimThresh( ar2Handle, 0.50 ); ar2SetSearchFeatureNum(ar2Handle, 16); ar2SetSearchSize(ar2Handle, 6); ar2SetTemplateSize1(ar2Handle, 6); ar2SetTemplateSize2(ar2Handle, 6); } else { #ifdef DEBUG LOGE("Using NFT tracking settings for more than one CPU.\n"); #endif ar2SetTrackingThresh( ar2Handle, 5.0 ); ar2SetSimThresh( ar2Handle, 0.50 ); ar2SetSearchFeatureNum(ar2Handle, 16); ar2SetSearchSize(ar2Handle, 12); ar2SetTemplateSize1(ar2Handle, 6); ar2SetTemplateSize2(ar2Handle, 6); } // NFT dataset loading will happen later. #ifdef DEBUG LOGE("NFT initialised OK.\n"); #endif return (true); }
bool ARToolKit4NFTTracker::init(int xsize,int ysize, const std::string& pattlist_name,const std::string& camera_name) { ARParam wparam; // Set the initial camera parameters. if(arParamLoad((char*)camera_name.c_str(), 1, &wparam) < 0) { std::cerr << "ERROR: Camera parameter load error." << std::endl; return false; } arParamChangeSize(&wparam, xsize, ysize, &cparam); std::cout << "*** Camera Parameter ***" << std::endl; arParamDisp( &cparam ); if( (arHandle = arCreateHandle(&cparam)) == NULL ) { std::cerr << "ERROR: arCreateHandle." << std::endl; return false; } int pixFormat = AR_PIXEL_FORMAT_BGRA; if( arSetPixelFormat(arHandle, pixFormat) < 0 ) { std::cerr << "Error: arSetPixelFormat." << std::endl; return false; } if( arSetDebugMode(arHandle, AR_DEBUG_DISABLE) < 0 ) { std::cerr << "Error: arSetDebugMode." << std::endl; return false; } if( arSetLabelingThresh(arHandle,threshold) < 0 ) { std::cerr << "Error: arSetLabelingThresh." << std::endl; return false; } arSetMarkerExtractionMode( arHandle, AR_NOUSE_TRACKING_HISTORY ); if( (ar3DHandle=ar3DCreateHandle(&cparam)) == NULL ) { std::cerr << "Error: ar3DCreateHandle." << std::endl; return false; } if( (arPattHandle=arPattCreateHandle()) == NULL ) { std::cerr << "Error: arPattCreateHandle." << std::endl; return false; } setProjection(10.0f, 10000.0f); //INIT NFT int matchingImageMode = AR2_MATCHING_FRAME_IMAGE; int matchingMethod = AR2_MATCHING_FINE; int debugMode = 0; ar2Handle = ar2CreateHandle( &cparam, pixFormat ); ar2ChangeMacthingImageMode( ar2Handle, matchingImageMode ); ar2ChangeMacthingMethod( ar2Handle, matchingMethod ); ar2ChangeDebugMode( ar2Handle, debugMode ); //arFittingMode = AR_FITTING_TO_IDEAL; //arImageProcMode = AR_IMAGE_PROC_IN_FULL; if (!setupMarkers(pattlist_name)) { std::cerr << "ERROR: Marker setup failed." << std::endl; return false; } return true; }