Train_Identify_arm/nvidia_ascend_engine/common_engine/TransEngine/TransTrainEngine.cpp

1 line
29 KiB
C++
Raw Normal View History

#include "TransTrainEngine.h" #include "myutils.h" #include <regex> #include <deque> using namespace ai_matrix; namespace { //按照x坐标排列 bool CompareX(const SingleData &v1, const SingleData &v2) { return (v1.fLTX < v2.fLTX); } //自定义比较规则 bool CmpVec(const pair<string, uint32_t> &P1, const pair<string, uint32_t> &P2) { return P1.second < P2.second; } } TransTrainEngine::TransTrainEngine() {} TransTrainEngine::~TransTrainEngine() {} APP_ERROR TransTrainEngine::Init() { bUseEngine_ = MyUtils::getins()->ChkIsHaveTarget("NUM"); if (!bUseEngine_) { LogWarn << "engineId_:" << engineId_ << " not use engine"; return APP_ERR_OK; } strPort0_ = engineName_ + "_" + std::to_string(engineId_) + "_0"; modelConfig_ = MyYaml::GetIns()->GetModelConfig("TrainStepTwoEngine"); strResultPath_ = MyYaml::GetIns()->GetPathValue("gc_result_path"); //读取模型参数信息文件 Json::Value jvModelInfo; if (!MyUtils::getins()->ReadJsonInfo(jvModelInfo, modelConfig_.strModelInfoPath)) { LogError << "ModelInfoPath:" << modelConfig_.strModelInfoPath << " doesn't exist or read failed!"; return APP_ERR_COMM_NO_EXIST; } for (int i = 0; i < jvModelInfo["class"].size(); i++) { vecClassNames_.push_back(jvModelInfo["class"][i].asString()); } // 获取几个摄像头识别车号 std::map<int, ai_matrix::DataSourceConfig> mapUseDataSouceCfg = MyYaml::GetIns()->GetUseDataSourceConfig(); for (auto iter = mapUseDataSouceCfg.begin(); iter != mapUseDataSouceCfg.end(); iter++) { iSkipInterval_ = iter->second.iSkipInterval; if (iter->second.strTarget.find("NUM") != std::string::npos) { LogDebug << "sourceid:" << iter->first << " deal Num"; mapDataSourceIsEnd_[iter->first] = false; } } InitParam(); LogInfo << "TransTrainEngine Init ok"; return APP_ERR_OK; } APP_ERROR TransTrainEngine::DeInit() { if (!bUseEngine_) { LogWarn << "engineId_:" << engineId_ << " not use engine"; return APP_ERR_OK; } LogInfo << "TransTrainEngine DeInit ok"; return APP_ERR_OK; } /** * 初始化参数信息 * inParam : N/A * outParam: N/A * return : N/A */ void TransTrainEngine::InitParam() { for (auto iter = mapDataSourceIsEnd_.begin(); iter != mapDataSourceIsEnd_.end(); iter++) { iter->second = false; } mapNumInfo_.clear(); mapPreFrameId_.clear(); } /** * 校验车型是否符合验证 * inParam : int classId 大框类别id * : const std::string &trainNum 车型字符信息 * outParam: N/A * return : true:符合; false:不符合 */ bool TransTrainEngine::AuthTransNum(int classId, const std::string &trainNum) { // LogInfo << "classId:" << classId << " trainNum:" << trainNum; switch (classId) { case TRAIN_HEAD: // 车头上的编号 break; case K_TRAIN_NUM: // 编号 矿车、煤炭漏斗车(兖矿自备、枣矿自备) { if (trainNum == "K13" || trainNum == "KM100AH") { return true; } std::regex reg; switch (trainNum.size()) { case 4: reg = "^K[1FMZ]{1}[36789]{1}[018ABKNT]{1}"; break; case 5: reg = "^K[1M]{1}[368]{1}[1ABDN]{1}[AGKNT]{1}"; break; case 6: reg = "^K[MF]{1}[69]{1}[80]{1}A[KH]{1}"; break; default: LogWarn << "Unknow trainclassId:" << classId << " trainNum:" << trainNum; return false; } return std::regex_match(trainNum, reg); } case C_TRAIN_NUM: // 敞车 特殊车型 C5D CF CFK { if (trainNum == "CF" || trainNum == "C62A(N)") { return true; }