#ifndef APP_COMMON_H #define APP_COMMON_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include #include #include #include #include #include #include #ifdef __cplusplus }; #endif #include "Utils.h" #include "TimeUtil.h" #include "StringUtil.h" #include "FileUtil.h" #include "Config.h" #include "Log.h" //#include "httplib.h" #include "multitype_queue.h" #include "nvidia_acl_datatype.h" #include "CommonDataType.h" #include "cuda_utils.h" #include "logging.h" #include "yolov5_common.h" #include "utils.h" #include "calibrator.h" #include "preprocess.h" #include "yololayer.h" #include "CommonEnum.h" #include "CommonStruct.h" using namespace Yolo; using namespace std; using namespace cv; using namespace nvinfer1; using namespace nvcaffeparser1; #define IMAGE_WIDTH 1920 //1920 2560 #define IMAGE_HEIGHT 1080 //1080 1440 #define USE_FP16 // set USE_INT8 or USE_FP16 or USE_FP32 #define DEVICE 0 // GPU id #define BATCH_SIZE 1 //batch size #define MAX_WORKSPAXE_SIZE (16 * (1 << 20)) //工作空间大小 #define MAX_IMAGE_INPUT_SIZE_THRESH 3000*3000 #define INPUT_CHANNEL 3 //输入通道数 //NVIDIA NX YOLOV5模型推理相关宏(因不与ASCEND冲突放到这) #define NMS_THRESH 0.4 #define CONF_THRESH 0.5 #define GET_INPUT_SIZE(w, h) (INPUT_CHANNEL * w *h) #define GET_OUTPUT_SIZE(w, h, cr , ca) (INPUT_CHANNEL * (((h / 32) * ( h / 32)) + ((h / 16) * ( h / 16)) + ((h / 8) * ( h / 8))) * (STEP1_POS_CONF + cr + ca)) //STEP0 #define STEP0_MAX_IMAGE_INPUT_SIZE_THRESH 3000*3000 #define CORNER_BATCH_SIZE 1 //batch size #define CORNER_NMS_THRESH 0.5 //corner 非极大值抑制阈值 #define CORNER_SCORE_THRESH 0.6 //corner 置信度(得分)阈值 #define CORNER_INPUT_CHANNEL 3 //输入通道数 #define CORNER_CLASS_NUM 2 //corner 2分类 #define CORNER_INPUT_H 640 //corner 输入图像高 #define CORNER_INPUT_W 640 //corner 输入图像宽 #define CORNER_BBOX_SIZE1 (CORNER_INPUT_H/32) #define CORNER_BBOX_SIZE2 (CORNER_INPUT_H/16) #define CORNER_BBOX_SIZE3 (CORNER_INPUT_H/8) #define CORNER_POS_CONF 5 #define CORNER_INPUT_SIZE INPUT_CHANNEL*CORNER_INPUT_H*CORNER_INPUT_W //input #define CORNER_OUTPUT_SIZE INPUT_CHANNEL*(CORNER_BBOX_SIZE1*CORNER_BBOX_SIZE1+CORNER_BBOX_SIZE2*CORNER_BBOX_SIZE2+CORNER_BBOX_SIZE3*CORNER_BBOX_SIZE3)*(CORNER_CLASS_NUM+CORNER_POS_CONF) //output //STEP1 #define STEP1_POS_CONF 5 #define STEP1_NMS_THRESH 0.5 //step1 非极大值抑制阈值 #define STEP1_SCORE_THRESH 0.6 //step1 置信度(得分)阈值 #define STEP1_CLASS_NUM 19 //step1 7分类 #define STEP1_CLEAR_NUM 21 //step1 21个清晰度 #define STEP1_INPUT_H 640 //step1 输入图像高 #define STEP1_INPUT_W 640 //step1 输入图像宽 #define STEP1_BATCH_SIZE 1 #define STEP1_OUTPUT_HISTOGRAM_N 5 //不能超过139167 #define STEP1_BBOX_SIZE1 (STEP1_INPUT_H/32) #define STEP1_BBOX_SIZE2 (STEP1_INPUT_H/16) #define STEP1_BBOX_SIZE3 (STEP1_INPUT_H/8) #define STEP1_INPUT_SIZE INPUT_CHANNEL*STEP1_INPUT_H*STEP1_INPUT_W //input #define STEP1_OUTPUT_SIZE INPUT_CHANNEL*(STEP1_BBOX_SIZE1*STEP1_BBOX_SIZE1+STEP1_BBOX_SIZE2*STEP1_BBOX_SIZE2+STEP1_BBOX_SIZE3*STEP1_BBOX_SIZE3)*(STEP1_CLEAR_NUM+STEP1_CLASS_NUM+STEP1_POS_CONF) //output //STEP1 #define STEP1_CLASS_NUM_DATE 8 #define STEP1_CLASS_NUM_CON 7 //STEP2 #define STEP2_POS_CONF 5 #define STEP2_NMS_THRESH 0.5 //step2 非极大值抑制阈值 #define STEP2_SCORE_THRESH 0.6 //step2 置信度(得分)阈值 #define STEP2_CLASS_NUM 47 //step2 31分类 #define STEP2_CLEAR_NUM 5 //step2 5个清晰度 #define STEP2_INPUT_H 608 //step2 输入图像高 #define STEP2_INPUT_W 608 //step2 输入图像宽 #define STEP2_BATCH_SIZE 1 #define STEP2_OUTPUT_HISTOGRAM_N 5 //step2 不能超过22743 #define STEP2_BBOX_SIZE1 (STEP2_INPUT_H/32) #define STEP2_BBOX_SIZE2 (STEP2_INPUT_H/16) #define STEP2_BBOX_SIZE3 (STEP2_INPUT_H/8) #define STEP2_INPUT_SIZE INPUT_CHANNEL*STEP2_INPUT_H*STEP2_INPUT_W //input #define STEP2_OUTPUT_SIZE INPUT_CHANNEL*(STEP2_BBOX_SIZE1*STEP2_BBOX_SIZE1+STEP2_BBOX_SIZE2*STEP2_BBOX_SIZE2+STEP2_BBOX_SIZE3*STEP2_BBOX_SIZE3)*(STEP2_CLEAR_NUM+STEP2_CLASS_NUM+STEP2_POS_CONF) //output template std::string join_dims(const std::vector<_T>& dims){ std::stringstream output; char buf[64]; const char* fmts[] = {"%d", " x %d"}; for(int i = 0; i < dims.size(); ++i){ snprintf(buf, sizeof(buf), fmts[i != 0], dims[i]); output << buf; } return output.str(); } inline unsigned int getElementSize(nvinfer1::DataType t); inline int64_t volume(const nvinfer1::Dims& d); // 0 = 停止识别; 1 = 开始识别 extern std::atomic g_identify_type; // -1 = 未知方向; 1 = 向左行驶; 2 = 向右行驶 extern std::atomic g_come_direction; // 0 = 无车; 1 = 有车; extern std::atomic g_car_type; #endif