generated from zhangwei/Train_Identify
119 lines
4.3 KiB
C++
119 lines
4.3 KiB
C++
#include "PostTrainAnaEngine.h"
|
||
|
||
using namespace ai_matrix;
|
||
|
||
PostTrainAnaEngine::PostTrainAnaEngine() {}
|
||
|
||
PostTrainAnaEngine::~PostTrainAnaEngine() {}
|
||
|
||
APP_ERROR PostTrainAnaEngine::Init()
|
||
{
|
||
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
|
||
strResultPath_ = MyYaml::GetIns()->GetPathValue("gc_result_path");
|
||
std::map<int, ai_matrix::DataSourceConfig> mapUseDataSouceCfg = MyYaml::GetIns()->GetUseDataSourceConfig();
|
||
|
||
for (auto iter = mapUseDataSouceCfg.begin(); iter != mapUseDataSouceCfg.end(); iter++)
|
||
{
|
||
//端口0是主摄像头push存图,需给其他使用的数据源push(来车/结束)通知
|
||
if (iter->first != 0)
|
||
{
|
||
setPushPort_.insert(iter->first);
|
||
}
|
||
else
|
||
{
|
||
dataSourceCfg_ = iter->second;
|
||
}
|
||
}
|
||
InitParam();
|
||
LogInfo << "PostTrainAnaEngine Init ok";
|
||
return APP_ERR_OK;
|
||
}
|
||
|
||
APP_ERROR PostTrainAnaEngine::DeInit()
|
||
{
|
||
LogInfo << "PostTrainAnaEngine DeInit ok";
|
||
return APP_ERR_OK;
|
||
}
|
||
|
||
|
||
/**
|
||
* 参数初始化(列车结束时需调用)
|
||
* inParam : N/A
|
||
* outParam: N/A
|
||
* return : N/A
|
||
*/
|
||
void PostTrainAnaEngine::InitParam()
|
||
{
|
||
iMoveDataNO_ = dataSourceCfg_.iSkipInterval;
|
||
}
|
||
|
||
APP_ERROR PostTrainAnaEngine::Process()
|
||
{
|
||
int iRet = APP_ERR_OK;
|
||
while (!isStop_)
|
||
{
|
||
std::shared_ptr<void> pVoidData0 = nullptr;
|
||
inputQueMap_[strPort0_]->pop(pVoidData0);
|
||
if (nullptr == pVoidData0)
|
||
{
|
||
usleep(1000); //1ms
|
||
continue;
|
||
}
|
||
|
||
std::shared_ptr<DecodedData> pDecodedData = std::static_pointer_cast<DecodedData>(pVoidData0);
|
||
if (pDecodedData->iStatus == TRAINSTATUS_NO && !pDecodedData->bIsEnd)
|
||
{
|
||
continue;
|
||
}
|
||
|
||
//组织数据, push其他端口 (只通知2次,车来一次,车结束一次)
|
||
if (iMoveDataNO_ == dataSourceCfg_.iSkipInterval || pDecodedData->bIsEnd)
|
||
{
|
||
LogDebug << "traindate:" << pDecodedData->strTrainDate << " trainname:" << pDecodedData->strTrainName
|
||
<< " frameid:" << iMoveDataNO_ << " isEnd:" << pDecodedData->bIsEnd;
|
||
|
||
uint32_t iFrameId = iMoveDataNO_ / dataSourceCfg_.iSkipInterval * dataSourceCfg_.iSkipInterval;
|
||
std::shared_ptr<MoveData> pMoveData = std::make_shared<MoveData>();
|
||
pMoveData->iFrameId = iFrameId; //当前帧号
|
||
pMoveData->i64TimeStamp = pDecodedData->i64TimeStamp;
|
||
pMoveData->bHasTrain = true;
|
||
pMoveData->bIsEnd = pDecodedData->bIsEnd;
|
||
pMoveData->strTrainDate = pDecodedData->strTrainDate;
|
||
pMoveData->strTrainName = pDecodedData->strTrainName;
|
||
pMoveData->iDirection = pDecodedData->iDirection;
|
||
for (auto iter = setPushPort_.begin(); iter != setPushPort_.end(); iter++)
|
||
{
|
||
outputQueMap_[engineName_ + "_" + std::to_string(engineId_) + "_" + std::to_string(*iter)]->push(std::static_pointer_cast<void>(pMoveData));
|
||
}
|
||
outputQueMap_[engineName_ + "_" + std::to_string(engineId_) + "_5"]->push(std::static_pointer_cast<void>(pMoveData));
|
||
}
|
||
|
||
//跳帧 存图
|
||
if (iMoveDataNO_ % dataSourceCfg_.iSkipInterval == 0 || pDecodedData->bIsEnd)
|
||
{
|
||
// push端口,存图
|
||
std::shared_ptr<SaveImgData> pSaveImgData = std::make_shared<SaveImgData>();
|
||
pSaveImgData->pDecodeData = pDecodedData;
|
||
pSaveImgData->iFrameId = iMoveDataNO_; //帧号
|
||
char szCameraNo[4] = {0};
|
||
sprintf(szCameraNo, "%03d", pDecodedData->iDataSource + 1);
|
||
pSaveImgData->strImgPath = strResultPath_ + pDecodedData->strTrainDate + "/" + pDecodedData->strTrainName + "/" + szCameraNo;
|
||
pSaveImgData->strImgName = std::to_string(pSaveImgData->iFrameId) + ".jpg";
|
||
pSaveImgData->bIsEnd = pDecodedData->bIsEnd;
|
||
pSaveImgData->bSaveToFtp = true;
|
||
pSaveImgData->i64TimeStamp = pDecodedData->i64TimeStamp;
|
||
pSaveImgData->iDirection = pDecodedData->iDirection;
|
||
iRet = outputQueMap_[strPort0_]->push(std::static_pointer_cast<void>(pSaveImgData));
|
||
}
|
||
|
||
iMoveDataNO_++;
|
||
|
||
//结束帧或停车时需重新初始化相关信息
|
||
if (pDecodedData->bIsEnd)
|
||
{
|
||
InitParam();
|
||
}
|
||
}
|
||
return APP_ERR_OK;
|
||
}
|