aboutsummaryrefslogtreecommitdiffstats
path: root/src/virtualkeyboard/3rdparty
diff options
context:
space:
mode:
authorJarkko Koivikko <jarkko.koivikko@code-q.fi>2015-08-18 11:52:32 +0300
committerJarkko Koivikko <jarkko.koivikko@code-q.fi>2015-08-27 06:57:03 +0000
commit724c5fd14d6dc397e07c791e990543cea227864f (patch)
tree0e771b1e94ff8ad5f2f16454a68b3d30c0668b96 /src/virtualkeyboard/3rdparty
parent478ad59bd91a277f45224ba4d33dd36b66535c2c (diff)
lipi-toolkit: Optimize model loading
Avoid unnecessary use of std::vector during model loading. Instead, load the data directly from the input buffer. This change improves the performance of model loading, since it eliminates construction and destruction of std::vector in a hot code path. Change-Id: Ib886386a68979f1717896674ed525242f90d806c Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
Diffstat (limited to 'src/virtualkeyboard/3rdparty')
-rw-r--r--src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeature.h2
-rw-r--r--src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/pointfloat/PointFloatShapeFeature.cpp24
-rw-r--r--src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/pointfloat/PointFloatShapeFeature.h2
-rw-r--r--src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.cpp15
4 files changed, 20 insertions, 23 deletions
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeature.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeature.h
index cf2018dc..c233d3c5 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeature.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/common/LTKShapeFeature.h
@@ -103,6 +103,8 @@ public:
virtual int initialize(const floatVector& initFloatVector)=0;
+ virtual int initialize(floatVector::const_pointer initFloatData, size_t dataSize) { (void)initFloatData; (void)dataSize; return SUCCESS; }
+
/**
* <b>Responsibility</b><br>
* This function returns the character (char*) representation for the instance of type LTKShapeFeature.
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/pointfloat/PointFloatShapeFeature.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/pointfloat/PointFloatShapeFeature.cpp
index 2248e1ec..ca66cc5b 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/pointfloat/PointFloatShapeFeature.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/pointfloat/PointFloatShapeFeature.cpp
@@ -479,25 +479,21 @@ int PointFloatShapeFeature::toFloatVector(floatVector& floatVec)
*****************************************************************************/
int PointFloatShapeFeature::initialize(const floatVector& initFloatVector)
{
+ return initialize(initFloatVector.data(), initFloatVector.size());
+}
- if (initFloatVector.size() == 0)
+int PointFloatShapeFeature::initialize(floatVector::const_pointer initFloatData, size_t dataSize)
+{
+ if (dataSize < 5)
{
return FAILURE;
}
- m_x = initFloatVector[0];
- m_y = initFloatVector[1];
- m_sinTheta = initFloatVector[2];
- m_cosTheta = initFloatVector[3];
-
- if(initFloatVector[4] == 1)
- {
- m_penUp = true;
- }
- else
- {
- m_penUp = false;
- }
+ m_x = *(initFloatData++);
+ m_y = *(initFloatData++);
+ m_sinTheta = *(initFloatData++);
+ m_cosTheta = *(initFloatData++);
+ m_penUp = *(initFloatData++) != 0;
return SUCCESS;
}
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/pointfloat/PointFloatShapeFeature.h b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/pointfloat/PointFloatShapeFeature.h
index 0bdc97a0..fde704fc 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/pointfloat/PointFloatShapeFeature.h
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/featureextractor/pointfloat/PointFloatShapeFeature.h
@@ -151,6 +151,8 @@ public:
int initialize(const floatVector& initFloatVector);
+ int initialize(floatVector::const_pointer initFloatData, size_t dataSize);
+
int toFloatVector(vector<float>& floatVec);
/**
diff --git a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.cpp b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.cpp
index 8da7e807..89207b85 100644
--- a/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.cpp
+++ b/src/virtualkeyboard/3rdparty/lipi-toolkit/src/reco/shaperec/nn/NNShapeRecognizer.cpp
@@ -1912,7 +1912,7 @@ int NNShapeRecognizer::loadModelData()
#ifdef OPTIMIZE_LOAD_MODEL_DATA
vector<LTKShapeFeaturePtr>& shapeFeatureVector = shapeSampleFeaturesRef.getFeatureVectorRef();
shapeFeatureVector.reserve(numberOfFeatures);
- floatVector::const_iterator floatFeatureVectorBufferIterator = floatFeatureVectorBuffer.begin();
+ floatVector::const_pointer floatFeatureVectorData = floatFeatureVectorBuffer.data();
#else
vector<LTKShapeFeaturePtr> shapeFeatureVector;
#endif
@@ -1920,21 +1920,18 @@ int NNShapeRecognizer::loadModelData()
for ( ; featureIndex < numberOfFeatures ; featureIndex++)
{
+#ifndef OPTIMIZE_LOAD_MODEL_DATA
floatVector floatFeatureVector;
int featureValueIndex = 0;
+#endif
shapeFeature = m_ptrFeatureExtractor->getShapeFeatureInstance();
#ifdef OPTIMIZE_LOAD_MODEL_DATA
- floatFeatureVector.reserve(featureDimension);
-#endif
+ if (shapeFeature->initialize(floatFeatureVectorData + featureIndex * featureDimension, featureDimension) != SUCCESS)
+#else
for(; featureValueIndex < featureDimension ; featureValueIndex++)
{
-#ifdef OPTIMIZE_LOAD_MODEL_DATA
- float featureValue = *floatFeatureVectorBufferIterator;
- floatFeatureVectorBufferIterator++;
- floatFeatureVector.push_back(featureValue);
-#else
float featureValue = 0.0f;
mdtFileHandle.read((char*) &featureValue, floatSize);
@@ -1945,10 +1942,10 @@ int NNShapeRecognizer::loadModelData()
{
break;
}
-#endif
}
if (shapeFeature->initialize(floatFeatureVector) != SUCCESS)
+#endif
{
LOG(LTKLogger::LTK_LOGLEVEL_ERR)<<"Error: "<<
EINVALID_INPUT_FORMAT << " " <<