generated from zhangwei/Matrixai
1 line
4.6 KiB
C++
1 line
4.6 KiB
C++
#include "SaveResultCSVEngine.h"
|
|
|
|
using namespace ai_matrix;
|
|
|
|
SaveResultCSVEngine::SaveResultCSVEngine() {}
|
|
|
|
SaveResultCSVEngine::~SaveResultCSVEngine() {}
|
|
|
|
APP_ERROR SaveResultCSVEngine::Init()
|
|
{
|
|
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
|
|
strPort1_ = engineName_ + "_" + std::to_string(engineId_) + "_1";
|
|
|
|
this->baseConfig_ = Config::getins()->getBaseConfig();
|
|
|
|
LogInfo << "SaveResultCSVEngine Init ok";
|
|
return APP_ERR_OK;
|
|
}
|
|
|
|
APP_ERROR SaveResultCSVEngine::DeInit()
|
|
{
|
|
LogInfo << "SaveResultCSVEngine DeInit ok";
|
|
return APP_ERR_OK;
|
|
}
|
|
|
|
/**
|
|
* 保存车厢的最优结果到CSV中
|
|
* inParam : std::shared_ptr<Train> pTrain :列车信息
|
|
* outParam:
|
|
* return : true/false
|
|
*/
|
|
bool SaveResultCSVEngine::saveTrainCsv(std::shared_ptr<VTrainInfo> pTrain)
|
|
{
|
|
std::string strTrainPath = this->baseConfig_.strResultPath + "/"
|
|
+ pTrain->strTrainDate + "/"
|
|
+ StringUtil::getins()->replace_all_distinct(pTrain->strTrainTime, ":", "-") + "/";
|
|
|
|
//1. 创建保存路径 (固定路径/YYYY-MM-DD/hh-mm-ss/iDataSoure/)
|
|
if (!FileUtil::getins()->createDirPath(strTrainPath))
|
|
{
|
|
LogError << "iCarXH:" << pTrain->iCarOrder << " csv save err";
|
|
return false;
|
|
}
|
|
|
|
//2. 保存csv
|
|
std::string strCsvName = pTrain->strTrainDate + "_" + pTrain->strTrainTime + ".csv";
|
|
strCsvName = StringUtil::getins()->replace_all_distinct(strCsvName, std::string(":"), std::string("-"));
|
|
std::string strCsvPath = strTrainPath + strCsvName;
|
|
|
|
bool bIsExsit = false;
|
|
if (access(strCsvPath.c_str(), F_OK) != -1)
|
|
{
|
|
bIsExsit = true;
|
|
}
|
|
|
|
try
|
|
{
|
|
std::string strContainerNo, strContainerImage;
|
|
for (auto it = pTrain->vecContainer.cbegin(); it != pTrain->vecContainer.cend(); ++it)
|
|
{
|
|
strContainerNo += ("[" + it->strContainerNo + "]");
|
|
strContainerImage += ("[" + it->strImg + "]");
|
|
}
|
|
// 写文件
|
|
std::ofstream outFile;
|
|
outFile.open(strCsvPath, std::ios::app);
|
|
|
|
if (!bIsExsit)
|
|
{
|
|
outFile << "TrackName" << ','
|
|
<< "TDirection" << ','
|
|
<< "CarOrder" << ','
|
|
<< "Category" << ','
|
|
<< "TType" << ','
|
|
<< "TNum" << ','
|
|
<< "TLoadWeight" << ','
|
|
<< "TTareWeight" << ','
|
|
<< "TVolume" << ','
|
|
<< "TChangeLen" << ','
|
|
<< "TNum_image" << ','
|
|
<< "TPro_image" << ','
|
|
<< "StartFrame" << ','
|
|
<< "EndFrame" << ','
|
|
<< "StartTime" << ','
|
|
<< "EndTime" << ','
|
|
<< "ContainerNo" << ','
|
|
<< "Container_image" << ','
|
|
<< "TNumCoordinate" << ','
|
|
<< "TProCoordinate"
|
|
<< std::endl;
|
|
}
|
|
outFile << this->baseConfig_.strTrackName << ','
|
|
<< pTrain->iTDirection << ','
|
|
<< pTrain->iCarOrder << ','
|
|
<< pTrain->iCategory << ','
|
|
<< pTrain->strTType << ','
|
|
<< pTrain->strTNum << ','
|
|
<< pTrain->strTLoadWeight << ','
|
|
<< pTrain->strTTareWeight << ','
|
|
<< pTrain->strTVolume << ','
|
|
<< pTrain->strTChangeLen << ','
|
|
<< pTrain->strTNum_image << ','
|
|
<< pTrain->strTPro_image << ','
|
|
<< pTrain->iStartFrame << ','
|
|
<< pTrain->iEndFrame << ','
|
|
<< pTrain->strStartTime << ','
|
|
<< pTrain->strEndTime << ','
|
|
<< strContainerNo << ','
|
|
<< strContainerImage << ','
|
|
<< "" << ','
|
|
<< ""
|
|
<< std::endl;
|
|
|
|
outFile.close();
|
|
}
|
|
catch (const std::exception &)
|
|
{
|
|
LogError << "strCsvPath:" << strCsvPath << " train savecsv fail!";
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
APP_ERROR SaveResultCSVEngine::Process()
|
|
{
|
|
int iRet = APP_ERR_OK;
|
|
while (!isStop_)
|
|
{
|
|
//pop端口0 车厢信息
|
|
std::shared_ptr<void> pVoidData0 = nullptr;
|
|
iRet = inputQueMap_[strPort0_]->pop(pVoidData0);
|
|
if (nullptr == pVoidData0)
|
|
{
|
|
usleep(1000);
|
|
continue;
|
|
}
|
|
|
|
std::shared_ptr<VTrainInfo> pTrain = std::static_pointer_cast<VTrainInfo>(pVoidData0);
|
|
|
|
this->saveTrainCsv(pTrain);
|
|
|
|
outputQueMap_[strPort0_]->push(std::static_pointer_cast<void>(pTrain));
|
|
outputQueMap_[strPort1_]->push(std::static_pointer_cast<void>(pTrain));
|
|
|
|
}
|
|
return APP_ERR_OK;
|
|
}
|