Train_Identify_arm/nvidia_ascend_engine/common_engine/SelectBestEngine/SelectBestEngine.cpp

1 line
25 KiB
C++
Raw Normal View History

#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) {