2024-12-10 07:23:46 +00:00
|
|
|
|
#include "TrainDivideEngine.h"
using namespace ai_matrix;
TrainDivideEngine::TrainDivideEngine() {}
TrainDivideEngine::~TrainDivideEngine() {}
APP_ERROR TrainDivideEngine::Init()
{
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
strPort1_ = engineName_ + "_" + std::to_string(engineId_) + "_1";
this->baseConfig_ = Config::getins()->getBaseConfig();
this->identifyConfig_ = Config::getins()->getIdentifyConfig();
this->dataSourceConfig_ = Config::getins()->getDataSourceConfig();
InitParam();
LogInfo << "TrainDivideEngine Init ok";
return APP_ERR_OK;
}
APP_ERROR TrainDivideEngine::DeInit()
{
LogInfo << "TrainDivideEngine DeInit ok";
return APP_ERR_OK;
}
/**
* 初始化参数信息
* inParam : N/A
* outParam: N/A
* return : N/A
*/
void TrainDivideEngine::InitParam()
{
iPushSpaceFrameId_ = 0;
i64TimeStampFirst_ = 0;
bPushIsEnd_ = false;
vecParationInfo_.clear();
std::vector<PartionInfo>().swap(vecParationInfo_);
bDealCenterFlag_ = false;
parationInfoLast_.iSpaceFrame = 0;
parationInfoLast_.iCenterX = 0;
parationInfoLast_.strTrainDate = "";
parationInfoLast_.strTrainTime = "";
parationInfoLast_.bIsEnd = false;
mapNumCenterInfo_.clear();
mapProCenterInfo_.clear();
bHaveHeadFlag_ = false;
headInfo_.iFrameId = 0;
headInfo_.fCenterX = 0;
this->iTrainIndex = 0;
}
/**
* 构造车厢间隔信息
* inParam : N/A
* outParam: N/A
* return : N/A
*/
void TrainDivideEngine::makeParationInfo(PartionInfo ¶tionInfo, std::shared_ptr<InferenceResultData> pInferenceResultData, SingleData &singleData)
{
// parationInfo.i64EndTimeStamp = pInferenceResultData->i64TimeStamp;
parationInfo.iSpaceFrame = pInferenceResultData->iFrameId;
parationInfo.iCenterX = singleData.fLTX + (singleData.fRBX - singleData.fLTX) / 2;
parationInfo.strTrainDate = pInferenceResultData->strTrainDate;
parationInfo.strTrainTime = pInferenceResultData->strTrainTime;
parationInfo.bIsEnd = pInferenceResultData->bIsEnd;
parationInfoLast_ = parationInfo;
}
/**
* 处理中心间隔信息
* inParam : N/A
* outParam: N/A
* return : N/A
*/
void TrainDivideEngine::dealCenterSpace(std::vector<PartionInfo> &vecParationInfo,
std::shared_ptr<InferenceResultData> pInferenceResultData)
{
int iVecSize = vecParationInfo.size();
if (iVecSize < 0)
{
return;
}
LogDebug
<< "积累的车厢切分信息数:" << iVecSize
<< " 当前帧:" << pInferenceResultData->iFrameId
<< " 第一个车厢切分帧:" << vecParationInfo.at(0).iSpaceFrame
<< " 最后一个车厢切分帧:" << vecParationInfo.at(iVecSize - 1).iSpaceFrame
<< " 最后一个车厢切分帧是否为结束:" << vecParationInfo.at(iVecSize - 1).bIsEnd;
/*
因停车后再行驶未能及时判断出为行驶状态,导致更新间隔信息,出现漏切分车厢
漏切分时vecParationInfo中保存的是两辆车的间隔信息,因此针对vecParationInfo做特殊处理,从此处切分出遗漏的车厢。
*/
std::vector<int> vecSpacePos;
for (int i = 1; i < iVecSize; i++)
{
bool bIntervalFlag =
(vecParationInfo[i].iSpaceFrame - vecParationInfo[i - 1].iSpaceFrame) > this->identifyConfig_.iPartitionFrameSpan;
LogDebug
<< "上一帧ID:" << vecParationInfo[i - 1].iSpaceFrame
<< " 上一帧间隔X轴中线:" << vecParationInfo[i - 1].iCenterX
<< " 本帧ID:" << vecParationInfo[i].iSpaceFrame
<< " 本帧间隔X轴中线:" << vecParationInfo[i].iCenterX
<< " 满足帧间隔:" << bIntervalFlag
<< " 累计处理计数i:" << i;
if (bIntervalFlag
&& (
(g_come_direction == DIRECTION_LEFT
&& vecParationInfo[i - 1].iCenterX < vecParationInfo[i].iCenterX - this->identifyConfig_.iSplitFrameSpanPx)
||
(g_come_direction == DIRECTION_RIGHT
&& vecParationInfo[i - 1].iC
|