VTrain_BothSides/engine/TrainDivideEngine/TrainDivideEngine.cpp

1 line
25 KiB
C++
Raw Normal View History

2025-01-09 02:02:52 +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_.reset(); 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 &parationInfo, std::shared_ptr<InferenceResultData> pInferenceResultData, SingleData &singleData) { parationInfo.iDataSource = pInferenceResultData->iDataSource; parationInfo.iSpaceFrame = pInferenceResultData->iFrameId; parationInfo.iCenterX = singleData.fLTX + (singleData.fRBX - singleData.fLTX) / 2; parationInfo.strTrainDate = pInferenceResultData->strTrainDate; parationInfo.strTrainTime = pInferenceResultData->strTrainTime; parationInfo.strTrainName = pInferenceResultData->strTrainName; 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 && ( (pInferenceResultData->iDirection == DIRECTION_LEFT && vecParationInfo[i - 1].iCenterX < vecParationInfo[i].iCenterX - this->identifyConfig_.iSplitFrameSpanPx) || (pInferenceResultData->iDirection == DIRECTION_RIGHT && vecParationInfo[i - 1].iCenterX - this->identifyConfig_.iSplitFrameSpanPx > vecParationInfo[i].i