/** * 选取最优结果Engine * */ #ifndef SELECTBESTENGINE_H #define SELECTBESTENGINE_H #include "AppCommon.h" #include "MyYaml.h" #include "EngineBase.h" #include "EngineFactory.h" class SelectBestEngine : public ai_matrix::EngineBase { public: SelectBestEngine(); ~SelectBestEngine(); APP_ERROR Init() override; APP_ERROR DeInit() override; APP_ERROR Process() override; private: //初始化车号参数信息 void InitNumParam(); //初始化属性参数信息 void InitProParam(); //初始化车头参数信息 void InitHeadParam(); //初始化参数信息 void InitParam(); //获取最优长度 int GetBestLength(std::vector &vecAllTransInfo, TargetMaxLen iMaxLen); //获取最优结果 std::string GetBest(std::vector &vecAllTransInfo, TargetMaxLen iMaxLen); //车号数据加入到待选优集合中 void NumAddSelectBestMap(std::shared_ptr pProcessData, TransSubData &transSubData); //属性数据加入到待选优集合中 void ProAddSelectBestMap(std::shared_ptr pProcessData, TransSubData &transSubData); //车头数据加入到待选优集合中 void HeadAddSelectBestMap(std::shared_ptr pProcessData, TransSubData &transSubData); //汇总车头 bool GetHeadBest(std::shared_ptr pProcessData); void GetNumBest(TrainNum &trainNum, std::shared_ptr pProcessData); void GetProBest(TrainPro &trainPro, std::shared_ptr pProcessData); //汇总车厢 void GetTrainBest(std::shared_ptr pProcessData); //拷贝最优图片到最优路径下 void CopyBestImgToBestPath(const std::shared_ptr &pTrain); //push数据到队列,队列满时则休眠一段时间再push void PushData(const std::string &strPort, const std::shared_ptr &pTrain); std::string strPort0_; std::string strPort1_; int iSelectBestMode_; //选优模式 std::string strResultPath_; std::string strBestPath_; int iNumIndex_ = 1; //当前车号所属车厢号 int iProIndex_ = 1; //当前属性所属车厢号 std::map> mapNumInfo_; //车号待选优集合 key [0:车型; 1:编号] float fMaxScoreSumNum_; //当前车厢车号最高得分 std::string strBestNumImg_; //当前车厢车号最高分的图片名 uint64_t i64TimeStampNum_ = 0; //当前车厢车号最高分的图片时间戳 Step1Location step1LocationBestNum_; //当前车厢车号最高分的图片大框坐标 std::map mapTrainTypeId_; //车厢类型ID集合 [key:车厢类型ID; value:识别到次数] (标识哪种类型的车,根据车号大框区分) uint32_t iDataSourceNum_ = 0; std::map> mapProInfo_; //属性待选优集合 key [0:载重; 1:自重; 2:容积; 3:换长; 4:容量记表] float fMaxScoreSumPro_; //当前车厢属性最高得分 std::string strBestProImg_; //当前车厢属性最高分的图片名 uint64_t i64TimeStampPro_ = 0; //当前车厢属性最高分的图片时间戳 Step1Location step1LocationBestPro_; //当前车厢属性最高分的图片大框坐标 uint32_t iDataSourcePro_ = 0; std::map> mapHeadInfo_; //车头待选优集合 key [0:车头型号; 1:车头编号] float fMaxScoreSumHead_; //车头最高得分 std::string strBestHeadImg_; //车头最高分的图片名 uint64_t i64TimeStampHead_ = 0; //车头最高分的图片时间戳 Step1Location step1LocationBestHead_; //车头最高分的图片大框坐标 uint32_t iDataSourceHead_ = 0; std::map mapDataSourceIsEnd_; //[key-数据源id, value-数据是否结束] }; ENGINE_REGIST(SelectBestEngine) #endif