#pragma once #ifdef _MSC_VER #include #else #include #endif #include "sy_common.h" #define DETECTTYPE 9 //二次属性分析结果结构体 #ifndef __CLASSIFY_OBJ_RESULT__ #define __CLASSIFY_OBJ_RESULT__ typedef struct classify_obj_res //分类结果结构体 { int res_index; //分类结果 float res_prob; //分类结构体 classify_obj_res() : res_index(0), res_prob(0) {}; } classify_obj_res; #endif //行人二次属性分析结构 + 特征结果 #ifndef __HP_OBJ_RESULT__ #define __HP_OBJ_RESULT__ const int HP_FIR_INDEX_SIZE = 16; const int HF_FEA_SIZE = 128; typedef struct hp_res { classify_obj_res res_objs[HP_FIR_INDEX_SIZE]{}; //分类结果 } hp_res; #ifndef __INT8__ #define __INT8__ typedef unsigned char int8; #endif typedef struct hp_result { hp_res res_objs{}; //分类结果 int8 feature[HF_FEA_SIZE]{}; //特征 } hp_result; #endif //人骑车二次属性分析结构 + 特征结果 #ifndef __HCP_OBJ_RESULT__ #define __HCP_OBJ_RESULT__ const int HCP_FIR_INDEX_SIZE = 14; const int HCF_FEA_SIZE = 128; typedef struct hcp_res { classify_obj_res res_objs[HCP_FIR_INDEX_SIZE]{}; //分类结果 } hcp_res; typedef struct hcp_result //人骑车二次属性分析以及特征结果 { hcp_res res_objs{}; //分类结果 int8 feature[HCF_FEA_SIZE]{}; //特征 } hcp_result; #endif #define VEHICLE_FEA_SIZE 128 #define PLATENUM 8 //车牌号码位数 #define MAX_PALTE_COUNT 10 //每张图片中最多检测出10个车牌 #define SINGLETYPE_BLUE 0 //单排蓝色 #define SINGLETYPE_YELLOW 1 //单排黄色 #define SINGLETYPE_WHITE 2 //单排白色 #define SINGLETYPE_BLACK 3 //单排黑色 #define DOUBLETYPE_YELLOW 4 //双排黄色 #define DOUBLETYPE_WHITE 5 //双排白色 #define NEWENERGYTYPE_YELLOWGREEN 6 //新能源黄绿色 #define NEWENERGYTYPE_WHITEGRA 7 //新能源白绿色 //车牌号码 #ifndef VPLATENUM_RESULT_ #define VPLATENUM_RESULT_ typedef struct vplate_num { char character[4]; float maxprob; int index; }vplate_num; #endif #ifndef VP_RESULT_ #define VP_RESULT_ typedef struct vplate_result { sy_rect rect; float detect_score; vplate_num recg[PLATENUM]; float num_score; int type; //车牌类型。只做车牌检测,车牌类型为:0-单层车牌,1-双层车牌;做车牌检测识别,0-单排蓝色 1-单排黄色 2-单排白色 3-单排黑色 4-双排黄色 5-双排白色 6-新能源黄绿色 7-新能源白绿色 int state; //车牌状态:0-无车牌,1-车牌,2-遮挡车牌 float state_score;//车牌状态置信度 sy_point rr_point[4];//斜框 }vplate_result; #endif #ifndef VR_RESULT_ #define VR_RESULT_ typedef struct vr_result //结果 { char vehicle_brand[260]; //车辆品牌 char vehicle_subbrand[260]; //车辆子品牌 char vehicle_issue_year[260]; //车辆年款 char vehicle_type[260]; //车辆类型 char freight_ton[260]; //货车吨级 float name_score; //识别置信度 }vr_result; #endif #ifndef VC_RESULT_ #define VC_RESULT_ typedef struct vc_result { int res_index; //车颜色结果index float res_prob; //识别置信度 vc_result() : res_index(0), res_prob(0) {}; }vc_result; #endif //VEHICLE #ifndef __VEHICLE_OBJ_RESULT__ #define __VEHICLE_OBJ_RESULT__ typedef struct vehicle_result //车二次属性分析结果 { vr_result vr_res; //车型识别结果 vc_result vc_res; //车颜色识别结果 vplate_result vp_res; //车牌检测结果 int8 feature[VEHICLE_FEA_SIZE]{}; //车辆特征 } vehicle_result; #endif //HUMAN FACE #ifndef FACIALFEAPOINTSIZE //关键点检测支持25个点 #define FACIALFEAPOINTSIZE 25 #endif #ifndef __FD_INFO__ #define __FD_INFO__ typedef struct fd_info { sy_rect face_position; //人脸位置 float face_pos_score; //人脸框置信度 sy_point facial_fea_point[FACIALFEAPOINTSIZE]; //人脸关键点位置信息 int occlusion; //人脸遮挡度,范围值为0-100,越大表示人脸遮挡程度越高 int clarity; //人脸清晰度,范围值为0-100,越大表示图像越清晰,人脸清晰度判别建议阈值为30 int brightness; //人脸亮度,只有3种可能的值:[-1->太暗,0->正常,1->太亮],亮度结果会受亮度阈值参数brightness_min和brightness_max影响 //int hat; //带帽子,范围为0-100,越大表示越可能有佩戴帽子,建议判别阈值为50 //int glass; //带眼镜,范围为0-100,越大表示越可能有戴眼镜,建议判别阈值为70 float roll; //姿态角 float yaw; //姿态角 float pitch; //姿态角 float score; //人脸置信度 } fd_info; #endif //返回的检测物体快照结果 #ifndef __VIDEO_OBJECT_SNAPSHOT__ #define __VIDEO_OBJECT_SNAPSHOT__ typedef struct video_object_snapshot { int task_id; //该物体属于的任务ID号 int object_id; //该物体的ID号 char video_image_path[256]; //该物体快照的视频截图保存路径 char snapshot_image_path[256]; //该物体快照抠图保存路径 char face_image_path[256]; //该物体人脸抠图保存路径 int object_type_index; //该物体所属类别的索引 char obj_type[64]; //该物体属于的类别 double progress; //该路视频的检测进度 int task_frame_count; //该物体当前出现的帧号 int left; //该物体位置的左坐标 int top; //该物体位置的上坐标 int right; //该物体位置的右坐标 int bottom; //该物体位置的下坐标 double confidence; //置信度 void* analysisRes; //二次属性分析结果 fd_info* face_res; //人脸检测结果(若为nullptr则表示非行人或者未检测到人脸,反之返回人脸检测结果) } video_object_snapshot; #endif //返回的检测物体结果信息 #ifndef __VIDEO_OBJECT_INFO__ #define __VIDEO_OBJECT_INFO__ typedef struct video_object_info { int task_id; //该物体属于的任务ID号 int task_frame_count; //该物体当前出现的帧号 int object_id; //该物体的ID号 int left; //该物体位置的左坐标 int top; //该物体位置的上坐标 int right; //该物体位置的右坐标 int bottom; //该物体位置的下坐标 int index; //该物体所属类别的编号 double confidence; //该物体的置信度 } video_object_info; #endif //回调函数,通知处理结束的视频,返回任务ID号 typedef void(*VIDEO_OBJECT_INFO_CALLBACK)(void * handle, video_object_info *obj_info); //回调函数,返回检测物体的快照信息 typedef void(*VIDEO_OBJECT_SNAPSHOT_CALLBACK)(void * handle, video_object_snapshot *snapshot_info); //回调函数,返回实时查看时视频的图像 typedef void(*VIDEO_REALTIME_CALLBACK)(void * handle, unsigned char *img_data, int img_height, int img_width); //回调函数,通知处理结束的视频,返回任务ID号 typedef void(*VIDEO_FINISH_CALLBACK)(void * handle, const int task_id); typedef void(*SFX_LOG_CALLBACK)(void * userPtr, int log_level, const char* log, unsigned int logLen); //TASK初始化参数 #ifndef __TASK_PARAM__ #define __TASK_PARAM__ typedef struct task_param { void* userPtr; SFX_LOG_CALLBACK log; char video_filename[256]; char result_folder_little[256]; char result_folder[256]; char result_folder_face[256]; bool on_image_display; //是否绘制结果框到保存大图 int jpeg_quality; //图片保存质量的参数0-100 --debug by zsh int decMode; // 解码模式: 0 全解码; 1 关键帧解码 sy_rect minBoxsize[DETECTTYPE]; //自定义的minBoxsize大小 VIDEO_OBJECT_SNAPSHOT_CALLBACK obj_snapshot_callback_func; VIDEO_REALTIME_CALLBACK rt_view_callback_func; VIDEO_FINISH_CALLBACK tFinishCallbackFunc; task_param() : jpeg_quality(30) {} }task_param; #endif //VPT初始化参数 #ifndef __MVPT_PARAM__ #define __MVPT_PARAM__ typedef struct mvpt_param { int gpuid; //指定显卡id char* vrdbpath; //指定车行识别的车型数据库的路径 char* auth_license; //定制授权;若为通用授权,改参数无效 int wait_framecount; //针对目标较少的二次属性分析时设置最大等待帧数 int skip_frame; //内部跳帧数 /********************************日志参数*****************************/ char* path; char* name; unsigned int serviceID; unsigned char logMask; unsigned int limitSize; /********************************************************************/ //算法配置参数 sy_command hp_analysis_config; //是否开启行人结构化识别 sy_command hcp_analysis_config; //是否开启人骑车结构化识别 sy_command vehicle_analysis_config; //是否开启车型识别 sy_command hf_recg_config; //是否开启行人特征识别 sy_command hcf_recg_config; //是否开启人骑车特征识别 sy_command vcf_recg_config; //是否开启车辆特征识别 sy_command face_det_config; //是否开启人脸检测 VIDEO_OBJECT_INFO_CALLBACK task_obj_info_callback_func; //目标检测结果实时返回回调函数 }mvpt_param; #endif #ifndef _MSC_VER #include #define MACRO_COUNT_TIME_START struct timeval macro_tv_start;\ struct timeval macro_tv_end;\ gettimeofday(¯o_tv_start,NULL); #define MACRO_COUNT_TIME_END(___total_count___) gettimeofday(¯o_tv_end,NULL);\ if(___total_count___<=0)\ printf("time cost: %.2f ms \n", ( (double)(macro_tv_end.tv_sec-macro_tv_start.tv_sec)*1000000+(double)(macro_tv_end.tv_usec-macro_tv_start.tv_usec) )/1000);\ else\ printf("time cost: %.2f ms \n", ( (double)(macro_tv_end.tv_sec-macro_tv_start.tv_sec)*1000000+(double)(macro_tv_end.tv_usec-macro_tv_start.tv_usec) )/1000/___total_count___); #endif