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

📄 nnshaperecognizer.cpp

📁 An open source handwriting recongnition package!!!
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                        "Error: " << ECONFIG_FILE_RANGE <<
                        LVQITERATIONSCALE << " should be a positive integer " <<
                        " NNShapeRecognizer::readClassifierConfig()"<<endl;

            delete shapeRecognizerProperties;
            
            LTKReturnError(ECONFIG_FILE_RANGE);
		}
	}
	else
	{
		m_LVQIterationScale = NN_DEF_LVQITERATIONSCALE;
		LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) <<
            "Using default value for LVQIterationScale: " << m_LVQIterationScale <<
            " NNShapeRecognizer::readInternalClassifierConfig()"<<endl;

	}
	//LVQ Initial Alpha
	tempStringVar="";
	errorCode = shapeRecognizerProperties->getConfigValue(LVQINITIALALPHA,
			tempStringVar);

	if(errorCode == SUCCESS)
	{
		m_LVQInitialAlpha = atof((tempStringVar).c_str());

		if((m_LVQInitialAlpha>1)||(m_LVQInitialAlpha<0))
		{
			LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
                        "Error: " << ECONFIG_FILE_RANGE <<
                        LVQINITIALALPHA << " is out of permitted range " <<
                        " NNShapeRecognizer::readClassifierConfig()"<<endl;

            delete shapeRecognizerProperties;
            
            LTKReturnError(ECONFIG_FILE_RANGE);
		}

	}
	else
	{
		m_LVQInitialAlpha = NN_DEF_LVQINITIALALPHA ;
		LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) <<
            "Using default value for LVQInitialAlpha: " << m_LVQInitialAlpha <<
            " NNShapeRecognizer::readInternalClassifierConfig()"<<endl;
	}
	//LVQ Distance Measure
	tempStringVar = "";
    errorCode = shapeRecognizerProperties->getConfigValue(LVQDISTANCEMEASURE,
            tempStringVar);

    if(errorCode == SUCCESS )
    {
        if((LTKSTRCMP(tempStringVar.c_str(), EUCLIDEAN_DISTANCE) == 0) ||
                (LTKSTRCMP(tempStringVar.c_str(), DTW_DISTANCE) == 0))
        {
            m_LVQDistanceMeasure = tempStringVar;
            LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
                "LVQ Prototype Distance Method = " <<tempStringVar<<endl;
        }
        else
        {
            LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
                "Error: " << ECONFIG_FILE_RANGE << " " <<
                LVQDISTANCEMEASURE << " : " << tempStringVar <<
                " is not supported" <<
                "NNShapeRecognizer::readClassifierConfig()"<<endl;

            delete shapeRecognizerProperties;

            LTKReturnError(ECONFIG_FILE_RANGE);
        }
    }
    else
    {
        LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
            "Using default value for " LVQDISTANCEMEASURE " : " <<
            m_prototypeDistance << endl;
    }

    tempStringVar = "";
    errorCode = shapeRecognizerProperties->getConfigValue(MDT_UPDATE_FREQUENCY,
                                                          tempStringVar);

    if(errorCode == SUCCESS)
    {
        if ( LTKStringUtil::isInteger(tempStringVar) )
        {
            m_MDTUpdateFreq = atoi(tempStringVar.c_str());
            if(m_MDTUpdateFreq<=0)
            {
                LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
                    "Error: " << ECONFIG_FILE_RANGE << MDT_UPDATE_FREQUENCY <<
                    " should be zero or a positive integer" <<
                    " NNShapeRecognizer::readClassifierConfig()"<<endl;

                delete shapeRecognizerProperties;

                LTKReturnError(ECONFIG_FILE_RANGE);
            }
        }
        else
        {
            LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
                "Error: " << ECONFIG_FILE_RANGE << MDT_UPDATE_FREQUENCY <<
                " should be zero or a positive integer" <<
                " NNShapeRecognizer::readClassifierConfig()"<<endl;

            delete shapeRecognizerProperties;

            LTKReturnError(ECONFIG_FILE_RANGE);
        }
    }
    else
    {
        LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
            "Using default value for " << MDT_UPDATE_FREQUENCY <<
            " : " << m_MDTUpdateFreq << endl;
    }

    tempStringVar = "";
    errorCode = shapeRecognizerProperties->getConfigValue(MDT_FILE_OPEN_MODE,
                                                          tempStringVar);

    if(errorCode == SUCCESS)
    {
        if ( tempStringVar == NN_MDT_OPEN_MODE_ASCII ||
             tempStringVar == NN_MDT_OPEN_MODE_BINARY )
        {
            m_MDTFileOpenMode = tempStringVar;
        }
        else
        {
            LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<
                "Error: " << ECONFIG_FILE_RANGE << MDT_FILE_OPEN_MODE <<
                " should be ascii or binary" <<
                " NNShapeRecognizer::readClassifierConfig()"<<endl;

            delete shapeRecognizerProperties;

            LTKReturnError(ECONFIG_FILE_RANGE);
        }
    }
    else
    {
        LOG(LTKLogger::LTK_LOGLEVEL_DEBUG)<<
            "Using default value for " << MDT_FILE_OPEN_MODE <<
            " : " << m_MDTFileOpenMode << endl;
    }

	tempStringVar = "";
    errorCode = shapeRecognizerProperties->getConfigValue(SIZETHRESHOLD,
                                                       tempStringVar);
	if(errorCode == SUCCESS)
    {
			m_headerInfo[DOT_SIZE_THRES] = tempStringVar;
	}

	tempStringVar = "";
	errorCode = shapeRecognizerProperties->getConfigValue(ASPECTRATIOTHRESHOLD,
                                                       tempStringVar);
   	if(errorCode == SUCCESS)
    {
			m_headerInfo[ASP_RATIO_THRES] = tempStringVar;
	}

	tempStringVar = "";
	errorCode = shapeRecognizerProperties->getConfigValue(DOTTHRESHOLD,
                                                       tempStringVar);
    if(errorCode == SUCCESS)
    {
		m_headerInfo[DOT_THRES] = tempStringVar;
	}

	tempStringVar = "";
	errorCode = shapeRecognizerProperties->getConfigValue(PRESERVERELATIVEYPOSITION,
                                           tempStringVar);

	if(errorCode == SUCCESS)
    {
		m_headerInfo[PRESER_REL_Y_POS] = tempStringVar;
	}

	tempStringVar = "";
	errorCode = shapeRecognizerProperties->getConfigValue(PRESERVEASPECTRATIO,
                                           tempStringVar);

	if(errorCode == SUCCESS)
    {
		m_headerInfo[PRESER_ASP_RATIO] = tempStringVar;
	}

    tempStringVar = "";
	errorCode = shapeRecognizerProperties->getConfigValue(SIZETHRESHOLD,
                                           tempStringVar);

	if(errorCode == SUCCESS)
    {
		m_headerInfo[NORM_LN_WID_THRES] = tempStringVar;
	}

    tempStringVar = "";
	errorCode = shapeRecognizerProperties->getConfigValue(RESAMPLINGMETHOD,
                                           tempStringVar);

	if(errorCode == SUCCESS)
    {
		m_headerInfo[RESAMP_POINT_ALLOC] = tempStringVar;
	}

    tempStringVar = "";
	errorCode = shapeRecognizerProperties->getConfigValue(SMOOTHFILTERLENGTH,
                                           tempStringVar);

	if(errorCode == SUCCESS)
    {
		m_headerInfo[SMOOTH_WIND_SIZE] = tempStringVar;
	}

    tempStringVar = "";
    LTKStringUtil::convertIntegerToString(m_ptrPreproc->getTraceDimension(), 
                                          tempStringVar);

    m_headerInfo[TRACE_DIM] = tempStringVar;

    delete shapeRecognizerProperties;

    LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) << "Exiting " <<
        "NNShapeRecognizer::readClassifierConfig()" << endl;

    return SUCCESS;
}

