Commit 26b0e09a authored by Jussi Lindgren's avatar Jussi Lindgren
Browse files

Algorithms: Changed Classifier Processor to process stimuli first

parent 0ab20de9
......@@ -31,6 +31,8 @@ boolean CBoxAlgorithmClassifierProcessor::loadClassifier(const char* sFilename)
return false;
}
m_vStimulation.clear();
//Now check the version, and let's display a message if the version is not good
string l_sVersion;
if(l_pRootNode->hasAttribute(c_sXmlVersionAttributeName))
......@@ -185,8 +187,8 @@ boolean CBoxAlgorithmClassifierProcessor::uninitialize(void)
m_pClassifier = NULL;
}
m_oHyperplaneValuesEncoder.uninitialize();
m_oProbabilityValuesEncoder.uninitialize();
m_oHyperplaneValuesEncoder.uninitialize();
m_oLabelsEncoder.uninitialize();
m_oStimulationDecoder.uninitialize();
......@@ -206,6 +208,39 @@ boolean CBoxAlgorithmClassifierProcessor::process(void)
{
IBoxIO& l_rDynamicBoxContext=this->getDynamicBoxContext();
// Check if we have a command first
for(uint32 i=0; i<l_rDynamicBoxContext.getInputChunkCount(1); i++)
{
m_oStimulationDecoder.decode(i);
if(m_oStimulationDecoder.isHeaderReceived())
{
}
if(m_oStimulationDecoder.isBufferReceived())
{
for(uint64 i=0;i<m_oStimulationDecoder.getOutputStimulationSet()->getStimulationCount();i++)
{
if(m_oStimulationDecoder.getOutputStimulationSet()->getStimulationIdentifier(i) == OVTK_StimulationId_TrainCompleted)
{
IBox& l_rStaticBoxContext=this->getStaticBoxContext();
CString l_sConfigurationFilename;
l_rStaticBoxContext.getSettingValue(0, l_sConfigurationFilename);
this->getLogManager() << LogLevel_Trace << "Reloading classifier\n";
if(!loadClassifier(l_sConfigurationFilename.toASCIIString()))
{
this->getLogManager() << LogLevel_Error << "Error reloading classifier\n";
return false;
}
}
}
}
if(m_oStimulationDecoder.isEndReceived())
{
}
}
// Classify data
for(uint32 i=0; i<l_rDynamicBoxContext.getInputChunkCount(0); i++)
{
const uint64 l_ui64StartTime=l_rDynamicBoxContext.getInputChunkStartTime(0, i);
......@@ -246,6 +281,7 @@ boolean CBoxAlgorithmClassifierProcessor::process(void)
l_rDynamicBoxContext.markOutputAsReadyToSend(0, l_ui64StartTime, l_ui64EndTime);
l_rDynamicBoxContext.markOutputAsReadyToSend(1, l_ui64StartTime, l_ui64EndTime);
l_rDynamicBoxContext.markOutputAsReadyToSend(2, l_ui64StartTime, l_ui64EndTime);
}
else
{
......@@ -258,7 +294,7 @@ boolean CBoxAlgorithmClassifierProcessor::process(void)
this->getLogManager() << LogLevel_Error << "Classification algorithm failed.\n";
return false;
}
}
}
if(m_oFeatureVectorDecoder.isEndReceived())
{
......@@ -271,42 +307,9 @@ boolean CBoxAlgorithmClassifierProcessor::process(void)
l_rDynamicBoxContext.markOutputAsReadyToSend(2, l_ui64StartTime, l_ui64EndTime);
}
l_rDynamicBoxContext.markInputAsDeprecated(0, i);
}
// Check if we have a command
for(uint32 i=0; i<l_rDynamicBoxContext.getInputChunkCount(1); i++)
{
m_oStimulationDecoder.decode(i);
if(m_oStimulationDecoder.isHeaderReceived())
{
}
if(m_oStimulationDecoder.isBufferReceived())
{
for(uint64 i=0;i<m_oStimulationDecoder.getOutputStimulationSet()->getStimulationCount();i++)
{
if(m_oStimulationDecoder.getOutputStimulationSet()->getStimulationIdentifier(i) == OVTK_StimulationId_TrainCompleted)
{
IBox& l_rStaticBoxContext=this->getStaticBoxContext();
CString l_sConfigurationFilename;
l_rStaticBoxContext.getSettingValue(0, l_sConfigurationFilename);
this->getLogManager() << LogLevel_Trace << "Reloading classifier\n";
if(!loadClassifier(l_sConfigurationFilename.toASCIIString()))
{
this->getLogManager() << LogLevel_Error << "Error reloading classifier\n";
return false;
}
}
}
}
if(m_oStimulationDecoder.isEndReceived())
{
}
}
return true;
}
......@@ -15,8 +15,8 @@
#define OVTK_Algorithm_Classifier_InputParameterId_FeatureVector OpenViBE::CIdentifier(0x6D69BF98, 0x1EB9EE66) // Single vector to classify
#define OVTK_Algorithm_Classifier_InputParameterId_FeatureVectorSet OpenViBE::CIdentifier(0x27C05927, 0x5DE9103A) // Training set
#define OVTK_Algorithm_Classifier_InputParameterId_Configuration OpenViBE::CIdentifier(0xA705428E, 0x5BB1CADD) // The model
#define OVTK_Algorithm_Classifier_InputParameterId_NumberOfClasses OpenViBE::CIdentifier(0x1B95825A, 0x24F2E949)
#define OVTK_Algorithm_Classifier_InputParameterId_ExtraParameter OpenViBE::CIdentifier(0x42AD6BE3, 0xF483DE3F) // Params specific to classifier type
#define OVTK_Algorithm_Classifier_InputParameterId_NumberOfClasses OpenViBE::CIdentifier(0x1B95825A, 0x24F2E949)
#define OVTK_Algorithm_Classifier_OutputParameterId_Class OpenViBE::CIdentifier(0x8A39A7EA, 0xF2EE45C4)
#define OVTK_Algorithm_Classifier_OutputParameterId_ClassificationValues OpenViBE::CIdentifier(0xDA77D7E4, 0x766B48EA)
......@@ -89,8 +89,8 @@ namespace OpenViBEToolkit
rAlgorithmPrototype.addInputParameter (OVTK_Algorithm_Classifier_InputParameterId_FeatureVector, "Feature vector", OpenViBE::Kernel::ParameterType_Matrix);
rAlgorithmPrototype.addInputParameter (OVTK_Algorithm_Classifier_InputParameterId_FeatureVectorSet, "Feature vector set", OpenViBE::Kernel::ParameterType_Matrix);
rAlgorithmPrototype.addInputParameter (OVTK_Algorithm_Classifier_InputParameterId_Configuration, "Configuration", OpenViBE::Kernel::ParameterType_Pointer);
rAlgorithmPrototype.addInputParameter (OVTK_Algorithm_Classifier_InputParameterId_ExtraParameter, "Extra parameter", OpenViBE::Kernel::ParameterType_Pointer);
rAlgorithmPrototype.addInputParameter (OVTK_Algorithm_Classifier_InputParameterId_NumberOfClasses, "Number of classes", OpenViBE::Kernel::ParameterType_UInteger);
rAlgorithmPrototype.addInputParameter (OVTK_Algorithm_Classifier_InputParameterId_ExtraParameter, "Extra parameter", OpenViBE::Kernel::ParameterType_Pointer);
rAlgorithmPrototype.addOutputParameter(OVTK_Algorithm_Classifier_OutputParameterId_Class, "Class", OpenViBE::Kernel::ParameterType_Float);
rAlgorithmPrototype.addOutputParameter(OVTK_Algorithm_Classifier_OutputParameterId_ClassificationValues, "Hyperplane distance", OpenViBE::Kernel::ParameterType_Matrix);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment