2024-12-10 07:23:46 +00:00
|
|
|
#include "TrainStep1FilterEngine.h"
using namespace ai_matrix;
//namespace
//{
// //按照x坐标排列
// bool CompareX(const SingleData &a, const SingleData &b)
// {
// return a.fLTX < b.fLTX;
// }
//}
TrainStep1FilterEngine::TrainStep1FilterEngine() {}
TrainStep1FilterEngine::~TrainStep1FilterEngine() {}
APP_ERROR TrainStep1FilterEngine::Init()
{
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
this->baseConfig_ = Config::getins()->getBaseConfig();
this->dataSourceConfig_ = Config::getins()->getDataSourceConfig();
this->identifyConfig_ = Config::getins()->getIdentifyConfig();
this->mapTargetStr_.insert(std::make_pair(NUM, "NUM"));
this->mapTargetStr_.insert(std::make_pair(PRO, "PRO"));
this->mapTargetStr_.insert(std::make_pair(HEAD, "HEAD"));
this->mapTargetStr_.insert(std::make_pair(SPACE, "SPACE"));//SPACE
this->mapTargetStr_.insert(std::make_pair(TRAINSPACE, "SPACE"));//SPACE
this->mapTargetStr_.insert(std::make_pair(CONTAINER, "CONTAINER"));//CONTAINER
this->initParam();
LogInfo << "TrainStep1FilterEngine Init ok";
return APP_ERR_OK;
}
APP_ERROR TrainStep1FilterEngine::DeInit()
{
LogInfo << "TrainStep1FilterEngine DeInit ok";
return APP_ERR_OK;
}
/**
* 参数初始化(列车结束时需调用)
*/
void TrainStep1FilterEngine::initParam()
{
this->pInferenceResultDataPre_ = nullptr;
this->iNotChgCount_ = 0;
while (!this->stackBackInfo_.empty())
{
this->stackBackInfo_.pop();
}
while (!this->queInferenceResultData_.empty())
{
this->queInferenceResultData_.pop();
}
iTrainStatus_ = TRAINSTATUS_RUN;
g_come_direction = DIRECTION_UNKNOWN;
mapCalDirection_.clear();
}
void TrainStep1FilterEngine::addBackInfo()
{
std::string strAllClassType;
for (size_t i = 0; i < this->pInferenceResultDataPre_->vecSingleData.size(); i++)
{
if (strAllClassType.find(this->mapTargetStr_[this->pInferenceResultDataPre_->vecSingleData[i].iTargetType]) != std::string::npos)
{
continue;
}
strAllClassType += this->mapTargetStr_[this->pInferenceResultDataPre_->vecSingleData[i].iTargetType];
}
if (strAllClassType.empty())
{
return;
}
TrainBackInfo trainBackInfo;
trainBackInfo.pInferenceResultData = this->pInferenceResultDataPre_;
trainBackInfo.strAllClassType = strAllClassType;
if (this->stackBackInfo_.empty())
{
this->stackBackInfo_.push(trainBackInfo);
LogDebug << "frameId:" << this->pInferenceResultDataPre_->iFrameId << " 新增倒车信息:" << strAllClassType
<< " 当前数量:" << this->stackBackInfo_.size();
}
else
{
TrainBackInfo trainBackInfoTop = stackBackInfo_.top();
if (trainBackInfoTop.strAllClassType != trainBackInfo.strAllClassType)
{
if (((g_come_direction == DIRECTION_RIGHT &&
this->dataSourceConfig_.iRightFirst == RIGHT_RUN_AND_PRO_FIRST) ||
(g_come_direction == DIRECTION_LEFT &&
this->dataSourceConfig_.iLeftFirst == LEFT_RUN_AND_PRO_FIRST)) &&
((trainBackInfo.strAllClassType == "SPACE" &&
(trainBackInfoTop.strAllClassType == "PROSPACE" ||
trainBackInfoTop.strAllClassType == "SPACEPRO")) ||
(trainBackInfo.strAllClassType == "NUM" &&
(trainBackInfoTop.strAllClassType == "NUMSPACE" ||
trainBackInfoTop.strAllClassType == "SPACENUM")) ||
((trainBackInfo.strAllClassType == "PROSPACE" ||
trainBackInfo.strAllClassType == "SPACEPRO")
&& trainBackInfoTop.strAllClassType == "PRO")))
{
return;
}
if (((g_come_direction == DIRECTION_RIGHT &&
this->dataSourceConfig_.iRightFirst == RIGHT_RUN_AND_NUM_FIRST) ||
(g_come_direction == DIRECTION_LEFT &&
this->dataSourceConfig_.iRightFir
|