/**********************************************************************************
 * AUTHOR		: Saravanan R
 * DATE          		: 23-Jan-2007
 * NAME          		: mapPreprocFunctions
 * DESCRIPTION   	: Maps the module name and its function names in the preprocessing
 sequence.
 * ARGUMENTS     	: none
 * RETURNS       	: SUCCESS on successful,
 *				  errorNumbers on Failure.
 * NOTES         	:
 * CHANGE HISTROY
 * Author            Date                Description
 *************************************************************************************/
int NNShapeRecognizer::mapPreprocFunctions()
{
    LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) << "Entering " <<
        "NNShapeRecognizer::mapPreprocFunctions()" << endl;

    stringStringMap preProcSequence;

    stringStringPair tmpPair;

    stringVector moduleFuncNames;
    stringVector modFuncs;
    stringVector funcNameTokens;

    string module = "", funName = "", sequence = "";
    string::size_type indx;

    LTKTraceGroup local_inTraceGroup;

    LTKStringUtil::tokenizeString(m_preProcSeqn,  DELEMITER_SEQUENCE,  funcNameTokens);

    int numFunctions = funcNameTokens.size();

    if(numFunctions == 0)
    {
        LOG( LTKLogger::LTK_LOGLEVEL_ERR)<<"Error: "<<
            "Wrong preprocessor sequence in cfg file : " + m_preProcSeqn <<
            " NNShapeRecognizer::mapPreprocFunctions()"<<endl;

        LTKReturnError(EINVALID_PREPROC_SEQUENCE);
    }

    for (indx = 0; indx < numFunctions ; indx++)
    {
        moduleFuncNames.push_back(funcNameTokens[indx]);
    }

    int numModuleFunctions = moduleFuncNames.size();

    for(indx=0; indx < numModuleFunctions ; indx++)
    {
        sequence = moduleFuncNames[indx];

        LTKStringUtil::tokenizeString(sequence,  DELEMITER_FUNC,  modFuncs);

        if(modFuncs.size() >= 2)
        {
            module = modFuncs.at(0);

            funName =  modFuncs.at(1);

            if(!module.compare("CommonPreProc"))
            {
                FN_PTR_PREPROCESSOR pPreprocFunc = NULL;
                pPreprocFunc = m_ptrPreproc->getPreprocptr(funName);
                if(pPreprocFunc!= NULL)
                {
                    tmpPair.first = module;
                    tmpPair.second = funName;
                    m_preprocSequence.push_back(tmpPair);
                }
                else
                {
                    LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<"Error: "<< EINVALID_PREPROC_SEQUENCE << " " <<
                        "Wrong preprocessor sequence entry in cfg file : " <<funName<<
                        " NNShapeRecognizer::mapPreprocFunctions()"<<endl;
                    LTKReturnError(EINVALID_PREPROC_SEQUENCE);
                }
            }
            else
            {
                LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<"Error: "<< EINVALID_PREPROC_SEQUENCE << " " <<
                    "Wrong preprocessor sequence entry in cfg file  : " << module<<
                    " NNShapeRecognizer::mapPreprocFunctions()"<<endl;
                LTKReturnError(EINVALID_PREPROC_SEQUENCE);
            }
        }
        else
        {
            LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<"Error: "<< EINVALID_PREPROC_SEQUENCE << " " <<
                "Wrong preprocessor sequence entry in cfg file  : "<<module<<
                " NNShapeRecognizer::mapPreprocFunctions()"<<endl;
            LTKReturnError(EINVALID_PREPROC_SEQUENCE);
        }
    }

    LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) << "Exiting " <<
        "NNShapeRecognizer::mapPreprocFunctions()" << endl;

    return SUCCESS;
}

