aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.h')
-rw-r--r--src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.h1178
1 files changed, 0 insertions, 1178 deletions
diff --git a/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.h b/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.h
deleted file mode 100644
index cce1baf0..00000000
--- a/src/plugins/lipi-toolkit/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.h
+++ /dev/null
@@ -1,1178 +0,0 @@
-/*****************************************************************************************
-* Copyright (c) 2006 Hewlett-Packard Development Company, L.P.
-* Permission is hereby granted, free of charge, to any person obtaining a copy of
-* this software and associated documentation files (the "Software"), to deal in
-* the Software without restriction, including without limitation the rights to use,
-* copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
-* Software, and to permit persons to whom the Software is furnished to do so,
-* subject to the following conditions:
-*
-* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
-* PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
-* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
-* OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*****************************************************************************************/
-
-/************************************************************************
- * SVN MACROS
- *
- * $LastChangedDate: 2011-08-23 13:31:44 +0530 (Tue, 23 Aug 2011) $
- * $Revision: 865 $
- * $Author: jitender $
- *
- ************************************************************************/
-/************************************************************************
- * FILE DESCR: Definitions for NN Shape Recognition module
- *
- * CONTENTS:
- *
- * AUTHOR: Saravanan R.
- *
- * DATE: January 23, 2007
- * CHANGE HISTORY:
- * Author Date Description of change
- ************************************************************************/
-
-#ifndef __NNSHAPERECOGNIZER_H
-#define __NNSHAPERECOGNIZER_H
-
-/** Include files */
-#include "LTKInc.h"
-#include "LTKTypes.h"
-#include "LTKTrace.h"
-#include "LTKMacros.h"
-#include "LTKShapeRecognizer.h"
-#include "LTKShapeRecoUtil.h"
-#include "LTKShapeSample.h"
-#include "LTKCheckSumGenerate.h"
-#include "LTKDynamicTimeWarping.h"
-
-/** Forward declaration of classes */
-class LTKTraceGroup;
-class LTKPreprocessorInterface;
-class LTKShapeSample;
-class LTKShapeFeatureExtractor;
-class LTKShapeFeature;
-
-#define SIMILARITY(distance) (1 / (distance + EPS ))
-#define SUPPORTED_MIN_VERSION "3.0.0"
-
-class LTKAdapt;
-
-typedef int (*FN_PTR_LOCAL_DISTANCE)(LTKShapeFeaturePtr, LTKShapeFeaturePtr,float&);
-typedef int (*FN_PTR_CREATELTKLIPIPREPROCESSOR)(const LTKControlInfo& , LTKPreprocessorInterface** );
-typedef int (*FN_PTR_DELETELTKLIPIPREPROCESSOR)(LTKPreprocessorInterface* );
-
-
-/**
- * @ingroup NNShapeRecognizer.h
- * @brief The Header file for the NNShapeRecognizer
- * @class NNShapeRecognizer
- *<p> <p>
- */
-
-class NNShapeRecognizer: public LTKShapeRecognizer
-{
-
- public:
- friend class LTKAdapt;
- int adapt(int shapeID );
- int adapt(const LTKTraceGroup& sampleTraceGroup, int shapeID );
-
- private:
-
- int deleteAdaptInstance();
-
-
- /** @name private data members */
- //@{
- private:
-
- FN_PTR_DELETELTKLIPIPREPROCESSOR m_deleteLTKLipiPreProcessor;
- //Function pointer for deleteLTKLipiPreProcessor
-
- // preproc lin handle
- void *m_libHandler;
-
- // feature extractor lin handle
- void *m_libHandlerFE;
-
- unsigned short m_numShapes;
- /**< @brief Number of shapes
- * <p>
- * It Defines the number of shapes to be recognized
- *
- * DEFAULT: 0
- *
- * Note: If the project is dynamic, then this numShapes was set to 0
- * If the project is not dynamic, then the numShapes was read from project configuration file
- * </p>
- */
-
- string m_prototypeSelection;
- /**< @brief The Prototype Selection
- * <p>
- * if Prototype Selection = clustering, the training method used was clustering
- * = lvq, the training method used was LVQ
- *
- * DEFAULT: LTKPreprocDefaults::NN_DEF_PROTOTYPESELECTION
- * Possible values are "clustering" and "lvq"
- * </p>
- */
-
- int m_prototypeReductionFactor;
- /**< @brief The prototype Reduction factor
- * <p>
- * if PrototypeReductionFactor = 0 every training sample is cluster on its own
- * = 100 all training samples are represented by one prototype
- * = 80 then all samples are represented by 20% of the training samples
- *
- * DEFAULT: LTKPreprocDefaults::NN_DEF_PROTOTYPEREDUCTIONFACTOR
- * RANGE: 0 TO 100
- * </p>
- */
-
- int m_numClusters;
- /**< @brief The number of clusters
- * <p>
- * if NumClusters = k, then k clusters are found from the training samples
- *
- *
- *
- * DEFAULT: There is no default as this and prototype reduction factor are dependent
- * RANGE:
- * </p>
- */
-
-
- string m_prototypeDistance;
- /**< @brief The Prototype Distance
- * <p>
- * if PrototypeDistance = eu, then the distance between the samples can be calculated using the Euclidean distance method
- * = dtw, then the distance between the samples can be calculated using the DTW method
- *
- * DEFAULT: LTKPreprocDefaults::NN_DEF_PROTOTYPEDISTANCE
- * Possible values are LTKMacros::DTW_DISTANCE and LTKMacros::EUCLIDEAN_DISTANCE.
- * </p>
- */
-
- int m_nearestNeighbors;
- /**< @brief Nearest Neighbors
- * <p>
- *
- * DEFAULT: LTKPreprocDefaults::NN_DEF_NEARESTNEIGHBORS
- * </p>
- */
-
-
-// int m_dtwBanding;
- float m_dtwBanding;
- /**< @brief DTW Banding
- * <p>
- *
- * DEFAULT: LTKPreprocDefaults::NN_DEF_BANDING
- * </p>
- */
-
- int m_dtwEuclideanFilter;
- /**< @brief DTW Euclidean Filter
- * <p>
- *
- * DEFAULT: LTKPreprocDefaults::NN_DEF_DTWEUCLIDEANFILTER
- * </p>
- */
-
- string m_featureExtractorName;
- /**< @brief The Feature Extractor
- * <p>
- *
- * DEFAULT:
- *
- * </p>
- */
-
- bool m_projectTypeDynamic;
- /**< @brief Project Dynamic
- * <p>
- * if projectTypeDynamic = true, then the project is dynamic ie, the numShapes can take any number of value
- * = false, then the project is not dynamic ie, the numShape can take value specified in project.cfg file
- *
- * DEFAULT: false
- * </p>
- */
-
- LTKPreprocessorInterface *m_ptrPreproc;
- /**< @brief Pointer to preprocessor instance
- * <p>
- * Instance which is used to call the preprocessing methods before recognition
- *
- * DEFAULT: NULL
- * </p>
- */
-
- string m_nnCfgFilePath;
- /**< @brief Full path of NN configuration file
- * <p>
- * Assigned value in the NNShapeRecognizer::initialize function
- * </p>
- */
-
- string m_nnMDTFilePath;
- /**< @brief Full path of Model data file
- * <p>
- * Assigned value in the NNShapeRecognizer::initialize function
- * </p>
- */
-
- stringStringMap m_headerInfo;
- /**< @brief Header Information
- * <p>
- * </p>
- */
-
- LTKShapeRecoUtil m_shapeRecUtil;
- /**< @brief Pointer to LTKShapeRecoUtil class
- * <p>
- * Instance which used to call Shape Recognizer Utility functions
- *
- * DEFAULT: NULL
- */
-
- string m_lipiRootPath;
- /**< @brief Path of the Lipi Root
- * <p>
- * DEFAULT: LipiEngine::getLipiPath()
- * </p>
- */
-
- string m_lipiLibPath;
- /**< @brief Path of the Lipi Libraries
- * <p>
- * DEFAULT: LipiEngine::getLipiLibPath()
- * </p>
- */
-
- LTKShapeFeatureExtractor *m_ptrFeatureExtractor;
- /**< @brief Pointer to LTKShapeFeatureExtractor class
- * <p>
- * DEFAULT: NULL
- * </p>
- */
-
- string m_preProcSeqn;
- /**< @brief Preprocessor Sequence
- * <p>
- * This string will holds what sequence the preprocessor methods to be executed
- * </p>
- */
-
- vector<LTKShapeSample> m_prototypeSet;
- /**< @brief Prototype Set for LVQ
- * <p>
- * It contains the Vector of Clustered ShapeSamples
- * </p>
- */
-
- LTKCaptureDevice m_captureDevice;
-
- struct NeighborInfo
- {
- int classId;
- float distance;
- int prototypeSetIndex;
- };
-
- /*
- struct MapModFunc
- {
- string moduleName;
- string funcName;
- };
- */
-
- vector<stringStringPair> m_preprocSequence;
-
- intIntMap m_shapeIDNumPrototypesMap;
- /**< @brief Map of shapeID and Number of Samples per shape
- * <p>
- *
- * </p>
- */
-
- int m_prototypeSetModifyCount;
- /**< @brief
- * <p>
- * Used to count number of modifications done to m_prototypeSet.
- * Write to MDT after m_prototypeModifyCntCFG such modifications or at Exit.
- * </p>
- */
-
- int m_MDTUpdateFreq;
- /**< @brief Update MDT after a specified number of modifications to m_prototypeSet
- * <p>
- * Specified in NN.cfg
- *
- * </p>
- */
-
- //Cache Parameters used by Adapt
- vector<LTKShapeRecoResult> m_vecRecoResult;
- /**< @brief Store Recognize results
- * used by subsequent call to Adapt
- * <p>
- *
- *
- * </p>
- */
-
-
- vector <struct NeighborInfo> m_neighborInfoVec;
- /**< @brief Vector to store the distances of test sample to each of the samples in prototypeSet,
- * classIDs and indices within the prototypeset
- * Used during subsequent call to Adapt
- * <p>
- *
- *
- * </p>
- */
-
- LTKShapeSample m_cachedShapeSampleFeatures;
- /**< @brief Store ShapeSampleFeatures of the last inTraceGroup to Recognize
- * Used during subsequent call to Adapt
- * <p>
- *
- *
- * </p>
- */
-
- float m_rejectThreshold;
- /**< @brief Threshold on the confidence to reject a test sample
- * <p>
- *
- * </p>
- */
-
- bool m_adaptivekNN;
- /**< @brief Adaptive kNN method to compute confidence
- * <p>
- * If m_adaptivekNN = true, the adaptive kNN method is used for confidence computation
- * false, NN or kNN method is used, based on the value of m_nearestNeighbors
- * </p>
- */
-
- //@}
-
- string m_currentVersion;
-
- string m_MDTFileOpenMode;
-
- DynamicTimeWarping<LTKShapeFeaturePtr, float> m_dtwObj;
-
- public:
-
- /** @name Constructors and Destructor */
- //@{
-
- NNShapeRecognizer(const LTKControlInfo& controlInfo);
-
- /**
- * Destructor
- */
- ~NNShapeRecognizer();
-
- //@}
-
- /**
- * This method initializes the NN shape recognizer
- * <p>
- * Semantics
- * - Set the project name in NNShapeRecognizer::headerInfo with the parameter passed.<br>
- * m_headerInfo[PROJNAME] = strProjectName;
- *
- * - Initialize NNShapeRecognizer::m_nnCfgFilePath <br>
- * m_nnCfgFilePath = NNShapeRecognizer::m_lipiRootPath + LTKMacros::PROJECTS_PATH_STRING +
- * strProjectName + LTKMacros::PROFILE_PATH_STRING + strProfileName +
- * LTKInc::SEPARATOR + LTKInc::NN + LTKInc::CONFIGFILEEXT;
- *
- * - Initializes NNShapeRecognizer::m_nnMDTFilePath <br>
- * m_nnMDTFilePath = NNShapeRecognizer::m_lipiRootPath + LTKMacros::PROJECTS_PATH_STRING +
- * strProjectName + LTKMacros::PROFILE_PATH_STRING + strProfileName +
- * LTKInc::SEPARATOR + LTKInc::NN + LTKInc::DATFILEEXT;
- *
- * - Initializes NNShapeRecognizer::m_projectTypeDynamic with the value returned from LTKShapeRecoUtil::isProjectDynamic
- *
- * - Initialize the preprocessor using LTKShapeRecoUtil::initializePreprocessor and assign
- * default values for
- * -# Normalised size
- * -# Threshold size
- * -# Aspect ratio
- * -# Dot threshold
- *
- * - Initialize the recognizers instance variables with the values given in classifier config file.
- *
- * </p>
- * @param strProjectName : string : Holds the name of the Project
- * @param strProfileName : string : Holds the name of the Profile
- *
- * @return int : LTKInc::SUCCESS if initialization done successfully
- * errorValues if initialization has some errors
- *
- * @exception LTKErrorList::ECONFIG_FILE_OPEN Could not open project.cfg
- * @exception LTKErrorList::EINVALID_NUM_OF_SHAPES Negative value for number of shapes
- * @exception LTKErrorList::ELOAD_PREPROC_DLL Could not load preprocessor DLL
- * @exception LTKErrorList::EDLL_FUNC_ADDRESS_CREATE Could not map createPreprocInst
- * @exception LTKErrorList::EDLL_FUNC_ADDRESS_DELETE Could not map destroyPreprocInst
- */
-
- /**
- * This method calls the train method of the NN classifier.
- *
- */
- int train(const string& trainingInputFilePath,
- const string& mdtHeaderFilePath,
- const string &comment,const string &dataset,
- const string &trainFileType=INK_FILE) ;
-
- /**
- * This method loads the Training Data of the NN classifier.
- * @param
- * @return LTKInc::SUCCESS : if the model data was loaded successfully
- * @exception
- */
- int loadModelData();
-
- /**
- * This method unloads all the training data
- * @param none
- * @return LTKInc::SUCCESS : if the model data was unloaded successfully
- * @exception none
- */
- int unloadModelData();
-
- /**
- * This method sets the device context for the recognition
- *
- * @param deviceInfo The parameter to be set
- * @return
- * @exception
- */
- int setDeviceContext(const LTKCaptureDevice& deviceInfo);
-
- /**
- * Populates a vector of LTKShapeRecoResult consisting of top classes with their confidences.
- *
- * Semantics
- *
- * - Validate the input arguments
- * - Extract the features from traceGroup
- * - If the distance method (m_prototypeDistance) is Euclidean (EUCLIDEAN_DISTANCE),
- * populate the distIndexPairVector with the distance of the test sample to all the
- samples in the prototype set
- * - If the distance method is DTW, compute the DTW distance of the test sample to the
- samples in the prototype set which passed the Euclidean filter. Populate the
- distIndexPairVector
- * - Sort the distIndexPairVector based on the distances in ascending order
- * - Compute the confidences of the classes appearing in distIndexPairVector, call computeConfidence()
- * - Check if the first element of resultVector has confidence less than m_rejectThreshold, if so,
- empty the resultVector (reject the sample), log and return.
- * - If the confThreshold value was specified by the user (not equal to -1),
- delete the entries from resultVector with confidence values less than confThreshold.
- * - If the numChoices value was specified by the user (not equal to -1),
- update the resultVector with top numChoices entries, delete the other values.
- *
- * @param traceGroup The co-ordinates of the shape which is to be recognized
- * @param screenContext Contains information about the input field like whether it is boxed input
- * or continuous writing
- * @param subSetOfClasses A subset of the entire class space which is to be used for
- * recognizing the input shape.
- * @param confThreshold Classes with confidence below this threshold are not returned,
- * valid range of confThreshold: (0,1)
- * @param numOfChoices Number of top choices to be returned in the result structure
- * @param resultVector The result of recognition
- *
- * @return SUCCESS: resultVector populated successfully
- * FAILURE: return ErrorCode
- * @exception none
- */
- int recognize(const LTKTraceGroup& traceGroup,
- const LTKScreenContext& screenContext,
- const vector<int>& subSetOfClasses,
- float confThreshold,
- int numChoices,
- vector<LTKShapeRecoResult>& outResultVector);
-
-
- /* Overloaded the above function to take vector<LTKShapeFeaturePtr> as
- * input
- */
- int recognize(const vector<LTKShapeFeaturePtr>& shapeFeatureVec,
- const vector<int>& subSetOfClasses,
- float confThreshold,
- int numChoices,
- vector<LTKShapeRecoResult>& resultVector);
-
- /**
- * This method add Class
- *
- * Semantics
- *
- * - Check if project is Dynamic, if not return ErrorCode
- * - Calculate Features
- * - Update PrototypeSet
- * - Update MDTFile
- * - return shapeID of new class added
- *
- * @param sampleTraceGroup : LTKTraceGroup : Holds TraceGroup of sample to Add
- * @param shapeID : int : Holds shapeID of new Class
- * shapeID = m_prototypeSet.at(prototypeSetSize-1).getClassID()+1
- *
- * @return SUCCESS:Shape Class added successfully
- * FAILURE: return ErrorCode
- * @exception none
- */
-
- int addClass(const LTKTraceGroup& sampleTraceGroup, int& shapeID);
-
- /**
- * This method add Sample Class for adapt
- *
- * Semantics
- *
- * - Check if project is Dynamic, if not return ErrorCode
- * - Calculate Features
- * - Update PrototypeSet
- * - Update MDTFile
- * - return shapeID of new class added
- *
- * @param sampleTraceGroup : LTKTraceGroup : Holds TraceGroup of sample to Add
- * @param shapeID : int : Holds shapeID of new Class
- * shapeID = m_prototypeSet.at(prototypeSetSize-1).getClassID()+1
- *
- * @return SUCCESS:Shape Class added successfully
- * FAILURE: return ErrorCode
- * @exception none
- */
- int addSample(const LTKTraceGroup& sampleTraceGroup, int shapeID);
-
- /**
- * This method delete Class
- *
- * Semantics
- *
- * - Check if shapeID is valid, if not return error code
- * - Check if project is Dynamic, if not return ErrorCode
- * - Update PrototypeSet
- * - Update MDTFile
- *
- * @param shapeID : int : Holds shapeID of Shape to be deleted
- *
- * @return SUCCESS: Shape Class deleted successfully
- * FAILURE: return ErrorCode
- * @exception none
- */
- int deleteClass(int shapeID);
-
- /**
- * This method converts features to TraceGroup
- *
- * Semantics
- *
- * - Check if shapeID is valid, if not return error code
- * - Check if project is Dynamic, if not return ErrorCode
- * - Update PrototypeSet
- * - Update MDTFile
- *
- * @param shapeID : int : Holds shapeID
- * @param numberOfTraceGroups : int : Maximum number of Trace Groups to populate
- * @param outTraceGroups : vector<LTKTraceGroup> : TraceGroup
- *
- * @return SUCCESS: TraceGroup is populated successfully
- * FAILURE: return ErrorCode
- * @exception none
- */
- int getTraceGroups(int shapeID, int numberOfTraceGroups, vector<LTKTraceGroup> &outTraceGroups);
-
- /**
- * This function does the recognition function required for training phase (called from trainLVQ)
- * The input parameter are the incharacter, which is compared with the existing
- * set of prototypes and then the matched code vector and along with its index (and also the shape id) is returned
- * @param incharacter is the character which we are trying to recognise.
- * @param returnshapeID is the value of the matched character which is returned, codeCharacter is the matched prototype (code vector) vector, and codeVecIndex is the matched prototype (code vector) index
- */
- int trainRecognize(LTKShapeSample& inShapeSample, LTKShapeSample& bestShapeSample, int& codeVecIndex);
-
- private:
- /**
- * This function is the train method using Clustering prototype selection technique.
- *
- *
- * Semantics
- *
- * - Note the start time for time calculations.
- *
- * - Create an instance of the feature extractor using NNShapeRecognizer::initializeFeatureExtractorInstance() method
- *
- * - Call train method depending on the inFileType
- * - NNShapeRecognizer::trainFromListFile() if inFileType = LTKMacros::INK_FILE
- * - NNShapeRecognizer::trainFromFeatureFile() if inFileType = LTKMacros ::FEATURE_FILE
- *
- * - Update the headerInfo with algorithm version and name using NNShapeRecognizer::updateHeaderWithAlgoInfo() method
- *
- * - Calculate the checksum.
- *
- * - Note the finish time for time calculations.
- *
- *
- * @param inputFilePath :string : Path of trainListFile / featureFile
- * @param strModelDataHeaderInfoFile : string : Holds the Header information of Model Data File
- * @param inFileType : string : Possible values ink / featureFile
- *
- * @return LTKInc::SUCCESS : if the training done successfully
- * @return errorCode : if it contains some errors
- */
- int trainClustering(const string& trainingInputFilePath,
- const string& mdtHeaderFilePath,
- const string& trainFileType);
-
-
- /**
- * This method do the map between the module name and function names from the cfg file
- *
- * Semantics
- *
- * - Read the Preprocess Sequence from the nn.cfg
- *
- * - Split the sequence into tokens with delimiter LTKMacros::DELEMITER_SEQUENCE using LTKStringUtil::tokenizeString
- *
- * - Split each token with delimiter LTKMacrosDELEMITER_FUNC using LTKStringUtil::tokenizeString
- * to get the Module name and Function name
- *
- * - Store the Module name and the Function name into a structure
- *
- *
- * @param none
- * @return LTKInc::SUCCESS : if functions are successfully mapped,
- * @return errorCodes : if contains any errors
- * @exception none
- */
- int mapPreprocFunctions();
-
- /**
- * This method will assign default values to the members
- *
- * Semantics
- *
- * - Assign Default values to all the data members
- *
- *
- * @param none
- *
- * @return none
- */
- void assignDefaultValues();
-
- /** Reads the NN.cfg and initializes the instance variable of the classifier with the user defined
- * values.
- *
- * Semantics
- *
- * - Open the nn.cfg using LTKConfigFileReader
- *
- * - Incase of file open failure (nn.cfg), default values of the classifier parameters are used.
- *
- * - The valid values of the classifier parameters are cached in to the class data members.
- * LTKConfigFileReader::getConfigValue is used to get the value fora key defined in the config file
- *
- * - Exception is thrown if the user has specified an invalid valid for a parameter
- *
- *
- * @param none
- * @return SUCCESS : If the Config file read successfully
- * @return errorCode : If it contains some errors
- * @exception LTKErrorList::ECONFIG_FILE_RANGE The config file variable is not within the correct range
- */
- int readClassifierConfig();
-
- /**
- * This function serves as wrapper function to the Dtw distance computation function
- * (for use by clustering prototype selection)
- * @param train This is an input parameter and corresponds to the training character.
- * @param test This is an input parameter and corresponds to the testing character.
- */
- int computeDTWDistance(const LTKShapeSample& inFirstShapeSampleFeatures,
- const LTKShapeSample& inSecondShapeSampleFeatures,
- float& outDTWDistance);
-
-
-
-
- /**
- * This function computes the eucildean distance between the two points.
- * @param train X and Y coordinate of the first point.
- * @param test X and Y coordinate of the second point.
- */
-
- /*int computeEuclideanDistance(const LTKShapeSample& inFirstShapeSampleFeatures,
- const LTKShapeSample& inSecondShapeSampleFeatures,
- float& outEuclideanDistance);*/
-
- int computeEuclideanDistance(const LTKShapeSample& inFirstShapeSampleFeatures,
- const LTKShapeSample& inSecondShapeSampleFeatures,
- float& outEuclideanDistance);
-
- int calculateMedian(const int2DVector& clusteringResult,
- const float2DVector& distanceMatrix, vector<int>& outMedianIndexVec);
-
-
-
- /**
- * This method creates a custom feature extractor instance and stores it's address in
- * NNShapeRecognizer::m_ltkFE. The local distance function pointer is also initialized.
- *
- * Semantics
- *
- *
- * - Intialize the NNShapeRecognizer::m_ptrFeatureExtractor with address of the feature extractor instance created
- * using LTKShapeFeatureExtractorFactory::createFeatureExtractor
- *
- * - Cache the address of LTKShapeFeatureExtractor::getLocalDistance() in an instance variable
- *
- * @param none
- *
- * @return 0 on LTKInc::SUCCESS and 1 on LTKInc::FAILURE
- *
- * @exception none
- */
- int initializeFeatureExtractorInstance(const LTKControlInfo& controlInfo);
-
- /**
- * This method trains the classifier from the train list file whose path is passed as paramater.
- *
- * Semantics
- *
- * - Open the trainListFile for reading.
- *
- * - Open the mdt file for writing.
- *
- * - Write header information to the mdt file
- * - NNShapeRecognizer::m_numShapes
- * - NNShapeRecognizer::m_traceDimension
- * - NNShapeRecognizer::m_flexibilityIndex
- *
- * - Get a valid line from the train list file
- * - Skip commented lines
- * - Skip lines where number_of_tokens != 2
- * - Throw error LTKErrorList::EINITSHAPE_NONZERO, if the first shape in the list file is not zero
- * - Throw error LTKErrorList::EINVALID_ORDER_LISTFILE if the shapes are not in sequential order
- *
- * - For every valid line get the ShapeSample from the ink file using NNShapeRecognizer::getShapeSampleFromInkFile
- * - Read ink from UNIPEN ink file
- * - Skip if the trace group is empty
- * - Pre process the trace group read from the ink file
- * - Extract features
- *
- * - Push all the ShapeSamples corresponding to a shape into a vector of ShapeSample ShapeSamplesVec.
- *
- * - When all the ShapeSamples corresponding to a Shape have been collected, cluster them using NNShapeRecognizer::performClustering
- *
- * - performClustering results in vector of clustered ShapeSamples.
- *
- * - Append these clustered vector<ShapeSample> to the mdt file.
- *
- *
- * @param listFilePath : string : Holds the path for train list file
- *
- * @return none
- *
- * @exception LTKErrorList::EFILE_OPEN_ERROR : Error in Opening a file (may be mdt file or list file)
- * @exception LTKErrorList::EINVALID_NUM_OF_SHAPES : Invalid value for number of shapes
- * @exception LTKErrorList::EINVALID_ORDER_LISTFILE: Invalid order of shapeId in List file
- * @exception LTKErrorList::EINITSHAPE_NONZERO : Initial shapeId must not be zero
- */
- int trainFromListFile(const string& listFilePath);
-
- /**
- * This method trains the classifier from the feature file whose path is passed as paramater
- *
- * Semantics
- *
- *
- * @param featureFilePath : string : Holds the path of Feature file
- *
- * @return none
- */
- int trainFromFeatureFile(const string& featureFilePath);
-
- int PreprocParametersForFeatureFile(stringStringMap& headerSequence);
-
- /**
- * This method will get the ShapeSample by giving the ink file path as input
- *
- * Semantics
- *
- * - Call the LTKShapeRecoUtil::readInkFromFile() method (Utility Method) to read the ink file
- * By reading this file, an inTraceGroup was generated
- *
- * - Preprocess the inTraceGroup and get the preprocessed trace group
- * LTKTraceGroup preprocessedTraceGroup
- *
- * - Extract features from the preprocessed trace group to get the ShapeSamples.
- *
- *
- * @param path : string : The path for Ink file
- * @param ShapeSample : ShapeSample : The ShapeSample generated after feature extraction
- *
- * @return SUCCESS : If the ShapeSample was got successfully
- * @return FAILURE : Empty traces group detected for current shape
- *
- * @exception LTKErrorList::EINKFILE_EMPTY : Ink file is empty
- * @exception LTKErrorList::EINK_FILE_OPEN : Unable to open unipen ink file
- * @exception LTKErrorList::EINKFILE_CORRUPTED : Incorrect or corrupted unipen ink file.
- * @exception LTKErrorList::EEMPTY_TRACE : Number of points in the trace is zero
- * @exception LTKErrorList::EEMPTY_TRACE_GROUP : Number of traces in the trace group is zero
- */
- int getShapeFeatureFromInkFile(const string& inkFilePath,
- vector<LTKShapeFeaturePtr>& shapeFeatureVec);
-
- /**
- * This method will do Custering for the given ShapeSamples
- *
- * Semantics
- *
- * - If the NNShapeRecognizer::m_prototypeReductionFactor is -1 means Automatic clustering could be done
- *
- * - If the NNShapeRecognizer::m_prototypeReductionFactor is 0 means No clustering was needed
- *
- * - Otherwise clustering is needed based on the value of NNShapeRecognizer::m_prototypeReductionFactor
- *
- * - Calculate Median if NNShapeRecognizer::m_prototypeReductionFactor is not equal to zero
- *
- *
- * @param ShapeSamplesVec : ShapeSampleVector : Holds all the ShapeSample for a single class
- * @param resultVector : ShapeSampleVector : Holds all the ShapeSample after clustering
- * @param sampleCount : int : Holds the number of shapes for a sample
- *
- * @return none
- * @exception none
- */
- int performClustering(const vector<LTKShapeSample> & shapeSamplesVec,
- vector<LTKShapeSample>& outClusteredShapeSampleVec);
-
- /**
- * This method will Update the Header information for the MDT file
- *
- * Semantics
- *
- * - Copy the version number to a string
- *
- * - Update the version info and algoName to NNShapeRecognizer::m_headerInfo, which specifies the
- * header information for MDT file
- *
- *
- * @param none
- *
- * @return none
-
- * @exception none
- */
- void updateHeaderWithAlgoInfo();
-
- int preprocess (const LTKTraceGroup& inTraceGroup, LTKTraceGroup& outPreprocessedTraceGroup);
-
- /**
- * This method will writes training results to the mdt file
- *
- * Semantics
- *
- * - If the feature representation was float then
- * - Iterate through the shape model
- * - Write the feature Dimension
- * - Write the feature vector size
- * - Write all the feature vector
- * - Write the class ID
- *
- * - If the feature representation was custom then
- * - Iterate through the shape model
- * - Write the feature Size
- * - Call the writeFeatureVector() to write all the feature vector
- * - Write the class ID
- *
- *
- * @param resultVector : ShapeSampleVector : A vector of ShapeSamples created as a result of training
- * mdtFileHandle : ofstream : Specifies the outut stream
- *
- * @return none
- *
- * @exception none
- */
-
- int appendPrototypesToMDTFile(const vector<LTKShapeSample>& prototypeVec, ofstream & mdtFileHandle);
-
- static bool sortDist(const NeighborInfo& x, const NeighborInfo& y);
-
- static void getDistance(const LTKShapeFeaturePtr& f1,const LTKShapeFeaturePtr& f2, float& distance);
-
- int getShapeSampleFromString(const string& inString, LTKShapeSample& outShapeSample);
-
- int mapFeatureExtractor();
-
- int deleteFeatureExtractorInstance();
- /**
- * This method extracts shape features from given TraceGroup
- *
- * Semantics
- *
- * - PreProcess tracegroup
- * - Extract Features
- *
- * @param inTraceGroup : LTKTraceGroup : Holds TraceGroup of sample
- *
- * @return SUCCESS: if shapeFeatures is populated successfully
- * FAILURE: return ErrorCode
- * @exception none
- */
-
- int extractFeatVecFromTraceGroup(const LTKTraceGroup& traceGroup,
- vector<LTKShapeFeaturePtr>& featureVec);
-
- /**
- * This method create MDTFile
- *
- * Semantics
- *
- *
- * @param None
- *
- * @return None
- *
- * @exception none
- */
- int writePrototypeSetToMDTFile();
-
- /**
- * This method adds Sample To Prototype
- *
- * Semantics
- *
- * - Add data in ascending order to ShapeID
- * -
- *
- * @param shapeSampleFeatures : LTKShapeSample : Holds features of sample to be added to PrototypeSet
- *
- * @return SUCCESS: if shapeSampleFeatures is populated successfully
- * FAILURE: return ErrorCode
- * @exception none
- */
- int insertSampleToPrototypeSet(const LTKShapeSample &shapeSampleFeatures);
-
- /**
- * This method computes the confidences of test sample belonging to various classes
- *
- * Semantics
- *
- * - Compute the confidence based on the values of m_nearestNeighbors and m_adaptiveKNN
- * - Populate the resultVector
- * - Sort the resultVector
- * -
- *
- * @param distIndexPairVector : vector<struct NeighborInfo>: Holds the samples, classIDs and distances to the test sample
- * @param resultVector : vector<LTKShapeRecoResult> : Holds the classIDs and the respective confidences
- *
- * @return SUCCESS: resultVector populated
- * FAILURE: return ErrorCode
- * @exception none
- */
-
- int computeConfidence();
-
- /**
- * The comparison function object of STL's sort() method, overloaded for class LTKShapeRecoResult, used to sort the vector of LTKShapeRecoResult based on the member variable confidence
- *
- * Semantics
- *
- * - Check if the first object's confidence value is greater than the second object's confidence value
- * - Return true or false
- * -
- *
- * @param x : LTKShapeRecoResult : First object for comparison
- * @param y : LTKShapeRecoResult : Second object for comparison
- *
- * @return true: If x.confidence > y.confidence
- * false: If x.confidence <= y.confidence
- * @exception none
- */
- static bool sortResultByConfidence(const LTKShapeRecoResult& x, const LTKShapeRecoResult& y);
-
- /**
- * The comparison function object of STL's max_element() method, overloaded for the map<int, int>, used to retrieve the maximum of the value field (second element) of map
- *
- * Semantics
- *
- * - Check if the first object's second value is greater than the second object's second value
- * - Return true or false
- * -
- *
- * @param lhs : map<int, int>::value_type : First object for comparison
- * @param rhs : map<int, int>::value_type : Second object for comparison
- *
- * @return true: If lhs.second > rhs.second
- * false: If lhs.second <= rhs.second
- * @exception none
- */
-
- static bool compareMap( const map<int, int>::value_type& lhs, const map<int, int>::value_type& rhs );
-
- /** This method is used to initialize the PreProcessor
- *
- * Semantics
- *
- * - Load the preprocessor DLL using LTKLoadDLL().
- *
- * - Get the proc address for creating and deleting the preprocessor instance.
- *
- * - Create preprocessor instance.
- *
- * - Start the logging for the preprocessor module.
- *
- * @param preprocDLLPath : string : Holds the Path of the Preprocessor DLL,
- * @param errorStatus : int : Holds SUCCESS or Error Values, if occurs
- * @return preprocessor instance
- *
- * @exception ELOAD_PREPROC_DLL Could not load preprocessor DLL
- * @exception EDLL_FUNC_ADDRESS_CREATE Could not map createPreprocInst
- * @exception EDLL_FUNC_ADDRESS_DELETE Could not map destroyPreprocInst
- */
- int initializePreprocessor(const LTKControlInfo& controlInfo,
- LTKPreprocessorInterface** preprocInstance);
-
-
- /** This method is used to deletes the PreProcessor instance
- *
- * Semantics
- *
- * - Call deleteLTKPreprocInst from the preproc.dll.
- *
- * - Unload the preprocessor DLL.
- *
- * @param ptrPreprocInstance : Holds the pointer to the LTKPreprocessorInterface
- * @return none
- * @exception none
- */
-
- int deletePreprocessor();
-
- /** This method is used to Unloads the preprocessor DLL.
- *
- * Semantics
- *
- * - If m_libHandler != NULL, unload the DLL
- * LTKUnloadDLL(m_libHandler);
- * m_libHandler = NULL;
- *
- * @param none
- * @return none
- * @exception none
- */
- int unloadPreprocessorDLL();
-
- /**
- * This function is the train method using LVQ
- *
- * Semantics
- *
- * - Note the start time for time calculations.
- *
- * - Create an instance of the feature extractor using NNShapeRecognizer::initializeFeatureExtractorInstance() method
- *
- * - Call train method depending on the inFileType
- * - NNShapeRecognizer::trainFromListFile if inFileType() = LTKMacros::INK_FILE
- * - tNNShapeRecognizer::rainFromFeatureFile if inFileType() = LTKMacros::FEATURE_FILE
- *
- * NOTE :
- * The NNShapeRecognizer::trainFromListFile populates the following data structures
- *
- * - NNShapeRecognizer::m_prototypeSet : Vector of clustered ShapeSample and
- *
- * - Process the prototype set using NNShapeRecognizer::processPrototypeSetForLVQ()
- *
- * - Update the headerInfo with algorithm version and name using NNShapeRecognizer::updateHeaderWithAlgoInfo()
- *
- * - Calculate the checksum.
- *
- * - Note the finish time for time calculations.
- *
- *
- * @param inputFilePath :string : Path of trainListFile / featureFile
- * @param strModelDataHeaderInfoFile : string : Holds the Header information of Model Data File
- * @param inFileType : string : Possible values ink / featureFile
- *
- * @return LTKInc::SUCCESS : if the training done successfully
- * @return errorCode : if it contains some errors
- */
- int trainLVQ(const string& inputFilePath,
- const string& mdtHeaderFilePath,
- const string& inFileType);
-
- /**
- * This function is used to compute the learning parameter that is used in Learning Vector Quantization (called from trainLVQ)
- * The input parameters are the iteration number, number of iterations, and the start value of the learning parameter (alpha)
- * the function returns the value of the learning parameter (linearly decreasing)
- */
- float linearAlpha(long iter, long length, double& initialAlpha,
- double lastAlpha,int correctDecision);
-
- /**
- * This function does the reshaping of prototype vector (called from trainLVQ)
- * The input parameters are the code vector, data vector (learning example in the context of LVQ), and alpha (learning parameter)
- * @param bestcodeVec is the character which we are trying to morph
- * the function modifies the character bestcodeVec
- */
- int morphVector(const LTKShapeSample& dataShapeSample,
- double talpha, LTKShapeSample& bestShapeSample);
-
- int processPrototypeSetForLVQ();
-
- int validatePreprocParameters(stringStringMap& headerSequence);
-
-
- /**< @brief LVQ Iteration Scale
- * <p>
- *
- * DEFAULT: LTKPreprocDefaults::NN_DEF_LVQITERATIONSCALE
- * </p>
- */
- int m_LVQIterationScale;
-
- /**< @brief LVQ Initial Alpha
- * <p>
- *
- * DEFAULT: LTKPreprocDefaults::NN_DEF_LVQINITIALALPHA
- * </p>
- */
- double m_LVQInitialAlpha;
-
- /**< @brief LVQ Distance Measure
- * <p>
- *
- * DEFAULT: LTKPreprocDefaults::NN_DEF_LVQDISTANCEMEASURE
- * </p>
- */
- string m_LVQDistanceMeasure;
-
- /**< @brief Pointer to LTKOSUtil interface
- * <p>
- *
- * </p>
- */
- LTKOSUtil* m_OSUtilPtr;
-
- vector<LTKShapeSample> m_trainSet;
-
-};
-
-
-#endif