2024-08-12 03:34:13 +00:00
|
|
|
|
#include "SelectBestEngine.h"
#include "myutils.h"
using namespace ai_matrix;
SelectBestEngine::SelectBestEngine() {}
SelectBestEngine::~SelectBestEngine() {}
APP_ERROR SelectBestEngine::Init()
{
strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0";
strPort1_ = engineName_ + "_" + std::to_string(engineId_) + "_1";
iSelectBestMode_ = MyYaml::GetIns()->GetIntValue("gc_select_best_mode");
strResultPath_ = MyYaml::GetIns()->GetPathValue("gc_result_path");
strBestPath_ = MyYaml::GetIns()->GetPathValue("gc_best_path");
//获取几个摄像头识别车号
std::map<int, ai_matrix::DataSourceConfig> mapUseDataSouceCfg = MyYaml::GetIns()->GetUseDataSourceConfig();
for (auto iter = mapUseDataSouceCfg.begin(); iter != mapUseDataSouceCfg.end(); iter++)
{
if (iter->second.strTarget.find("NUM") != std::string::npos)
{
mapDataSourceIsEnd_[iter->first] = false;
}
}
InitParam();
LogInfo << "SelectBestEngine Init ok";
return APP_ERR_OK;
}
APP_ERROR SelectBestEngine::DeInit()
{
LogInfo << "SelectBestEngine DeInit ok";
return APP_ERR_OK;
}
/**
* push数据到队列,队列满时则休眠一段时间再push
* inParam : const std::string strPort push的端口
: const std::shared_ptr<Train> &pTrain push的数据
* outParam: N/A
* return : N/A
*/
void SelectBestEngine::PushData(const std::string &strPort, const std::shared_ptr<Train> &pTrain)
{
while (true)
{
int iRet = outputQueMap_[strPort]->push(std::static_pointer_cast<void>(pTrain));
if (iRet != 0)
{
LogDebug << "num:" << pTrain->trainNum.strTrainNum << " push fail iRet:" << iRet;
if (iRet == 2)
{
usleep(10000); // 10ms
continue;
}
}
break;
}
}
/**
* 初始化车号参数信息
* inParam : N/A
* outParam: N/A
* return : N/A
*/
void SelectBestEngine::InitNumParam()
{
mapTrainTypeId_.clear();
mapNumInfo_.clear();
strBestNumImg_ = "";
i64TimeStampNum_ = 0;
fMaxScoreSumNum_ = 0;
memset(&step1LocationBestNum_, 0, sizeof(step1LocationBestNum_));
iDataSourceNum_ = 0;
}
/**
* 初始化属性参数信息
* inParam : N/A
* outParam: N/A
* return : N/A
*/
void SelectBestEngine::InitProParam()
{
mapProInfo_.clear();
strBestProImg_ = "";
i64TimeStampPro_ = 0;
fMaxScoreSumPro_ = 0;
memset(&step1LocationBestPro_, 0, sizeof(step1LocationBestPro_));
iDataSourcePro_ = 0;
}
/**
* 初始化车号参数信息(只有车结束调用)
* inParam : N/A
* outParam: N/A
* return : N/A
*/
void SelectBestEngine::InitHeadParam()
{
mapHeadInfo_.clear();
strBestHeadImg_ = "";
i64TimeStampHead_ = 0;
fMaxScoreSumHead_ = 0;
memset(&step1LocationBestHead_, 0, sizeof(step1LocationBestHead_));
iDataSourceHead_ = 0;
}
/**
* 初始化参数信息
* inParam : N/A
* outParam: N/A
* return : N/A
*/
void SelectBestEngine::InitParam()
{
iNumIndex_ = 1;
iProIndex_ = 1;
InitNumParam();
InitProParam();
InitHeadParam();
for (auto iter = mapDataSourceIsEnd_.begin(); iter != mapDataSourceIsEnd_.end(); iter++)
{
iter->second = false;
}
}
/**
* 获取最优长度
* inParam : std::vector<TransInfo> &vecAllTransInfo 待汇总取优的结果集
* : TargetMaxLen iMaxLen 目标最大长度
* outParam: N/A
* return : 最优长度
*/
int SelectBestEngine::GetBestLength(std::vector<TransInfo> &vecAllTransInfo, TargetMaxLen iMaxLen)
{
//1.获取结果中每种长度出现的次数
std::map<int, int> mapResultSize;
for (size_t i = 0; i < vecAllTransInfo.size(); i++)
{
int iNowSize = vecAllTransInfo[i].vecValue.size();
if (mapResultSize.find(iNowSize) != mapResultSize.end())
{
mapResultSize[iNowSize]++;
continue;
}
mapResultSize[iNowSize] = 1;
}
int iBestLen = 0;
//2.获取最优长度
if (iSelectBestMode_ == FREQUENCY)
{
|