新增引擎

This commit is contained in:
Mr.V 2024-08-09 17:56:38 +08:00
parent fe8de3ab8e
commit 829d3e4790
6 changed files with 73 additions and 31 deletions

View File

@ -111,6 +111,10 @@ aux_source_directory(${PROJECT_SRC_ROOT}/engine/DecodeEngine DecodeEngine_SRC)
include_directories(${PROJECT_SRC_ROOT}/engine/MoveEngine)
aux_source_directory(${PROJECT_SRC_ROOT}/engine/MoveEngine MoveEngine_SRC)
# SaveImageEngine
include_directories(${PROJECT_SRC_ROOT}/engine/SaveImageEngine)
aux_source_directory(${PROJECT_SRC_ROOT}/engine/SaveImageEngine SaveImageEngine_SRC)
#
include_directories(
#base include
@ -179,6 +183,7 @@ file(
${DataSourceEngine_SRC}
${DecodeEngine_SRC}
${MoveEngine_SRC}
${SaveImageEngine_SRC}
)
#

View File

@ -203,14 +203,24 @@ typedef struct
// 识别区域坐标
typedef struct {
int iLine = -1; //字段代号(仅第二步使用)
int iClassId = -1; //大小框的类别
float fScore = 0; //分数
float fClear = 0; //清晰度
float fLTX = 0; //左上X坐标 Left Top x
float fLTY = 0; //左上y坐标 Left Top y
float fRBX = 0; //右下y坐标 Right Bottom x
float fRBY = 0; //右下y坐标 Right Bottom y
// 字段代号(仅第二步使用)
int iLine = -1;
// 大小框的类别
int iClassId = -1;
// 框的名称
std::string strClassName;
// 分数
float fScore = 0;
// 清晰度
float fClear = 0;
// 左上X坐标 Left Top x
float fLTX = 0;
// 左上y坐标 Left Top y
float fLTY = 0;
// 右下y坐标 Right Bottom x
float fRBX = 0;
// 右下y坐标 Right Bottom y
float fRBY = 0;
} VCoordinate;
// 集装箱信息
@ -299,16 +309,24 @@ typedef struct
// 存图数据
typedef struct
{
// 车厢位置状态
std::string strTrainStage;
// 行车方向
std::string strDirection;
// 车厢运动状态
std::string strTrainStatus;
// 帧图像数据
VFrameData frameData;
uint32_t iFrameId = 0;
std::string strImgPath;
std::string strImgName;
bool bIsEnd = false; // 列车结束标识
std::shared_ptr<DecodedData> pDecodeData = nullptr;
// 车厢位置阶段(车头、头身交接、车身、车尾、无车)
int iTrainStage = MONITOR_MODEL_INIT_STATE;
// 图片存储目录
std::string strImgPath;
// 图片名字
std::string strImgName;
// 图片需要标记的框坐标
std::vector<VCoordinate> vecCoordinate;
} SaveImgData;
// 0 = 停止识别; 1 = 开始识别
extern std::atomic<int> g_identify_type;
// -1 = 未知方向; 1 = 向左行驶; 2 = 向右行驶
extern std::atomic<int> g_come_direction;
#endif

View File

@ -8,8 +8,10 @@ engines:
VideoEngine: 0
VideoDecodeEngine: 0
MoveEngine: 0
SaveImageEngine: 0
#engine连接
connects:
VideoEngine_0_0: "VideoDecodeEngine_0_0 1024"
VideoDecodeEngine_0_0: "MoveEngine_0_0 1024"
MoveEngine_0_0: "SaveImageEngine_0_0 1024"

File diff suppressed because one or more lines are too long

View File

@ -156,17 +156,16 @@ void MoveEngine::SingleDeviceProcess(std::shared_ptr<ProcessData> pProcessData,
pProcessData->iDataNO = iMoveDataNO_++;
//push端口,存图
std::shared_ptr<SaveImgData> pSaveImgData = std::make_shared<SaveImgData>();
pSaveImgData->iFrameId = pProcessData->iFrameId; // 帧号
pSaveImgData->strImgPath = strResultPath_ + pProcessData->strTrainDate + "/" + pProcessData->strTrainTime;
pSaveImgData->strImgName = std::to_string(pSaveImgData->iFrameId) + ".jpg";
pSaveImgData->bIsEnd = pProcessData->bIsTrainEnd;
pSaveImgData->iTrainStage = iType;
pSaveImgData->strImgPath = baseConfig_.strDebugResultPath + "/" + pProcessData->strTrainDate + "/"
+ StringUtil::getins()->replace_all_distinct(pProcessData->strTrainTime, ":", "-");
pSaveImgData->strImgName = std::to_string(pProcessData->iFrameId) + ".jpg";
// pSaveImgData->strTrainStage = intTrainStage_2_str(iType);
pSaveImgData->frameData.pData = pProcessData->sourceFrameData.pData;
pSaveImgData->frameData.iSize = pProcessData->sourceFrameData.iSize;
pSaveImgData->frameData.iWidth = pProcessData->dataSourceInfo.iWidth;
pSaveImgData->frameData.iHeight = pProcessData->dataSourceInfo.iHeight;
pSaveImgData->frameData.i64TimeStamp = pProcessData->sourceFrameData.i64TimeStamp;
// outputQueMap_[strPort0_]->push(std::static_pointer_cast<void>(pSaveImgData));
outputQueMap_[strPort0_]->push(std::static_pointer_cast<void>(pSaveImgData));
}
APP_ERROR MoveEngine::Process()
@ -231,10 +230,10 @@ APP_ERROR MoveEngine::Process()
// LogDebug <<"模型得分 车头:"<< fReturnVal[0] << " 车头车身交接:" << fReturnVal[1] <<" 无车:"<< fReturnVal[2]<<" 车尾:"<< fReturnVal[3]<<" 有车:"<< fReturnVal[4];
switch (iType) {
case MONITOR_MODEL_TRAIN_HEAD:
LogDebug << "来车状态:车头";
LogDebug << "来车状态:车头";
break;
case MONITOR_MODEL_HEAD_FIRST:
LogDebug << "来车状态:车头";
LogDebug << "来车状态:车头车身之间";
break;
case MONITOR_MODEL_NO_TRAIN:
LogDebug << "来车状态:无车";
@ -243,15 +242,13 @@ APP_ERROR MoveEngine::Process()
LogDebug << "来车状态:车尾";
break;
case MONITOR_MODEL_TRAIN_BODY:
LogDebug << "来车状态:";
LogDebug << "来车状态:";
break;
default:
LogDebug << "来车状态:未定义";
break;
}
if (this->identifyConfig_.bTrainHeardDetect)
{
bGetTrainExist = (iType == MONITOR_MODEL_TRAIN_BODY
@ -330,3 +327,21 @@ APP_ERROR MoveEngine::Process()
}
}
std::string MoveEngine::intTrainStage_2_str(int iTrainStage)
{
switch (iTrainStage) {
case MONITOR_MODEL_TRAIN_HEAD:
return "train_head";
case MONITOR_MODEL_HEAD_FIRST:
return "head_and_carriage";
case MONITOR_MODEL_NO_TRAIN:
return "no_train";
case MONITOR_MODEL_TRAIN_TAIL:
return "train_tail";
case MONITOR_MODEL_TRAIN_BODY:
return "carriage";
default:
return "";
}
}

View File

@ -42,6 +42,8 @@ private:
//使用单device处理
void SingleDeviceProcess(std::shared_ptr<ProcessData> pProcessData, int nType);
std::string intTrainStage_2_str(int iTrainStage);
void sendComeTrain();
void sendEndTrain();
@ -51,8 +53,8 @@ private:
ai_matrix::ModelConfig modelConfig_;
ai_matrix::IdentifyConfig identifyConfig_;
ai_matrix::BaseConfig baseConfig_;
std::string strResultPath_;
std::string strBestPath_;
// std::string strResultPath_;
// std::string strBestPath_;
YoloV8Inference yolov8model;
int iStepInter_ = 0; //(0:不识别; 1:开始识别; 2:结束识别)
@ -76,7 +78,7 @@ private:
unsigned int input_size = STEP0_INPUT_SIZE;
unsigned int output_size = STEP0_OUTPUT_SIZE;
unsigned int det_size = STEP0_CLASS_NUM + STEP0_CLEAR_NUM + 5;
unsigned int batch_size = STEP0_BATCH_SIZE;
unsigned int batch_size = STEP0_BATCH_SIZE;
YoloV5ModelInfo modelinfo;
std::queue<std::shared_ptr<ProcessData>> queProcessData_;