2024-08-12 03:34:13 +00:00
|
|
|
|
#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 train,classId:" << 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;
}
|