📄 nnshaperecognizer.cpp
字号:
}
if(tempStringVar != "")
{
if(LTKSTRCMP(tempStringVar.c_str(), PROTO_RED_FACTOR_AUTOMATIC)==0)
{
//DEFINE MACRO DEF_PROTO_RED_FACTOR
m_prototypeReductionFactor = -1;
}
else if(LTKSTRCMP(tempStringVar.c_str(), PROTO_RED_FACTOR_NONE)==0)
{
m_prototypeReductionFactor = 0;
}
else if(LTKSTRCMP(tempStringVar.c_str(), PROTO_RED_FACTOR_COMPLETE) == 0)
{
m_prototypeReductionFactor = 100;
}
else
{
if ( LTKStringUtil::isInteger(tempStringVar) )
{
tempIntegerVar = atoi((tempStringVar).c_str());
if(tempIntegerVar >= 0 && tempIntegerVar <=100)
{
m_prototypeReductionFactor = tempIntegerVar;
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)
<< PROTOREDFACTOR << " is =" << tempStringVar<<endl;
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR) <<
"Error: " << ECONFIG_FILE_RANGE <<
PROTOREDFACTOR << " is out of permitted range " <<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR) <<
"Error: " << ECONFIG_FILE_RANGE <<
PROTOREDFACTOR << " is out of permitted range"<<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
}
else if(tempStringVar1 != "")
{
if(LTKSTRCMP(tempStringVar1.c_str(), PROTO_RED_FACTOR_AUTOMATIC) == 0)
{
m_prototypeReductionFactor = -1;
}
else
{
if ( LTKStringUtil::isInteger(tempStringVar1) )
{
tempIntegerVar = atoi((tempStringVar1).c_str());
if(tempIntegerVar > 0)
{
m_numClusters = tempIntegerVar;
// m_numClusters is used in this case
m_prototypeReductionFactor = NN_NUM_CLUST_INITIAL;
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
NUMCLUSTERS << " is = " << tempStringVar << endl;
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
"Error: " << ECONFIG_FILE_RANGE <<
NUMCLUSTERS << " is out of permitted range "<<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
" Error: " << ECONFIG_FILE_RANGE <<
NUMCLUSTERS << " is out of permitted range"<<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
"Assuming default value of " NUMCLUSTERS << " : " <<
m_numClusters << endl;
}
tempStringVar = "";
errorCode = shapeRecognizerProperties->getConfigValue(PROTOTYPEDISTANCE,
tempStringVar);
if(errorCode == SUCCESS )
{
if((LTKSTRCMP(tempStringVar.c_str(), EUCLIDEAN_DISTANCE) == 0) ||
(LTKSTRCMP(tempStringVar.c_str(), DTW_DISTANCE) == 0))
{
m_prototypeDistance = tempStringVar;
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
"Prototype Distance Method = " <<tempStringVar<<endl;
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
"Error: " << ECONFIG_FILE_RANGE << " " <<
PROTOTYPEDISTANCE << " : " << tempStringVar <<
" is not supported" <<
"NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
"Using default value for " PROTOTYPEDISTANCE " : " <<
m_prototypeDistance << endl;
}
tempStringVar = "";
shapeRecognizerProperties->getConfigValue(ADAPTIVE_kNN, tempStringVar);
if(LTKSTRCMP(tempStringVar.c_str(), "true") ==0)
{
m_adaptivekNN = true;
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)
<<"Confidence computation method: " << ADAPTIVE_kNN << endl;
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
"Using default value for " << ADAPTIVE_kNN << " : " <<
m_adaptivekNN << endl;
}
tempStringVar = "";
errorCode = shapeRecognizerProperties->getConfigValue(NEARESTNEIGHBORS,
tempStringVar);
if(errorCode == SUCCESS)
{
if ( LTKStringUtil::isInteger(tempStringVar) )
{
tempIntegerVar = atoi((tempStringVar).c_str());
//Valid values of nearest neighbors: 1 or greater than MIN_NEARESTNEIGHBORS
if(tempIntegerVar > 0)
{
// If the value of NearestNeighbors = 1, NN recognizer is used
if(tempIntegerVar == 1)
{
m_adaptivekNN = false;
}
// If AdaptivekNN is set to false, simply assign the value to m_nearestNeighbors
// If AdaptivekNN is set, NearestNeighbors should be greater than than the
// minimum no.of nearest neighbors allowed (MIN_NEARESTNEIGHBORS defined as macro)
if(!m_adaptivekNN || (m_adaptivekNN && tempIntegerVar >= MIN_NEARESTNEIGHBORS))
{
m_nearestNeighbors = tempIntegerVar;
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
NEARESTNEIGHBORS << " = " <<m_nearestNeighbors<<endl;
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
"Error: " << ECONFIG_FILE_RANGE << NEARESTNEIGHBORS <<
" is out of permitted range" <<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
"Error: " << ECONFIG_FILE_RANGE << NEARESTNEIGHBORS <<
" is out of permitted range" <<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
"Debug: " << "Using default value for " << NEARESTNEIGHBORS <<
" : " << m_nearestNeighbors << endl;
}
tempStringVar = "";
errorCode = shapeRecognizerProperties->getConfigValue(REJECT_THRESHOLD,
tempStringVar);
if(errorCode == SUCCESS)
{
if ( LTKStringUtil::isFloat(tempStringVar) )
{
tempFloatVar = atof((tempStringVar).c_str());
if(tempFloatVar > 0 && tempFloatVar < 1)
{
m_rejectThreshold = tempFloatVar;
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
REJECT_THRESHOLD << " = " <<tempStringVar <<endl;
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
"Error: " << ECONFIG_FILE_RANGE << REJECT_THRESHOLD <<
" should be in the range (0-1)" <<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
"Error: " << ECONFIG_FILE_RANGE << REJECT_THRESHOLD <<
" should be in the range (0-1)" <<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
"Using default value for " << REJECT_THRESHOLD <<
" : " << m_rejectThreshold << endl;
}
tempStringVar = "";
errorCode = shapeRecognizerProperties->getConfigValue(DTWBANDING,
tempStringVar);
if(errorCode == SUCCESS)
{
if ( LTKStringUtil::isFloat(tempStringVar) )
{
tempFloatVar = atof((tempStringVar).c_str());
if(tempFloatVar > 0 && tempFloatVar <= 1)
{
m_dtwBanding = tempFloatVar;
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
DTWBANDING << " = " <<m_dtwBanding<<endl;
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
"Error: "<< ECONFIG_FILE_RANGE << DTWBANDING <<
" is out of permitted range" <<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
"Error: "<< ECONFIG_FILE_RANGE <<
" DTWBANDING is out of permitted range" <<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
"Using default value for " << DTWBANDING << " : " <<
m_dtwBanding << endl;
}
tempStringVar = "";
errorCode = shapeRecognizerProperties->getConfigValue(DTWEUCLIDEANFILTER,
tempStringVar);
if(errorCode == SUCCESS)
{
if(LTKSTRCMP(tempStringVar.c_str(), DTW_EU_FILTER_ALL) == 0)
{
m_dtwEuclideanFilter = EUCLIDEAN_FILTER_OFF;
}
else
{
if ( LTKStringUtil::isInteger(tempStringVar) )
{
tempIntegerVar = atoi((tempStringVar).c_str());
if(tempIntegerVar >= m_nearestNeighbors)
{
m_dtwEuclideanFilter = tempIntegerVar;
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
DTWEUCLIDEANFILTER << " is = "<<
m_dtwEuclideanFilter<<endl;
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
"Error: " << ECONFIG_FILE_RANGE <<
DTWEUCLIDEANFILTER << " is out of permitted range " <<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
"Error: " << ECONFIG_FILE_RANGE << DTWEUCLIDEANFILTER <<
" is out of permitted range"<<
" NNShapeRecognizer::readClassifierConfig()"<<endl;
delete shapeRecognizerProperties;
LTKReturnError(ECONFIG_FILE_RANGE);
}
}
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
"Using default value for " << DTWEUCLIDEANFILTER <<
" : " << m_dtwEuclideanFilter << endl;
}
tempStringVar = "";
errorCode = shapeRecognizerProperties->getConfigValue(FEATUREEXTRACTOR,
tempStringVar);
if(errorCode == SUCCESS)
{
m_featureExtractorName = tempStringVar;
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
FEATUREEXTRACTOR << " = "<<tempStringVar<<endl;
}
else
{
LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
"Using default value for " << FEATUREEXTRACTOR << " : " <<
m_featureExtractorName << endl;
}
//LVQ Paramaters
//LVQ Iteration Scale
errorCode = shapeRecognizerProperties->getConfigValue(LVQITERATIONSCALE,
tempStringVar);
if(errorCode == SUCCESS)
{
m_LVQIterationScale=atoi((tempStringVar).c_str());
if(!((m_LVQIterationScale>0)&& LTKStringUtil::isInteger(tempStringVar)))
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -