/*
 * @Author: your name
 * @Date: 2024-11-10 16:05:35
 * @LastEditors: your name
 * @LastEditTime: 2024-11-10 16:07:08
 * @Description: file content
 * @FilePath: /VCarContainer_arm/engine/Step1InferenceEngine/ContainerStep1InferenceEngine.h
 * 
 * Copyright © 2022 <Shandong Matrix Software Engineering Co., Ltd>
 */
/**
 * 车号属性第一步推理前预处理
 * */

#ifndef CONTAINERSTEP1INFERENCEENGINE_H
#define CONTAINERSTEP1INFERENCEENGINE_H

#include <opencv2/opencv.hpp>
#include "AppCommon.h"
#include "EngineBase.h"
#include "EngineFactory.h"
#include "yolov5_clearity_inference.h"

class ContainerStep1InferenceEngine : public ai_matrix::EngineBase
{
public:
    ContainerStep1InferenceEngine();
    ~ContainerStep1InferenceEngine();

    APP_ERROR Init() override;
    APP_ERROR DeInit() override;
    APP_ERROR Process() override;

private:
	//初始化识别模型
	APP_ERROR initModel();
    //过滤无效信息
    void filterInvalidInfo(std::vector<stDetection> &vecInferenceResult,
                           std::shared_ptr<VDetectInfo> &pVDetectInfo);

    void getMaxScoreResult(std::vector<stDetection> &vecInferenceResult);

    void getTargetType(SingleData &singleData);

    std::string strPort0_;
    ai_matrix::ModelConfig modelConfig_;
    ai_matrix::DataSourceConfig dataSourceConfig_;
    ai_matrix::IdentifyConfig identifyConfig_;
    YoloV5ClearityInference yolov5model;
	
	const char*  INPUT_BLOB_NAME = "images";   //输入层名称
	const char*  OUTPUT_BLOB_NAME = "output";   //输出层名称
	unsigned int img_width = IMAGE_WIDTH;
	unsigned int img_height = IMAGE_HEIGHT;
	unsigned int model_width = STEP1_INPUT_W;
	unsigned int model_height = STEP1_INPUT_H;
	unsigned int clear_num = STEP1_CLEAR_NUM;
	unsigned int class_num = STEP1_CLASS_NUM_CON;
	unsigned int input_size = STEP1_INPUT_SIZE;
	unsigned int output_size = STEP1_OUTPUT_SIZE;
	unsigned int det_size = STEP1_CLASS_NUM_CON + STEP1_CLEAR_NUM + 5;
    unsigned int batch_size = STEP1_BATCH_SIZE; 
	float score_threshold = STEP1_SCORE_THRESH;
	float nms_threshold = STEP1_NMS_THRESH;

	YoloV5ClearityModelInfo modelinfo;

//    std::map<int, ai_matrix::DataSourceConfig> mapDataSourceCfg_; //[key-数据源id, value-数据源参数配置信息]
//    std::map<int, int> mapSameSideFlatcarSid_;                    //[key-数据源id, value-同侧识别平车数据源id]
};

ENGINE_REGIST(ContainerStep1InferenceEngine)

#endif
