⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nnshaperecognizer.cpp

📁 An open source handwriting recongnition package!!!
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    }

    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 + -