/**********************************************************************************
 * AUTHOR		: Saravanan R.
 * DATE			: 23-Jan-2004
 * NAME			: ~NNShapeRecognizer
 * DESCRIPTION	: destructor
 * ARGUMENTS		:
 * RETURNS		:
 * NOTES			:
 * CHANGE HISTROY
 * Author			Date				Description
 *************************************************************************************/
NNShapeRecognizer::~NNShapeRecognizer()
{

    LOG(LTKLogger::LTK_LOGLEVEL_DEBUG) << "Entering " <<
        "NNShapeRecognizer::~NNShapeRecognizer()" << endl;

#ifdef _INTERNAL
    deleteAdaptInstance();
#endif
    int returnStatus = SUCCESS;
    //To update MDT File
    if(m_prototypeSetModifyCount >0)
    {
        m_prototypeSetModifyCount = m_MDTUpdateFreq-1;

        returnStatus = writePrototypeSetToMDTFile();
        if(returnStatus != SUCCESS)
        {
            LOG(LTKLogger::LTK_LOGLEVEL_ERR) << "Error: " << returnStatus << " " <<
                " NNShapeRecognizer::~NNShapeRecognizer()" << endl;
             throw LTKException(returnStatus);

        }
    }

    m_neighborInfoVec.clear();

    returnStatus = deletePreprocessor();
    if(returnStatus != SUCCESS)
    {
        LOG(LTKLogger::LTK_LOGLEVEL_ERR) << "Error: " << returnStatus << " " <<
            " NNShapeRecognizer::~NNShapeRecognizer()" << endl;
        throw LTKException(returnStatus);
    }

    m_prototypeSet.clear();

	m_cachedShapeSampleFeatures.clearShapeSampleFeatures();
    
    //Unloading the feature Extractor instance

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -