GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
#ifndef __SVP_BYTETRACKER__
|
||||
#define __SVP_BYTETRACKER__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_svp.h"
|
||||
#include "xmedia_svp_quantize.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SVP_TRACK_EPSILON 0.000001f
|
||||
|
||||
// bytetracker
|
||||
#define SVP_STD_POSITION (1.0f / 20.0f)
|
||||
#define SVP_STD_VELOCITY (1.0f / 160.0f)
|
||||
#define SVP_MAX_LOST_COUNT 30
|
||||
#define SVP_TRACKER_HIGH_SCORE_THRESHOLD 0.5f
|
||||
#define SVP_ACTIVATED_TRACKER_THRESHOLD 0.1f
|
||||
#define SVP_TRACKED_TRACKER_THRESHOLD 0.1f
|
||||
#define SVP_UNACTIVATED_TRACKER_THRESHOLD 0.1f
|
||||
#define SVP_TRACK_AGE_THRESHOLD 3
|
||||
#define SVP_TRACK_AGE_LIMIT 240
|
||||
#define SVP_ALG_MAX_TARGET_NUM 10
|
||||
// 卡尔曼滤波矩阵
|
||||
#define SVP_KALMAN_FILTER_X 8
|
||||
#define SVP_KALMAN_FILTER_Y 4
|
||||
#define SVP_KALMAN_FILTER_STATE 1
|
||||
|
||||
|
||||
typedef struct {
|
||||
xmedia_float x; /* 中心点坐标x */
|
||||
xmedia_float y; /* 中心点坐标y */
|
||||
xmedia_float a; /* 宽高比 */
|
||||
xmedia_float h; /* 高度 */
|
||||
} svp_kalman_measure;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float state[SVP_KALMAN_FILTER_X][SVP_KALMAN_FILTER_STATE];
|
||||
xmedia_float R[SVP_KALMAN_FILTER_Y][SVP_KALMAN_FILTER_Y]; // 测量噪声矩阵 不需要保存
|
||||
xmedia_float K[SVP_KALMAN_FILTER_X][SVP_KALMAN_FILTER_Y]; // 卡尔曼增益
|
||||
xmedia_float H[SVP_KALMAN_FILTER_Y][SVP_KALMAN_FILTER_X]; // 观测矩阵
|
||||
xmedia_float P[SVP_KALMAN_FILTER_X][SVP_KALMAN_FILTER_X]; // 协方差矩阵
|
||||
xmedia_float F[SVP_KALMAN_FILTER_X][SVP_KALMAN_FILTER_X]; // 状态转移矩阵
|
||||
xmedia_float Q[SVP_KALMAN_FILTER_X][SVP_KALMAN_FILTER_X]; // 运动噪声矩阵 不需要保存
|
||||
} svp_kalman_filter;
|
||||
|
||||
typedef enum {
|
||||
SVP_TRACKER_STATE_NEW = 0, // 新轨迹
|
||||
SVP_TRACKER_STATE_TRACKED, // 跟踪成功
|
||||
SVP_TRACKER_STATE_LOST, // 未跟踪成功
|
||||
SVP_TRACKER_STATE_REMOVED,
|
||||
SVP_TRACKER_STATE_UNDEFINED
|
||||
} svp_tracker_state;
|
||||
|
||||
typedef struct {
|
||||
svp_tracker_state state;
|
||||
xmedia_svp_class_type class_type;
|
||||
xmedia_float score;
|
||||
xmedia_s32 id;
|
||||
xmedia_u8 age;
|
||||
xmedia_float iou;
|
||||
xmedia_u8 lost_count;
|
||||
xmedia_svp_rect rect;
|
||||
xmedia_svp_rect predicted_rect;
|
||||
svp_kalman_filter kalman_filter;
|
||||
xmedia_u8 target_idx; // 检测结果索引
|
||||
} svp_bytetracker;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_float high_score_thres;
|
||||
xmedia_float activated_tracker_thres;
|
||||
xmedia_float tracked_tracker_thres;
|
||||
xmedia_float unactivated_tracker_thres;
|
||||
xmedia_u8 track_age_thres;
|
||||
xmedia_u16 num;
|
||||
svp_bytetracker* tracker;
|
||||
} svp_tracklet;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_alg_type alg_type; // 检测类别
|
||||
xmedia_svp_class_type class_type; // 检测结果类别
|
||||
xmedia_float detect_score; // 检测模型结果置信度
|
||||
xmedia_s32 tracker_id; // 检测结果追踪id
|
||||
xmedia_u32 tracker_age; // 检测结果追踪age
|
||||
xmedia_svp_rect rect; // 检测结果目标框
|
||||
xmedia_u8 target_idx; // 检测结果索引
|
||||
} xmedia_svp_tracker_single_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 target_num;
|
||||
xmedia_svp_tracker_single_result tracker_single[XMEDIA_SVP_MAX_TARGET_NUM];
|
||||
} xmedia_svp_tracker_result;
|
||||
|
||||
|
||||
xmedia_s32 svp_detect_bytetracker(xmedia_svp_tracker_result* result, svp_tracklet* tracklet,
|
||||
xmedia_s32* tracker_idx, xmedia_u8* id_flag);
|
||||
|
||||
/*
|
||||
xmedia_s32 assignment_optimal(xmedia_s32* assignment, xmedia_float* dist_matrix_in, xmedia_u32 row,
|
||||
xmedia_u32 col);
|
||||
|
||||
xmedia_s32 svp_bytetracker_set_attr(detect_param *param, const xmedia_svp_bytetracker_attr attr);
|
||||
|
||||
xmedia_s32 svp_bytetracker_get_attr(detect_param *param, xmedia_svp_bytetracker_attr *attr);
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,76 @@
|
||||
#ifndef __SVP_MOVEMENT__
|
||||
#define __SVP_MOVEMENT__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "svp_nms.h"
|
||||
|
||||
#include "xmedia_svp.h"
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_svp_quantize.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
// 静态目标过滤
|
||||
#define SVP_MOTION_THRES 0.6f
|
||||
#define SVP_STILLNESS_THRES 0.9f
|
||||
#define SVP_MOVEMENT_FPS_THRES 5
|
||||
#define SVP_MOVELESS_COUNT 30
|
||||
#define SVP_MOTION_REFRESH_TIME 20000ULL
|
||||
#define SVP_S_TO_MS_UNIT 1000LLU
|
||||
#define SVP_NS_TO_MS_UNIT 1000000LLU
|
||||
|
||||
typedef enum {
|
||||
SVP_MOTION_STATUS_UNKNOWN = 0,
|
||||
SVP_MOTION_STATUS_STATIC,
|
||||
SVP_MOTION_STATUS_MOVEING,
|
||||
} svp_motion_status;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_rect rect;
|
||||
xmedia_svp_class_type class_type;
|
||||
svp_motion_status status;
|
||||
xmedia_u8 count;
|
||||
xmedia_bool flag;
|
||||
xmedia_s32 tracker_id;
|
||||
xmedia_u64 last_time;
|
||||
} svp_movement_box;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool enable;
|
||||
xmedia_float stillness_thres;
|
||||
xmedia_u8 movement_fps_thres;
|
||||
svp_movement_box movement_targets[XMEDIA_SVP_MAX_TARGET_NUM * SVP_MOVELESS_COUNT];
|
||||
xmedia_u32 actual_num; // 实际的历史数组个数
|
||||
} svp_movement;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_class_type class_type; // 检测结果类别
|
||||
xmedia_s32 tracker_id; // 检测结果追踪id
|
||||
xmedia_svp_rect rect; // 检测结果目标框
|
||||
xmedia_svp_motion_state motion_state; // 运动状态
|
||||
} movement_detect_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 target_num; // 检测结果数量
|
||||
movement_detect_result targets[XMEDIA_SVP_MAX_TARGET_NUM]; // 检测结果
|
||||
} svp_movement_result;
|
||||
|
||||
xmedia_s32 svp_detect_movement(svp_movement* movement, svp_movement_result* result);
|
||||
|
||||
xmedia_s32 svp_detect_basic_movement(svp_movement* movement, svp_movement_result* result);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,39 @@
|
||||
#ifndef __SVP_NMS_H__
|
||||
#define __SVP_NMS_H__
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_svp.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SVP_EPSILON 0.000001f
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_rect rect;
|
||||
xmedia_float detect_score;
|
||||
xmedia_svp_class_type class_type;
|
||||
} svp_base_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_rect rect;
|
||||
xmedia_float detect_score;
|
||||
xmedia_svp_class_type class_type;
|
||||
xmedia_svp_keypoint kpt[MAX_DETECT_KEYPOINT_NUM];
|
||||
} svp_base_yolov8_result;
|
||||
|
||||
xmedia_s32 det_nms(svp_base_result* vec_bbox, xmedia_u32 vec_bbox_len,
|
||||
xmedia_float threshold, xmedia_u32* picked_bbox_len);
|
||||
|
||||
xmedia_float iou(svp_base_result* box1, svp_base_result* box2);
|
||||
|
||||
xmedia_s32 det_nms_cross(xmedia_svp_detect_result* vec_bbox, xmedia_u32 vec_bbox_len,
|
||||
xmedia_float threshold, xmedia_u32* picked_bbox_len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,119 @@
|
||||
#ifndef libalg_api_h
|
||||
#define libalg_api_h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
// <summary>
|
||||
// 图像结构
|
||||
// </summary>
|
||||
typedef struct ALG_IMAGE_INFO
|
||||
{
|
||||
unsigned int image_width; //图像宽度
|
||||
unsigned int image_height; //图像高度
|
||||
unsigned int image_stride; //图像行宽
|
||||
unsigned int image_format; //预留,暂时只支持NV21
|
||||
unsigned char *image_buffer; //图像buff
|
||||
}C_ALG_IMAGE_INFO;
|
||||
|
||||
|
||||
// <summary>
|
||||
// 返回定义
|
||||
// </summary>
|
||||
typedef enum ALG_RESULT
|
||||
{
|
||||
// <summary>
|
||||
// 执行成功
|
||||
// </summary>
|
||||
ALG_SUCCESS = 0,
|
||||
// <summary>
|
||||
// 算法未定义
|
||||
// </summary>
|
||||
ERR_ALG_NULL = 1000,
|
||||
// <summary>
|
||||
// KEY校验失败
|
||||
// </summary>
|
||||
ERR_KEY = 1001,
|
||||
// <summary>
|
||||
// 算法初始化失败
|
||||
// </summary>
|
||||
ERR_ALG_INIT = 1002,
|
||||
// <summary>
|
||||
// 创建算法失败
|
||||
// </summary>
|
||||
ERR_ALG_CREAT = 1003,
|
||||
// <summary>
|
||||
// 算法使能模块错误。
|
||||
// </summary>
|
||||
ERR_ALG_CONFLICT = 1004,
|
||||
// <summary>
|
||||
// 检测算法执行错误
|
||||
// </summary>
|
||||
ERR_ALG_DETECT_EXEC = 1005,
|
||||
// <summary>
|
||||
// 口罩算法执行错误
|
||||
// </summary>
|
||||
ERR_ALG_MASK_EXEC = 1006,
|
||||
// <summary>
|
||||
// 提取特征执行错误
|
||||
// </summary>
|
||||
ERR_ALG_FEATURE_EXEC = 1007,
|
||||
// <summary>
|
||||
// 人脸比对执行错误
|
||||
// </summary>
|
||||
ERR_ALG_MATCH_EXEC = 1008,
|
||||
// <summary>
|
||||
// 人形检测执行错误
|
||||
// </summary>
|
||||
ERR_ALG_PROCESS_EXEC = 1009,
|
||||
// <summary>
|
||||
// 检测人脸为空
|
||||
// </summary>
|
||||
ERR_ALG_FACE_NULL = 1010,
|
||||
// <summary>
|
||||
// 不允许多个人脸
|
||||
// </summary>
|
||||
ERR_ALG_FACE_MULTI = 1010,
|
||||
// <summary>
|
||||
// 姿态分数过低
|
||||
// </summary>
|
||||
ERR_ALG_FACE_QUALITY = 1011,
|
||||
// <summary>
|
||||
// 人脸注册数量已满
|
||||
// </summary>
|
||||
ERR_ALG_FACE_FULL = 1012,
|
||||
// <summary>
|
||||
// 不存在的注册信息
|
||||
// </summary>
|
||||
ERR_ALG_FACE_NOTUSER = 1013,
|
||||
}C_ALG_RESULT;
|
||||
|
||||
|
||||
// @brief 从原图仿射变换得到人脸小图
|
||||
// @param src_img 原始YUV图像,注意:图像buff为虚拟地址
|
||||
// @param dst_img 输出仿射变换的YUV归一化图,注意:该地址请预先分配好。
|
||||
// @param targetpoints 进行仿射变换归一的5个标签点,长度为10。其内存排列为:xy xy xy xy xy
|
||||
// (targetpoints[0]为第一个标签点的x,targetpoints[9]为第五个标签点的y)
|
||||
// @param keypoints 人脸检测模块输出的5个关键点,长度为10。其内存排列为:xy xy xy xy xy
|
||||
// (keypoints[0]为第一个关键点的x,keypoints[9]为第五个关键点的y)
|
||||
// @return 成功返回ALG_RESULT,其他值参见C_ALG_RESULT的定义
|
||||
C_ALG_RESULT alg_api_face_feature_warpaffine( C_ALG_IMAGE_INFO *src_img, C_ALG_IMAGE_INFO *dst_img,
|
||||
float *targetpoints,float *keypoints);
|
||||
|
||||
// @brief 从原图仿射变换得到车牌小图
|
||||
// @param src_img 原始YUV图像,注意:图像buff为虚拟地址
|
||||
// @param dst_img 输出仿射变换的YUV归一化图,注意:该地址请预先分配好。
|
||||
// @param targetpoints 进行仿射变换归一的4个标签点,长度为8。其内存排列为:xy xy xy xy
|
||||
// (targetpoints[0]为第一个标签点的x,targetpoints[8]为第4个标签点的y)
|
||||
// @param keypoints 车牌检测模块输出的4个关键点,长度为8。其内存排列为:xy xy xy xy
|
||||
// (keypoints[0]为第一个关键点的x,keypoints[8]为第4个关键点的y)
|
||||
// @return 成功返回ALG_RESULT,其他值参见C_ALG_RESULT的定义
|
||||
C_ALG_RESULT alg_api_plate_warpaffine( C_ALG_IMAGE_INFO *src_img, C_ALG_IMAGE_INFO *dst_img,
|
||||
float *targetpoints,float *keypoints);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (c) XMEDIA. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef __MKP_NPU_H__
|
||||
#define __MKP_NPU_H__
|
||||
|
||||
#include "math_fun.h"
|
||||
#include "xmedia_debug.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SVP_TRACE(level, fmt, ...) \
|
||||
do { \
|
||||
MODULE_TRACE(level, MOD_ID_NPU_SVP, "[Func]:%s [Line]:%d [Info]:" fmt, __FUNCTION__, __LINE__, ##__VA_ARGS__); \
|
||||
} while (0)
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* End of #ifndef __MKP_NPU_H__ */
|
||||
@@ -0,0 +1,126 @@
|
||||
#ifndef __SVP_COMM__
|
||||
#define __SVP_COMM__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdint.h>
|
||||
#include <pthread.h>
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "svp_nms.h"
|
||||
#include "svp_core.h"
|
||||
#include "svp_bytetracker.h"
|
||||
#include "libalg_api.h"
|
||||
#include "yolov5.h"
|
||||
#include "yolov8.h"
|
||||
|
||||
#include "xmedia_venc.h"
|
||||
#include "xmedia_sys.h"
|
||||
#include "xmedia_vgs.h"
|
||||
#include "xmedia_tde.h"
|
||||
#include "xmedia_isp.h"
|
||||
#include "xmedia_ive.h"
|
||||
#include "xmedia_svp.h"
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_svp_quantize.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// VGS大小限制
|
||||
#define VGS_LIMIT_BILINEAR_INIMG_W 8
|
||||
#define VGS_LIMIT_BILINEAR_INIMG_H 8
|
||||
#define VGS_LIMIT_MIN_INIMG_W 16
|
||||
#define VGS_LIMIT_MIN_INIMG_H 16
|
||||
#define VGS_LUMA_LIMIT 2
|
||||
#define SVP_SKIN_COLOR_MIN_V_VALUE 131
|
||||
#define SVP_SKIN_COLOR_MAX_V_VALUE 155
|
||||
#define SVP_SKIN_COLOR_MIN_U_VALUE 107
|
||||
#define SVP_SKIN_COLOR_MAX_U_VALUE 127
|
||||
#define SVP_MAX_CAL_LUMA_RECT_NUM 5 /* 最大支持计算5个框的亮度信息 */
|
||||
#define SVP_MIN_RECT_WIDTH 16
|
||||
#define SVP_MIN_RECT_HEIGHT 16
|
||||
#define SVP_MOV_ACCURACY_ONE 1
|
||||
// cal luma rate
|
||||
#define SVP_FACE_RECT_FD_X_COEF 4
|
||||
#define SVP_FACE_RECT_FD_Y_COEF 2
|
||||
#define SVP_FACE_RECT_FD_W_COEF 12
|
||||
#define SVP_FACE_RECT_FD_H_COEF 16
|
||||
#define SVP_FACE_RECT_PD_X_COEF 4
|
||||
#define SVP_FACE_RECT_PD_Y_COEF 5
|
||||
#define SVP_FACE_RECT_PD_W_COEF 12
|
||||
#define SVP_FACE_RECT_PD_H_COEF 10
|
||||
#define SVP_FACE_RECT_BASE_COEF 20
|
||||
// smartAE class
|
||||
#define SVP_SMART_CLASS_MAX 2
|
||||
#define SVP_MODEL_TYPE_PEOPLE 0
|
||||
#define SVP_MODEL_TYPE_FACE 1
|
||||
#define SVP_PEOPLE_INDEX 0
|
||||
#define SVP_FACE_INDEX 1
|
||||
#define RCNN_DEBUG_STRING 64
|
||||
// 模型大图分辨率
|
||||
#define INPUT_BIG_WIDE 1920
|
||||
#define INPUT_BIG_HIGH 1080
|
||||
/** 万分比坐标比例 */
|
||||
#define SVP_SCALE_RATIO 10000.0f
|
||||
#define XMEDIA_SVP_FR_KEYPOINT_CNT ((XMEDIA_SVP_FR_KEYPOINT_NUM) * (2)) // 人脸关键点总数[x和y]
|
||||
|
||||
#define SVP_DIV_0_TO_1(a) ((0 == (a)) ? 1 : (a))
|
||||
|
||||
typedef struct {
|
||||
xmedia_u64 img_addr; // 物理地址
|
||||
xmedia_void *vir_addr; // 虚拟地址
|
||||
xmedia_u32 width; // 宽度
|
||||
xmedia_u32 hight; // 长度
|
||||
} svp_ive_img;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float targetpoints[XMEDIA_SVP_FR_KEYPOINT_CNT];
|
||||
xmedia_float keypoints[XMEDIA_SVP_FR_KEYPOINT_CNT];
|
||||
xmedia_char *warpaffine_output;
|
||||
} svp_warpaffine_pairpack;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 left;
|
||||
xmedia_u32 top;
|
||||
xmedia_u32 right;
|
||||
xmedia_u32 bottom;
|
||||
} cal_svp_rect;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 x_coef;
|
||||
xmedia_u8 y_coef;
|
||||
xmedia_u8 w_coef;
|
||||
xmedia_u8 h_coef;
|
||||
} svp_rect_cut_coef;
|
||||
|
||||
typedef struct {
|
||||
svp_warpaffine_pairpack warpaffine_pairpack[XMEDIA_SVP_MAX_TARGET_NUM];
|
||||
} svp_warpaffine_info;
|
||||
|
||||
xmedia_void softmax(xmedia_float *arr, xmedia_s32 size, xmedia_float *result_arr);
|
||||
xmedia_s32 svp_vgs_resize(const xmedia_video_frame_info *input_frame, xmedia_video_frame_info *output_frame);
|
||||
xmedia_s32 svp_ive_crop(const svp_ive_img *src_img, svp_ive_img *dst_img, xmedia_u32 w_offset, xmedia_u32 h_offset);
|
||||
xmedia_s32 svp_ive_dma_image_copy(const xmedia_video_frame_info *pst_frame_info, xmedia_ive_image_s *pst_dst);
|
||||
xmedia_s32 svp_ive_padding(svp_ive_img *src_img, svp_ive_img *dst_img, xmedia_u32 right, xmedia_u32 top);
|
||||
xmedia_s32 svp_send_info_to_venc(yolov5_detect_param *param, xmedia_svp_yolov5_output *result,
|
||||
const xmedia_svp_task_input *input_image);
|
||||
xmedia_s32 svp_update_luma(yolov5_detect_param *param, xmedia_svp_yolov5_output *result,
|
||||
const xmedia_svp_task_input *input_image);
|
||||
xmedia_s32 svp_padding_resize(xmedia_video_frame_info *ref_frame, xmedia_svp_rect *rect, xmedia_u64 resize_phyaddr,
|
||||
xmedia_void *resize_viraddr, xmedia_u32 dst_width, xmedia_u32 dst_height);
|
||||
xmedia_float svp_iou_with_box1(xmedia_svp_yolov8_result *box1, xmedia_svp_dms_result *box2);
|
||||
xmedia_s32 svp_detect_zone(const xmedia_svp_zone* zone, const xmedia_svp_rect* rect,
|
||||
const xmedia_u32 width, const xmedia_u32 height);
|
||||
xmedia_s32 clip_rect_to_frame(xmedia_svp_rect *rect, xmedia_u32 frame_width, xmedia_u32 frame_height);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
#ifndef __XMEDIA_SVP_QUANTIZE_H__
|
||||
#define __XMEDIA_SVP_QUANTIZE_H__
|
||||
|
||||
#include <math.h>
|
||||
#include "xmedia_svp.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
xmedia_float scale;
|
||||
xmedia_s32 zp;
|
||||
} quanlize_param;
|
||||
|
||||
/**
|
||||
* @brief 量化(浮点到定点)
|
||||
*
|
||||
* @param data
|
||||
* @param scale
|
||||
* @param zp
|
||||
* @return xmedia_u8
|
||||
*/
|
||||
static inline xmedia_u8 quantize(xmedia_float data, xmedia_float scale, xmedia_s32 zp)
|
||||
{
|
||||
return STD_MIN(255, STD_MAX(0, round(data / scale + zp)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 反量化(定点到浮点)
|
||||
*
|
||||
* @param data
|
||||
* @param scale
|
||||
* @param zp
|
||||
* @return xmedia_float
|
||||
*/
|
||||
static inline xmedia_float dequantize(xmedia_u8 data, xmedia_float scale, xmedia_s32 zp)
|
||||
{
|
||||
return (xmedia_float)(scale * (data - zp));
|
||||
}
|
||||
|
||||
static inline xmedia_float desigmoid(xmedia_float x)
|
||||
{
|
||||
return (-log((1.f / (x + 1e-8)) - 1.f));
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,224 @@
|
||||
#ifndef __XMEDIA_SVP_STD_H__
|
||||
#define __XMEDIA_SVP_STD_H__
|
||||
|
||||
#include <sys/stat.h>
|
||||
#include "mkp_npu.h"
|
||||
#include "xmedia_sys.h"
|
||||
#include "xmedia_svp.h"
|
||||
#include "xmedia_mmz.h"
|
||||
|
||||
#define UNSIGNED_8_BIT_NUM 256 // U8类型最大限制
|
||||
#define SVP_MIN_ATTR_STILLNESS_THRES 0.6 // 静止状态阈值最小限制
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define CHECK_SVP_COND_GOTO_ERROR(cond, label, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \
|
||||
goto label; \
|
||||
} \
|
||||
} while(0); \
|
||||
|
||||
#define CHECK_SVP_COND_RETURN_ERROR(cond, ...) \
|
||||
do { \
|
||||
if (cond) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \
|
||||
return XMEDIA_FAILURE; \
|
||||
} \
|
||||
} while(0); \
|
||||
|
||||
|
||||
#define CHECK_CALLOC_RETURN_ERROR(a) \
|
||||
if (NULL == a) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, "out of memory\n"); \
|
||||
return XMEDIA_FAILURE; \
|
||||
}
|
||||
|
||||
#define CHECK_CALLOC_RETURN_NULL(a) \
|
||||
if (NULL == a) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, "out of memory\n"); \
|
||||
return NULL; \
|
||||
}
|
||||
|
||||
#define CHECK_CALLOC_RETURN_VOID(a) \
|
||||
if (NULL == a) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, "out of memory\n"); \
|
||||
return; \
|
||||
}
|
||||
|
||||
#define CHECK_CALLOC_GOTO_ERROR(a, label) \
|
||||
do { \
|
||||
if (a == NULL) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, "out of memory\n"); \
|
||||
goto label; \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
#define CFREE(a) \
|
||||
if (a) { \
|
||||
free(a); \
|
||||
a = NULL; \
|
||||
}
|
||||
|
||||
#define STD_MAX(a, b) ((a) > (b) ? (a) : (b))
|
||||
#define STD_MIN(a, b) ((a) > (b) ? (b) : (a))
|
||||
|
||||
#define SVP_CHECK_U8(src_data, ...) \
|
||||
do { \
|
||||
if ((src_data) < 0 || (src_data) > UNSIGNED_8_BIT_NUM) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \
|
||||
return (XMEDIA_FAILURE); \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
#define SVP_CHECK_ATTR_STILLNESS_THRES(src_data, ...) \
|
||||
do { \
|
||||
if ((src_data) <= SVP_MIN_ATTR_STILLNESS_THRES || (src_data) >= 1) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \
|
||||
return (XMEDIA_FAILURE); \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
#define SVP_CHECK_ATTR_THRESHOLD(src_data, ...) \
|
||||
do { \
|
||||
if ((src_data) <= 0 || (src_data) >= 1) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \
|
||||
return (XMEDIA_FAILURE); \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
#define SVP_CHECK_ATTR_NUM(src_data, ...) \
|
||||
do { \
|
||||
if ((src_data) <= 0 || (src_data) > XMEDIA_SVP_MAX_TARGET_NUM) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \
|
||||
return (XMEDIA_FAILURE); \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
#define SVP_CHECK_ATTR_ENABLE(src_data, ...) \
|
||||
do { \
|
||||
if ((src_data) != XMEDIA_FALSE && (src_data) != XMEDIA_TRUE) { \
|
||||
SVP_TRACE(MODULE_DBG_ERR, __VA_ARGS__); \
|
||||
return (XMEDIA_FAILURE); \
|
||||
} \
|
||||
} while (0);
|
||||
|
||||
static __inline__ xmedia_s32 check_file_exist(xmedia_char *filepath)
|
||||
{
|
||||
struct stat file_stat;
|
||||
|
||||
if (stat(filepath, &file_stat) != 0) {
|
||||
SVP_TRACE(MODULE_DBG_ERR, "error, model file path err or not exist\n");
|
||||
return XMEDIA_FAILURE;
|
||||
}
|
||||
return XMEDIA_SUCCESS;
|
||||
}
|
||||
|
||||
static __inline__ xmedia_s32 svp_mmz_alloc(xmedia_char *buf_name, xmedia_u64 *phy_addr, xmedia_u32 size)
|
||||
{
|
||||
xmedia_chn_info chn_info = { 0 };
|
||||
xmedia_s32 ret = XMEDIA_SUCCESS;
|
||||
xmedia_char mmz_name[MAX_MMZ_NAME_LEN] = { 0 };
|
||||
|
||||
chn_info.mod_id = MOD_ID_NPU_SVP;
|
||||
chn_info.chn_id = 0;
|
||||
chn_info.dev_id = 0;
|
||||
|
||||
ret = xmedia_sys_get_mem_config(&chn_info, mmz_name);
|
||||
if (ret != XMEDIA_SUCCESS) {
|
||||
SVP_TRACE(MODULE_DBG_ERR, "xmedia_sys_get_mem_config failed %d \n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
*phy_addr = xmedia_mmz_alloc(mmz_name, buf_name, size);
|
||||
if (*phy_addr == XMEDIA_NULL) {
|
||||
SVP_TRACE(MODULE_DBG_ERR, "xmedia_mmz_alloc filed, size %d \n", size);
|
||||
return XMEDIA_FAILURE;
|
||||
}
|
||||
|
||||
return XMEDIA_SUCCESS;
|
||||
}
|
||||
|
||||
static __inline__ xmedia_s32 svp_mmz_alloc_and_map(xmedia_char *buf_name, xmedia_u64 *phy_addr,
|
||||
xmedia_void **virt_addr, xmedia_u32 size)
|
||||
{
|
||||
xmedia_chn_info chn_info = { 0 };
|
||||
xmedia_s32 ret = XMEDIA_SUCCESS;
|
||||
xmedia_char mmz_name[MAX_MMZ_NAME_LEN] = { 0 };
|
||||
|
||||
chn_info.mod_id = MOD_ID_NPU_SVP;
|
||||
chn_info.chn_id = 0;
|
||||
chn_info.dev_id =0;
|
||||
|
||||
ret = xmedia_sys_get_mem_config(&chn_info, mmz_name);
|
||||
if (ret != XMEDIA_SUCCESS) {
|
||||
SVP_TRACE(MODULE_DBG_ERR, "xmedia_sys_get_mem_config failed %d \n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
*phy_addr = xmedia_mmz_alloc(mmz_name, buf_name, size);
|
||||
if (*phy_addr != XMEDIA_NULL) {
|
||||
*virt_addr = xmedia_mmz_map(*phy_addr, size, XMEDIA_FALSE);
|
||||
if (*virt_addr == XMEDIA_NULL) {
|
||||
SVP_TRACE(MODULE_DBG_ERR, "xmedia_mmz_map filed, size %d \n", size);
|
||||
xmedia_mmz_free(*phy_addr);
|
||||
return XMEDIA_FAILURE;
|
||||
}
|
||||
} else {
|
||||
SVP_TRACE(MODULE_DBG_ERR, "xmedia_mmz_alloc filed, size %d \n", size);
|
||||
return XMEDIA_FAILURE;
|
||||
}
|
||||
|
||||
return XMEDIA_SUCCESS;
|
||||
}
|
||||
|
||||
static __inline__ xmedia_s32 svp_mmz_alloc_and_map_cache(xmedia_char *buf_name, xmedia_u64 *phy_addr,
|
||||
xmedia_void **virt_addr, xmedia_u32 size)
|
||||
{
|
||||
xmedia_chn_info chn_info = { 0 };
|
||||
xmedia_s32 ret = XMEDIA_SUCCESS;
|
||||
xmedia_char mmz_name[MAX_MMZ_NAME_LEN] = { 0 };
|
||||
|
||||
chn_info.mod_id = MOD_ID_NPU_SVP;
|
||||
chn_info.chn_id = 0;
|
||||
chn_info.dev_id = 0;
|
||||
|
||||
ret = xmedia_sys_get_mem_config(&chn_info, mmz_name);
|
||||
if (ret != XMEDIA_SUCCESS) {
|
||||
SVP_TRACE(MODULE_DBG_ERR, "xmedia_sys_get_mem_config failed %d \n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
*phy_addr = xmedia_mmz_alloc(mmz_name, buf_name, size);
|
||||
if (*phy_addr != XMEDIA_NULL) {
|
||||
*virt_addr = xmedia_mmz_map(*phy_addr, size, XMEDIA_TRUE);
|
||||
if (*virt_addr == XMEDIA_NULL) {
|
||||
SVP_TRACE(MODULE_DBG_ERR, "xmedia_mmz_map filed, size %d \n", size);
|
||||
xmedia_mmz_free(*phy_addr);
|
||||
return XMEDIA_FAILURE;
|
||||
}
|
||||
} else {
|
||||
SVP_TRACE(MODULE_DBG_ERR, "xmedia_mmz_alloc filed, size %d \n", size);
|
||||
return XMEDIA_FAILURE;
|
||||
}
|
||||
|
||||
return XMEDIA_SUCCESS;
|
||||
}
|
||||
|
||||
static __inline__ xmedia_void svp_mmz_unmap_and_free(xmedia_u64 phy_addr, xmedia_void *virt_addr)
|
||||
{
|
||||
|
||||
if (virt_addr != XMEDIA_NULL) {
|
||||
xmedia_mmz_unmap(virt_addr);
|
||||
}
|
||||
xmedia_mmz_free(phy_addr);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,137 @@
|
||||
#ifndef __YOLOV5__
|
||||
#define __YOLOV5__
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_svp.h"
|
||||
#include "svp_nms.h"
|
||||
#include "xmedia_svp_quantize.h"
|
||||
#include "svp_core.h"
|
||||
#include "svp_movement.h"
|
||||
#include "svp_bytetracker.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// sigmoid 查表法
|
||||
#define TABLE_SIZE 100000
|
||||
#define TABLE_MIN (-100.0f)
|
||||
#define TABLE_MAX (100.0f)
|
||||
#define TABLE_200 (200.0f)
|
||||
#define UNSIGNED_8_BIT_NUM 256
|
||||
#define TABLE_500 (500.0f)
|
||||
|
||||
// 每个特征中的x、y、w、h、socre长度
|
||||
#define XYWHF_LEN 5
|
||||
#define XYWH_LEN 4
|
||||
#define LAYER_MAX_NUM 10
|
||||
#define LAYER_MIN_NUM 3
|
||||
#define LAYER_NUM_FOUR 4
|
||||
|
||||
// 每层feature_map对应的anchor
|
||||
#define ANCHOR_NUM 3
|
||||
|
||||
/** 模型输入默认分辨率 */
|
||||
#define INPUT_DEFAULT_WIDE 640
|
||||
#define INPUT_DEFAULT_HIGH 360
|
||||
|
||||
/** 默认检测阈值 */
|
||||
#define DEFAULT_DETECT_THRESHOLD 0.45f
|
||||
/** 默认IOU阈值 */
|
||||
#define DEFAULT_IOU_THRESHOLD 0.5f
|
||||
/** 分类器默认阈值*/
|
||||
#define DEFAULT_CLASSIFIER_THRESHOLD 0.01f
|
||||
#define DEFAULT_BBOX_NUM 512
|
||||
|
||||
/** 模型检测类型数量 */
|
||||
#define DETECTION_MODEL_SINGLE 1
|
||||
#define DETECTION_MODEL_DOUBLE 2
|
||||
#define DETECTION_MODEL_TRIPLE 3
|
||||
#define DETECTION_MODEL_MULTI 4
|
||||
#define DETECTION_MODEL_SIX 6
|
||||
#define DETECTION_MODEL_PCNMV_FIRESMOKE 11
|
||||
#define DETECTION_MODEL_MAX 80
|
||||
|
||||
// 稳定框算法系数
|
||||
#define SVP_IOU_STABLE_THRESH_UPPER 0.85f
|
||||
#define SVP_IOU_STABLE_THRESH_MIDDLE 0.7f
|
||||
#define SVP_STABLE_HORIZONTAL_FACTOR 6
|
||||
#define SVP_STABLE_VERTICAL_FACTOR 5
|
||||
#define SVP_UNIFORM_FACTOR_A 2
|
||||
#define SVP_UNIFORM_FACTOR_B 3
|
||||
#define SVP_STABLE_HISTORY_RATIO 0.8f
|
||||
#define SVP_STABLE_CURRENT_RATIO 0.2f
|
||||
|
||||
// 目标框面积大小限制
|
||||
#define MAX_AREA_ATTR 4
|
||||
#define MINI_AREA 100
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_rect rect;
|
||||
xmedia_svp_class_type class_type;
|
||||
} svp_stable_rect;
|
||||
|
||||
typedef struct {
|
||||
svp_stable_rect stable_targets[XMEDIA_SVP_MAX_TARGET_NUM];
|
||||
xmedia_u32 num;
|
||||
} svp_stable_box;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_point anchors[LAYER_MAX_NUM][ANCHOR_NUM]; // 锚点值
|
||||
xmedia_u8 layer_num; // 锚点层数
|
||||
} xmedia_svp_detect_anchors;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 w; // 模型支持的图像宽度
|
||||
xmedia_u32 h; // 模型支持的图像高度
|
||||
xmedia_u32 num; // 模型的检测类别数量
|
||||
xmedia_u32 feature[LAYER_MAX_NUM]; // 每个feature_map的大小
|
||||
xmedia_u32 output_num; // npu输出所有的特征数量
|
||||
xmedia_float thres_desig; // 检测阈值的反sigmoid值
|
||||
quanlize_param quanlize[LAYER_MAX_NUM]; // 反量化需要的参数
|
||||
xmedia_npu_model model; // npu参数
|
||||
xmedia_svp_alg_type type; // 算法类型
|
||||
xmedia_float detect_threshold; // 置信度阈值,建议值0.55f
|
||||
xmedia_float classifier_threshold; // 分类器阈值,建议值0.01f
|
||||
xmedia_float iou_threshold; // iou相交比阈值,建议值0.5f
|
||||
xmedia_u32 max_target_num; // 最大目标数,最大值10
|
||||
xmedia_bool smart_venc_enable;
|
||||
xmedia_bool smart_ae_enable;
|
||||
xmedia_bool smart_venc_array[XMEDIA_SVP_MAX_VENC_CHN_NUM];
|
||||
xmedia_bool smart_ae_array[XMEDIA_SVP_MAX_VI_PIPE_NUM];
|
||||
svp_stable_box record_result; // 记录历史框,用于稳定算法
|
||||
xmedia_svp_detect_anchors anchors; // 锚点值
|
||||
xmedia_u64 cost_time; // process接口耗时
|
||||
xmedia_bool aov_flag; // 是否为aov模型
|
||||
xmedia_bool aov_only_target; // 是否仅判断有无目标
|
||||
svp_movement movement; // 静止过滤相关参数
|
||||
svp_tracklet tracklet;
|
||||
xmedia_u8 track_id_arry[SVP_ALG_MAX_TARGET_NUM * SVP_MAX_LOST_COUNT]; // 追踪id数组
|
||||
xmedia_s32 track_id_grow; // 追踪id增加
|
||||
xmedia_void *private_data; // 实例私有数据
|
||||
xmedia_float *sigmoid_table; // sigmoid查表
|
||||
xmedia_float *sigmoid_dequantize_table;
|
||||
xmedia_float *sigmoid_dequantize_table_x2;
|
||||
xmedia_float *sigmoid_dequantize_table_x6;
|
||||
xmedia_float *sigmoid_dequantize_table_x2_sq;
|
||||
svp_base_result *bbox;
|
||||
} yolov5_detect_param;
|
||||
|
||||
xmedia_void set_default_yolov5_detect_param(yolov5_detect_param *param);
|
||||
|
||||
xmedia_s32 detect_process(yolov5_detect_param *param, const xmedia_video_frame_info *input_image,
|
||||
xmedia_svp_yolov5_output *result, const xmedia_svp_detect_anchors anchors_yaml);
|
||||
xmedia_s32 detect_init(yolov5_detect_param *param, const xmedia_svp_alg_type type,
|
||||
const xmedia_svp_modules *model, xmedia_s32 layer_num);
|
||||
xmedia_s32 detect_deinit(yolov5_detect_param *param);
|
||||
|
||||
xmedia_s32 svp_get_detect_result_yolov5_bz(yolov5_detect_param *param, xmedia_svp_yolov5_output *result,
|
||||
const xmedia_svp_detect_anchors anchors_yaml);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,65 @@
|
||||
#ifndef __YOLOV8__
|
||||
#define __YOLOV8__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "xmedia_svp.h"
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_svp_quantize.h"
|
||||
|
||||
#include "svp_nms.h"
|
||||
#include "svp_core.h"
|
||||
#include "yolov5.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define DEFAULT_KEYPOINT_LEN 0
|
||||
#define PEOPLE_KEYPOINT_LEN 17
|
||||
#define SVP_PLATE_KPS 4
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 w; // 模型支持的图像宽度
|
||||
xmedia_u32 h; // 模型支持的图像高度
|
||||
xmedia_u32 num; // 模型的检测类别数量
|
||||
xmedia_u32 feature[LAYER_MAX_NUM]; // 每个feature_map的大小
|
||||
xmedia_u32 output_num; // npu输出所有的特征数量
|
||||
xmedia_float thres_desig; // 检测阈值的反sigmoid值
|
||||
quanlize_param quanlize[LAYER_MAX_NUM]; // 反量化需要的参数
|
||||
xmedia_npu_model model; // npu参数
|
||||
xmedia_svp_alg_type type; // 算法类型
|
||||
xmedia_float detect_threshold; // 置信度阈值,建议值0.55f
|
||||
xmedia_float iou_threshold; // iou相交比阈值,建议值0.5f
|
||||
xmedia_float classifier_threshold; // 分类器阈值,建议值0.01f
|
||||
xmedia_u32 max_target_num; // 最大目标数,最大值10
|
||||
svp_stable_box record_result; // 记录历史框,用于稳定算法
|
||||
svp_movement movement; // 静止过滤相关参数
|
||||
svp_tracklet tracklet;
|
||||
xmedia_u8 track_id_arry[SVP_ALG_MAX_TARGET_NUM * SVP_MAX_LOST_COUNT]; // 追踪id数组
|
||||
xmedia_s32 track_id_grow; // 追踪id增加
|
||||
xmedia_u8 keypoint_len; // 关键点数量
|
||||
xmedia_void *private_data; // 实例私有数据
|
||||
xmedia_float *deqnt_u8_to_f32_table;
|
||||
xmedia_float *sigmoid_deqnt_table;
|
||||
svp_base_yolov8_result *bbox;
|
||||
} yolov8_detect_param;
|
||||
|
||||
xmedia_void set_default_yolov8_detect_param(yolov8_detect_param *param);
|
||||
|
||||
xmedia_s32 yolov8_init(yolov8_detect_param *param, const xmedia_svp_modules *model);
|
||||
|
||||
xmedia_s32 yolov8_uninit(yolov8_detect_param *param);
|
||||
|
||||
xmedia_s32 detect_yolov8_process(yolov8_detect_param *param, const xmedia_video_frame_info *frame_info,
|
||||
xmedia_svp_yolov8_output *result);
|
||||
|
||||
xmedia_float iouv8(svp_base_yolov8_result *box1, svp_base_yolov8_result *box2);
|
||||
xmedia_s32 svp_get_detect_result_bz(yolov5_detect_param *param, xmedia_svp_yolov8_output *result,
|
||||
const xmedia_svp_detect_anchors anchors_yaml);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,58 @@
|
||||
#ifndef __TASK_COMMON_H__
|
||||
#define __TASK_COMMON_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
#include <pthread.h>
|
||||
|
||||
#include "xmedia_vgs.h"
|
||||
#include "xmedia_type.h"
|
||||
#include "xmedia_svp.h"
|
||||
#include "xm_yolov5n.h"
|
||||
#include "xm_yolov5n_aov.h"
|
||||
#include "xm_yolov8.h"
|
||||
#include "xm_adas.h"
|
||||
#include "xm_fire.h"
|
||||
#include "xm_gesture.h"
|
||||
#include "xm_face_recognition.h"
|
||||
#include "xm_rcnn.h"
|
||||
#include "xm_rcnn_720p.h"
|
||||
#include "xm_companion_robot.h"
|
||||
#include "xm_multi_detect.h"
|
||||
#include "xm_dms.h"
|
||||
#include "xm_plate_recognition.h"
|
||||
#include "xm_vehicle_recognition.h"
|
||||
#include "xm_plate_vehicle_reco.h"
|
||||
#include "xm_pcnmv_firesmoke.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
xmedia_void *context;
|
||||
xmedia_svp_task_type task_type;
|
||||
xmedia_bool used;
|
||||
xmedia_bool load_finish;
|
||||
} svp_task_handle;
|
||||
|
||||
typedef struct {
|
||||
pthread_mutex_t g_svp_mutex;
|
||||
svp_task_handle g_task_handle[XMEDIA_SVP_MAX_TASK_NUM];
|
||||
xmedia_s32 g_svp_init_flag;
|
||||
xmedia_void *proc;
|
||||
} xmedia_svp_context;
|
||||
|
||||
xmedia_s32 svp_task_common_create(svp_task_handle *task, xmedia_svp_task_type type, const xmedia_svp_task_cfg cfg);
|
||||
xmedia_s32 svp_task_common_set(svp_task_handle *task, xmedia_svp_task_type type, const xmedia_void *task_attr);
|
||||
xmedia_s32 svp_task_common_get(svp_task_handle *task, xmedia_svp_task_type type, const xmedia_void *task_attr);
|
||||
xmedia_s32 svp_task_common_process(svp_task_handle *task, xmedia_svp_task_type type, const xmedia_svp_task_input *input,
|
||||
const xmedia_void *output);
|
||||
xmedia_s32 svp_task_common_destroy(svp_task_handle *task, xmedia_svp_task_type type);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,54 @@
|
||||
#ifndef __XM_ADAS_H__
|
||||
#define __XM_ADAS_H__
|
||||
|
||||
#include "svp_comm.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SVP_LANE_ROW_SCORE_NUM 100
|
||||
#define SVP_LANE_COL_SCORE_NUM 50
|
||||
#define SVP_LANE_INPUT_IMG_WIGTH 800
|
||||
#define SVP_LANE_INPUT_IMG_HIGHT 532
|
||||
#define SVP_LANE_CROP_IMG_HIGHT 320
|
||||
#define SVP_PLATE_IMG_WIGTH 512
|
||||
#define SVP_PLATE_IMG_HIGHT 288
|
||||
#define SVP_FIT_ORDER 3
|
||||
#define SVP_FIT_MAX_RESIDUALS 15
|
||||
#define SVP_FIT_MIN_NUM 7
|
||||
|
||||
typedef struct {
|
||||
xmedia_npu_model npu_model;
|
||||
} svp_lane_info;
|
||||
|
||||
typedef struct {
|
||||
svp_lane_info *lane_info;
|
||||
yolov5_detect_param *plate_detect_info;
|
||||
yolov5_detect_param *car_detect_info;
|
||||
yolov5_detect_param *person_detect_info;
|
||||
yolov5_detect_param *nmv_detect_info;
|
||||
xmedia_svp_adas_distance_attr dist_attr;
|
||||
} svp_adas_information;
|
||||
|
||||
typedef struct {
|
||||
svp_adas_information info;
|
||||
xmedia_void *priv;
|
||||
} svp_adas_context;
|
||||
|
||||
xmedia_s32 adas_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 adas_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 adas_set_attr(xmedia_void *context, const xmedia_svp_adas_attr *task_attr);
|
||||
|
||||
xmedia_s32 adas_get_attr(xmedia_void *context, xmedia_svp_adas_attr *task_attr);
|
||||
|
||||
xmedia_s32 adas_process(xmedia_void *context, const xmedia_svp_task_input *input,
|
||||
xmedia_svp_adas_result *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,37 @@
|
||||
#ifndef __XMCOMPANION_ROBOT_H__
|
||||
#define __XMCOMPANION_ROBOT_H__
|
||||
|
||||
#include "xm_rcnn.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SVP_ROBOT_MIN_BOX_AREA (32 * 32)
|
||||
|
||||
typedef struct {
|
||||
yolov5_detect_param *detect_info;
|
||||
yolov8_detect_param *keypoint_info;
|
||||
xmedia_u64 resize_phyaddr;
|
||||
xmedia_void *resize_viraddr;
|
||||
xmedia_s32 *user_count;
|
||||
xmedia_void *priv;
|
||||
} svp_companion_robot_context;
|
||||
|
||||
xmedia_s32 companion_robot_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 companion_robot_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 companion_robot_set_attr(xmedia_void *context, const xmedia_svp_yolov5_attr *task_attr);
|
||||
|
||||
xmedia_s32 companion_robot_get_attr(xmedia_void *context, xmedia_svp_yolov5_attr *task_attr);
|
||||
|
||||
xmedia_s32 companion_robot_process(xmedia_void *context, const xmedia_svp_task_input *input,
|
||||
xmedia_svp_petbot_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
#ifndef __XM_DMS_H__
|
||||
#define __XM_DMS_H__
|
||||
|
||||
#include "svp_comm.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#define DMS_EPSILON 1e-6f
|
||||
#define DMS_DETECTION_MODEL 3
|
||||
#define DMS_KEYPOINT 68
|
||||
#define DMS_INT_FRAME 10
|
||||
#define DMS_EYES_THRE 0.25
|
||||
#define DMS_OUT_MOUTH_THRES 1.3
|
||||
#define DMS_IN_MOUTH_THRES 0.7
|
||||
#define DMS_IOU_THRES 0.1
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool close_eyes;
|
||||
xmedia_bool yawn;
|
||||
xmedia_bool phone;
|
||||
xmedia_bool cigar;
|
||||
} svp_dms_flag;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 close_eyes_frame;
|
||||
xmedia_u8 yawn_frame;
|
||||
xmedia_u8 phone_frame;
|
||||
xmedia_u8 cigar_frame;
|
||||
xmedia_u8 id_frame;
|
||||
} svp_dms_frame;
|
||||
|
||||
typedef struct {
|
||||
xmedia_float left_ear; // 左眼宽高比
|
||||
xmedia_float right_ear; // 右眼宽高比
|
||||
xmedia_float out_mar; // 外嘴宽高比
|
||||
xmedia_float in_mar; // 内嘴宽高比
|
||||
xmedia_float pitch; // 俯仰角
|
||||
xmedia_float yaw; // 偏航角
|
||||
xmedia_float roll; // 翻滚角
|
||||
} svp_dms_state;
|
||||
|
||||
typedef struct {
|
||||
svp_dms_flag flag;
|
||||
svp_dms_frame frame;
|
||||
svp_dms_state state;
|
||||
xmedia_s32 id;
|
||||
} svp_dms_alarm_report;
|
||||
|
||||
typedef struct {
|
||||
yolov8_detect_param *detect_info;
|
||||
svp_dms_alarm_report alarm_report;
|
||||
xmedia_u8 warn_frame; // 警告帧数
|
||||
xmedia_float iou_thres; // 相交阈值,建议值0.1f
|
||||
} svp_dms_context;
|
||||
|
||||
xmedia_s32 dms_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 dms_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 dms_set_attr(xmedia_void *context, const xmedia_svp_dms_attr *task_attr);
|
||||
|
||||
xmedia_s32 dms_get_attr(xmedia_void *context, xmedia_svp_dms_attr *task_attr);
|
||||
|
||||
xmedia_s32 dms_process(xmedia_void *context, const xmedia_svp_task_input *input, xmedia_svp_dms_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,125 @@
|
||||
#ifndef __XMFACE_RECOGNITION_H__
|
||||
#define __XMFACE_RECOGNITION_H__
|
||||
|
||||
#include "svp_comm.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define FR_ADAPT_SOBEL_RESIZE 64
|
||||
#define FR_ADAPT_SOBEL_INPUT 48
|
||||
#define FR_IVE_SOBLE_DEFAULT 20
|
||||
/** fr face pose区间 */
|
||||
#define FR_MIN_FACE_POSE 1.0f
|
||||
#define FR_MAX_FACE_POSE 200.0f
|
||||
#define FR_DEFAULT_FACE_POSE 120.0f
|
||||
/** 关键点默认阈值 */
|
||||
#define FR_DEFAULT_KEYPOINT_THRES 0.8f
|
||||
/** 最大人脸面积 */
|
||||
#define FR_MAX_FACE 360 * 360
|
||||
/** 人脸识别删除质量模型暂定3模型 */
|
||||
#define FR_MODELS_NUM 3
|
||||
/** 计算人脸亮度 人脸框最大个数 */
|
||||
#define FR_MAX_CAL_LUMA_TECT_NUM 10
|
||||
/** 人脸luma区间 */
|
||||
#define FR_MIN_LUMA 20
|
||||
#define FR_MAX_LUMA 200
|
||||
/** ive sobel区间 */
|
||||
#define FR_MIN_IVE_SOBLE 0
|
||||
#define FR_MAX_IVE_SOBLE 200
|
||||
/** 人脸luma默认值 */
|
||||
#define FR_DEFAULT_LUMA 60
|
||||
/** 人脸识别最大数量 */
|
||||
#define FR_MAX_NUM 10
|
||||
/** 模型分辨率 */
|
||||
#define FACE_ALIGN_OUTPUT_IMG_WIDE 112
|
||||
#define FACE_ALIGN_OUTPUT_IMG_HIGH 112
|
||||
#define FACE_ALIGN_INPUT_IMG_WIDE 1920
|
||||
#define FACE_ALIGN_INPUT_IMG_HIGH 1080
|
||||
#define FACE_REIZE_OUTPUT_IMG_WIDE 48
|
||||
#define FACE_RESIZE_OUTUT_IMG_HIGH 48
|
||||
#define FACE_RECOGN_RESULT_VECTOR_OS 512
|
||||
#define FACE_RECOGN_RESULT_VECTOR_BZ 256
|
||||
#define FACE_S_TO_MS 1000LLU
|
||||
#define FACE_NS_TO_MS 1000000LLU
|
||||
/** 人脸属性结构化清理时间 */
|
||||
#define FACE_TIMEOUT_RECONFIRM 3000LLU
|
||||
/** 人脸属性类别确定计数 */
|
||||
#define FACE_CONFIRM_COUNT 3
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_point point_arry[XMEDIA_SVP_FR_KEYPOINT_NUM];
|
||||
} svp_keypoint_point;
|
||||
|
||||
typedef struct {
|
||||
xmedia_npu_model npu_model;
|
||||
xmedia_float thres;
|
||||
} fr_module_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 sobel_thres;
|
||||
xmedia_ive_sobel_ctrl_s stSobelCtrl;
|
||||
xmedia_ive_dst_image_s dst_img;
|
||||
} ive_sobel_attr;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_point keypoint_arry[XMEDIA_SVP_FR_KEYPOINT_NUM];
|
||||
xmedia_svp_rect rect;
|
||||
xmedia_s32 tracker_id;
|
||||
xmedia_s32 tracker_age;
|
||||
xmedia_float score;
|
||||
xmedia_float roll;
|
||||
xmedia_float yaw;
|
||||
xmedia_float pitch;
|
||||
xmedia_bool is_pose_filter_out;
|
||||
xmedia_float pupil_distance_thre;
|
||||
} svp_keypoint_targets;
|
||||
|
||||
typedef struct {
|
||||
svp_keypoint_targets keypoint_targets[FR_MAX_NUM];
|
||||
xmedia_u32 after_filter_num;
|
||||
} svp_keypoint_result_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool used_flag;
|
||||
xmedia_u32 tracker_age;
|
||||
xmedia_u32 lost_num;
|
||||
xmedia_s8 emotion_class;
|
||||
xmedia_u64 retime;
|
||||
xmedia_float face_score;
|
||||
} svp_face_history_result;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_task_cfg cfg;
|
||||
yolov5_detect_param *detect_info;
|
||||
fr_module_info *keypoint_info;
|
||||
fr_module_info *recognition_info;
|
||||
ive_sobel_attr *sobel_attr;
|
||||
xmedia_svp_face_pose_attr pose_attr;
|
||||
xmedia_u64 luma_thres;
|
||||
xmedia_u64 keypoint_phyaddr;
|
||||
xmedia_u64 resize_phyaddr;
|
||||
xmedia_u64 sobel_phyaddr;
|
||||
xmedia_u64 align_phyaddr;
|
||||
xmedia_void *align_viraddr;
|
||||
svp_face_history_result fva_history_arry[SVP_MAX_LOST_COUNT * XMEDIA_SVP_MAX_TARGET_NUM];
|
||||
xmedia_void *priv;
|
||||
} svp_fr_context;
|
||||
|
||||
xmedia_s32 xmface_recognition_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 xmface_recognition_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 xmface_recognition_set_attr(xmedia_void *context, const xmedia_svp_fr_attr *task_attr);
|
||||
|
||||
xmedia_s32 xmface_recognition_get_attr(xmedia_void *context, xmedia_svp_fr_attr *task_attr);
|
||||
|
||||
xmedia_s32 xmface_recognition_process(xmedia_void *context, const xmedia_svp_task_input *input,
|
||||
const xmedia_void *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,81 @@
|
||||
#ifndef __XM_FIRE_H__
|
||||
#define __XM_FIRE_H__
|
||||
|
||||
#include "svp_comm.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define PROTO_CHANNEL 32
|
||||
#define PROTO_HEIGHT 96
|
||||
#define PROTO_WEIGHT 160
|
||||
#define DFL_LEN 16
|
||||
|
||||
#define FIRE_FRAME_MAX_NUM 2
|
||||
#define FIRE_SMOKE_CLASS 2
|
||||
#define THRES_MIN_VAL 0
|
||||
#define THRES_MAX_VAL 255
|
||||
#define FIRE_THRES 10
|
||||
#define SMOKE_THRES 5
|
||||
#define SMOKE_RATIO_THRES 0.1f
|
||||
#define TIMEOUT_THRES 1.0f
|
||||
#define SMOKE_COUNT_TIMES ((1) / (2))
|
||||
|
||||
typedef struct {
|
||||
xmedia_ive_sub_ctrl_s stSubCtrl;
|
||||
xmedia_ive_dst_image_s pre_sub_img;
|
||||
xmedia_ive_dst_image_s dst_sub_img;
|
||||
xmedia_ive_dst_image_s dst_thre_img;
|
||||
xmedia_ive_dst_image_s smoke_thre_img;
|
||||
} ive_sub_attr;
|
||||
|
||||
typedef struct {
|
||||
yolov8_detect_param* fire_info;
|
||||
xmedia_svp_yolov8_output pre_result;
|
||||
xmedia_svp_fire_attr fire_attr;
|
||||
xmedia_u32 fire_pixel_count[FIRE_FRAME_MAX_NUM];
|
||||
xmedia_u32 smoke_pixel_count[FIRE_FRAME_MAX_NUM];
|
||||
|
||||
xmedia_bool diff_flag;
|
||||
xmedia_bool fire_alarm;
|
||||
xmedia_bool smoke_alarm;
|
||||
xmedia_bool smoke_gray;
|
||||
|
||||
xmedia_u32 mask_index;
|
||||
|
||||
xmedia_u32 smoke_frame_count;
|
||||
xmedia_u32 smoke_bigger_frame;
|
||||
xmedia_u32 smoke_loss_count;
|
||||
xmedia_u32 smoke_apear_count;
|
||||
xmedia_float smoke_change_ratio;
|
||||
|
||||
xmedia_u32 fire_loss_count;
|
||||
xmedia_float fire_change_ratio;
|
||||
xmedia_float fire_ratio_sum;
|
||||
|
||||
time_t fire_update_time; // the latest time of fire occur
|
||||
time_t smoke_update_time; // the latest time of smoke occur
|
||||
} svp_fire_information;
|
||||
|
||||
typedef struct {
|
||||
svp_fire_information info;
|
||||
xmedia_void *priv;
|
||||
} svp_fire_context;
|
||||
|
||||
xmedia_s32 fire_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 fire_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 fire_set_attr(xmedia_void *context, const xmedia_svp_fire_attr *task_attr);
|
||||
|
||||
xmedia_s32 fire_get_attr(xmedia_void *context, xmedia_svp_fire_attr *task_attr);
|
||||
|
||||
xmedia_s32 fire_process(xmedia_void *context, const xmedia_svp_task_input *input, xmedia_svp_yolov8_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
#ifndef __XM_GESTURE_H__
|
||||
#define __XM_GESTURE_H__
|
||||
|
||||
#include "svp_comm.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define XMEDIA_SVP_GESTURE_MODEL_NUM 2
|
||||
#define GESTURE_THRES 0.85// 手势识别阈值
|
||||
#define GESTURE_CLASS 18 // 手势类别数量
|
||||
|
||||
/* 模型输出序号 */
|
||||
#define GESTURE_OK 5
|
||||
#define GESTURE_PALM 8
|
||||
#define GESTURE_THUMB 14
|
||||
#define GESTURE_V 17
|
||||
/* 模型输入分辨率 */
|
||||
#define INPUT_BIG_WIDE 1920
|
||||
#define INPUT_BIG_HIGH 1080
|
||||
#define GESTURE_RESIZE_OUTPUT_IMG_WIDE_192 192
|
||||
#define GESTURE_RESIZE_OUTPUT_IMG_HIGH_192 192
|
||||
#define GESTURE_BEST_OUTPUT_IMG_WIDE 96
|
||||
#define GESTURE_BEST_OUTPUT_IMG_HIGH 96
|
||||
#define PI 3.1415926
|
||||
#define GESTURE_KEYPOINT_LEN 2
|
||||
#define GESTURE_MAX_STORE_NUM 100
|
||||
|
||||
typedef struct {
|
||||
xmedia_float x_min, y_min, x_max, y_max;
|
||||
} BoundingBox;
|
||||
|
||||
typedef struct {
|
||||
xmedia_npu_model npu_model;
|
||||
} svp_gesture_info;
|
||||
|
||||
typedef struct {
|
||||
yolov8_detect_param *detect_info;
|
||||
svp_gesture_info *gesture_info;
|
||||
xmedia_void* priv;
|
||||
} svp_gesture_context;
|
||||
|
||||
xmedia_s32 gesture_set_attr(xmedia_void* context, const xmedia_svp_yolov8_attr* task_attr);
|
||||
|
||||
xmedia_s32 gesture_get_attr(xmedia_void* context, xmedia_svp_yolov8_attr* task_attr);
|
||||
|
||||
xmedia_s32 gesture_uninit(xmedia_void* context);
|
||||
|
||||
xmedia_s32 gesture_init(xmedia_void* context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 gesture_process(xmedia_void* context, const xmedia_svp_task_input* input, xmedia_svp_gesture_result* output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,65 @@
|
||||
#ifndef __XM_MULTI_DETECT_H__
|
||||
#define __XM_MULTI_DETECT_H__
|
||||
|
||||
#include "svp_comm.h"
|
||||
#include "xm_rcnn.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
yolov5_detect_param *car_detect_info;
|
||||
yolov5_detect_param *person_detect_info;
|
||||
yolov5_detect_param *nmv_detect_info;
|
||||
yolov5_detect_param *face_detect_info;
|
||||
yolov5_detect_param *pet_detect_info;
|
||||
yolov5_detect_param *pkg_detect_info;
|
||||
} svp_multi_detect_information;
|
||||
|
||||
typedef struct {
|
||||
xmedia_npu_model model;
|
||||
xmedia_u64 resize_phyaddr;
|
||||
xmedia_void *resize_viraddr;
|
||||
} svp_multi_rcnn_info;
|
||||
|
||||
typedef struct {
|
||||
svp_movement movement;
|
||||
svp_tracklet tracklet;
|
||||
xmedia_u8 track_id_arry[SVP_ALG_MAX_TARGET_NUM * SVP_MAX_LOST_COUNT];
|
||||
xmedia_s32 track_id_grow;
|
||||
} svp_multi_base_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool person_flag;
|
||||
xmedia_bool car_flag;
|
||||
xmedia_bool nmv_flag;
|
||||
xmedia_bool face_flag;
|
||||
xmedia_bool pet_flag;
|
||||
xmedia_bool pkg_flag;
|
||||
xmedia_bool rcnn_flag;
|
||||
} svp_multi_use_count;
|
||||
|
||||
typedef struct {
|
||||
svp_multi_detect_information info;
|
||||
svp_multi_rcnn_info *rcnn_info;
|
||||
svp_multi_base_info *base_info;
|
||||
svp_multi_use_count use_count;
|
||||
} svp_multi_detect_context;
|
||||
|
||||
xmedia_s32 multi_detect_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 multi_detect_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 multi_detect_set_attr(xmedia_void *context, const xmedia_svp_multi_detect_attr *task_attr);
|
||||
|
||||
xmedia_s32 multi_detect_get_attr(xmedia_void *context, xmedia_svp_multi_detect_attr *task_attr);
|
||||
|
||||
xmedia_s32 multi_detect_process(xmedia_void *context, const xmedia_svp_task_input *input,
|
||||
xmedia_svp_yolov5_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,112 @@
|
||||
#ifndef __XM_PC_NMV_FIRE_DETECT_H__
|
||||
#define __XM_PC_NMV_FIRE_DETECT_H__
|
||||
|
||||
#include "svp_nms.h"
|
||||
#include "xmedia_svp_quantize.h"
|
||||
#include "svp_core.h"
|
||||
#include "yolov5.h"
|
||||
#include "svp_comm.h"
|
||||
#include "xm_rcnn.h"
|
||||
#include "xm_fire.h"
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define FRAME_CROP_LEFT_TOP 1
|
||||
#define FRAME_CROP_RIGHT_TOP 3
|
||||
#define FRAME_CROP_LEFT_BOTTOM 5
|
||||
#define FRAME_CROP_RIGHT_BOTTOM 7
|
||||
#define FRAME_CROP_OFFSET_W 32
|
||||
#define FRAME_CROP_OFFSET_H 18
|
||||
#define FIRE_SMOKE_BLOCK_NUM 4
|
||||
|
||||
// 模型输出相关
|
||||
#define PCNMV_FIRE_CLASS 11
|
||||
#define INDEX_BASE_PROTO 7
|
||||
#define INDEX_BASE_BOX 0
|
||||
#define INDEX_BASE_SCORE 1
|
||||
#define INDEX_BASE_SEG 6
|
||||
#define LTRB_LENGTH 4 // left top right bottom
|
||||
#define CLASS_INDEX_FIRE 7
|
||||
#define CLASS_INDEX_SMOKE 8
|
||||
|
||||
#define CLASS_INDEX_PERSON 0
|
||||
#define CLASS_INDEX_CAR 1
|
||||
#define CLASS_INDEX_BUS 2
|
||||
#define CLASS_INDEX_TRUCK 3
|
||||
#define CLASS_INDEX_BIKE 4
|
||||
#define CLASS_INDEX_MOTOR 5
|
||||
#define CLASS_INDEX_TRICYCLE 6
|
||||
|
||||
#define FIRE_LOOP_FRIST 7
|
||||
#define FIRE_LOOP_SECOND 15
|
||||
#define FIRE_LOOP_FULL 16
|
||||
#define SVP_FIRE_CIRCLE 8
|
||||
#define THRES_MAX_VAL 255
|
||||
#define FIRE_SMOKE_MIN_PIXEL 100
|
||||
#define FIRE_SMOKE_MAX_COUNT 2
|
||||
|
||||
#define PROTO_CHANNEL 32
|
||||
#define PROTO_HEIGHT 96
|
||||
#define PROTO_WEIGHT 160
|
||||
#define DFL_LEN 16
|
||||
|
||||
#define MIN_AREA_LIMIT 50
|
||||
#define EPSLON 1e-5
|
||||
typedef struct {
|
||||
xmedia_u8 apear_count;
|
||||
xmedia_u8 loss_count;
|
||||
xmedia_float change_rate;
|
||||
xmedia_float rate_sum;
|
||||
} svp_firesmoke_attr;
|
||||
|
||||
typedef struct {
|
||||
yolov8_detect_param *detect_info;
|
||||
xmedia_video_frame_info resize_frame;
|
||||
xmedia_void *resize_viraddr;
|
||||
xmedia_svp_rect fire_history_rect[FIRE_SMOKE_BLOCK_NUM];
|
||||
xmedia_svp_rect smoke_history_rect[FIRE_SMOKE_BLOCK_NUM];
|
||||
xmedia_float fire_history_score;
|
||||
xmedia_float smoke_history_score;
|
||||
xmedia_svp_rect fire_dst_rect;
|
||||
xmedia_svp_rect smoke_dst_rect;
|
||||
xmedia_bool fire_alarm;
|
||||
xmedia_u8 frame_index;
|
||||
xmedia_u32 fire_pixel_count[2];
|
||||
xmedia_u32 smoke_pixel_count[2];
|
||||
ive_sub_attr sub_cfg;
|
||||
svp_firesmoke_attr fire_attr;
|
||||
svp_firesmoke_attr smoke_attr;
|
||||
xmedia_u8 fire_loss_count;
|
||||
xmedia_u8 smoke_loss_count;
|
||||
xmedia_svp_yolov8_output pcnmv_result;
|
||||
} svp_pcnmv_fire_info;
|
||||
|
||||
typedef struct {
|
||||
svp_pcnmv_fire_info info;
|
||||
xmedia_void *priv;
|
||||
} svp_pcnmv_firesmoke_context;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 pcnmv_firesmoke_count;
|
||||
xmedia_npu_model model;
|
||||
} svp_pcnmv_firesmoke_model;
|
||||
|
||||
xmedia_s32 pcnmv_firesmoke_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 pcnmv_firesmoke_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 pcnmv_firesmoke_set_attr(xmedia_void *context, const xmedia_svp_pcnmv_fire_attr *task_attr);
|
||||
|
||||
xmedia_s32 pcnmv_firesmoke_get_attr(xmedia_void *context, xmedia_svp_pcnmv_fire_attr *task_attr);
|
||||
|
||||
xmedia_s32 pcnmv_firesmoke_process(xmedia_void *context, const xmedia_svp_task_input *input,
|
||||
xmedia_svp_yolov8_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
#ifndef __XM_PLATE_RECO_H__
|
||||
#define __XM_PLATE_RECO_H__
|
||||
|
||||
#include "svp_comm.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SVP_VEHICLE_DETECT_WIDTH 384
|
||||
#define SVP_VEHICLE_DETECT_HIGHT 224
|
||||
|
||||
#define SVP_PLATE_DETECT_WIDTH 512
|
||||
#define SVP_PLATE_DETECT_HEIGHT 288
|
||||
#define SVP_PLATE_RECO_WIDTH 192
|
||||
#define SVP_PLATE_RECO_HIGHT 48
|
||||
#define XMEDAI_SVP_PLATE_MAX_NUM 8
|
||||
#define SVP_PLATE_STR_NUM 73
|
||||
#define SVP_PLATE_T_STRIDE 21 // tensor跨度
|
||||
|
||||
#define SVP_PLATE_CHAR_MIN 7
|
||||
#define SVP_PLATE_CHAR_MAX 8
|
||||
|
||||
#define SVP_PLATE_COLOR_THRES 0.5f
|
||||
#define SVP_PLATE_REPORT_TIME ((120) * (30)) // 120 秒
|
||||
|
||||
#define SVP_PLATE_MIN_WIDTH 85
|
||||
typedef struct {
|
||||
xmedia_s32 track_id;
|
||||
xmedia_svp_rect rect;
|
||||
xmedia_svp_plate_color color;
|
||||
xmedia_float color_score;
|
||||
xmedia_float char_score;
|
||||
xmedia_char reco_char[XMEDIA_SVP_PLATE_CHAR_MAX_NUM];
|
||||
} svp_plate_info;
|
||||
|
||||
typedef struct {
|
||||
svp_plate_info base_info;
|
||||
xmedia_u8 loss_cnt;
|
||||
xmedia_u32 report_cnt;
|
||||
xmedia_u32 exist_cnt;
|
||||
xmedia_bool is_report;
|
||||
} svp_plate_status;
|
||||
|
||||
typedef struct svp_plate_status_node {
|
||||
svp_plate_status data;
|
||||
struct svp_plate_status_node *next;
|
||||
} svp_plate_status_node;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 index;
|
||||
xmedia_float char_score;
|
||||
} svp_plate_char_t;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 num;
|
||||
svp_plate_char_t char_arr[SVP_PLATE_T_STRIDE];
|
||||
} svp_plate_char_vec;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 char_num;
|
||||
xmedia_char reco_char[SVP_PLATE_T_STRIDE];
|
||||
} svp_plate_reco_char;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_point point_arry[SVP_PLATE_KPS];
|
||||
} svp_plate_keypoint;
|
||||
|
||||
typedef struct {
|
||||
xmedia_npu_model *reco_model;
|
||||
xmedia_npu_model *color_model;
|
||||
xmedia_video_frame_info reco_frame;
|
||||
xmedia_void *frame_viraddr;
|
||||
} svp_plate_reco_info;
|
||||
|
||||
typedef struct {
|
||||
yolov5_detect_param param;
|
||||
xmedia_void *frame_viraddr;
|
||||
xmedia_video_frame_info detect_frame;
|
||||
} svp_plate_detect_info;
|
||||
|
||||
typedef struct {
|
||||
svp_plate_detect_info *detect_info;
|
||||
svp_plate_reco_info *reco_info;
|
||||
svp_plate_detect_info *veh_info;
|
||||
xmedia_u32 node_num;
|
||||
svp_plate_status_node *head;
|
||||
svp_plate_status_node *tail;
|
||||
xmedia_u32 plate_min_width;
|
||||
xmedia_u32 report_count;
|
||||
xmedia_float report_thres;
|
||||
xmedia_svp_zone detect_zone;
|
||||
} svp_plate_information;
|
||||
|
||||
typedef struct {
|
||||
svp_plate_information info;
|
||||
xmedia_void *priv;
|
||||
} svp_plate_context;
|
||||
|
||||
xmedia_s32 plate_recognition_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 plate_recognition_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 plate_recognition_set_attr(xmedia_void *context, const xmedia_svp_plate_reco_attr *task_attr);
|
||||
|
||||
xmedia_s32 plate_recognition_get_attr(xmedia_void *context, xmedia_svp_plate_reco_attr *task_attr);
|
||||
|
||||
xmedia_s32 plate_recognition_process(xmedia_void *context, const xmedia_svp_task_input *input,
|
||||
xmedia_svp_plate_reco_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
#ifndef __XM_PLATE_VEHICLE_RECO_H__
|
||||
#define __XM_PLATE_VEHICLE_RECO_H__
|
||||
|
||||
#include "svp_comm.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SVP_VEHICLE_DETECT_WIDTH 384
|
||||
#define SVP_VEHICLE_DETECT_HIGHT 224
|
||||
#define SVP_VEHICLE_RECO_WIDTH 224
|
||||
#define SVP_VEHICLE_RECO_HEIGHT 224
|
||||
|
||||
#define SVP_PLATE_DETECT_WIDTH 512
|
||||
#define SVP_PLATE_DETECT_HEIGHT 288
|
||||
#define SVP_PLATE_RECO_WIDTH 192
|
||||
#define SVP_PLATE_RECO_HIGHT 48
|
||||
#define XMEDAI_SVP_PLATE_MAX_NUM 8
|
||||
#define SVP_PLATE_STR_NUM 73
|
||||
#define SVP_PLATE_T_STRIDE 21
|
||||
|
||||
#define SVP_PLATE_CHAR_MIN 7
|
||||
#define SVP_PLATE_CHAR_MAX 8
|
||||
|
||||
#define SVP_PLATE_COLOR_THRES 0.5f
|
||||
#define SVP_PLATE_REPORT_TIME ((120) * (30)) // 120 秒
|
||||
|
||||
#define SVP_VEHICLE_TYPE_CLASS 6
|
||||
#define SVP_VEHICLE_COLOR_CLASS 6
|
||||
#define SVP_VEHICLE_TYPE_THRES 0.5f
|
||||
#define SVP_VEHICLE_COLOR_THRES 0.5f
|
||||
#define SVP_VEHICLE_STATUS_CHANGE_CNT 5
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 track_id;
|
||||
xmedia_svp_rect veh_rect;
|
||||
xmedia_svp_vehicle_color veh_color;
|
||||
xmedia_float veh_color_score;
|
||||
xmedia_svp_vehicle_type veh_type;
|
||||
xmedia_float veh_type_score;
|
||||
xmedia_svp_rect plate_rect;
|
||||
xmedia_svp_plate_color plate_color;
|
||||
xmedia_float plate_color_score;
|
||||
xmedia_float char_score;
|
||||
xmedia_char reco_char[XMEDIA_SVP_PLATE_CHAR_MAX_NUM];
|
||||
} svp_plate_vehicle_info;
|
||||
|
||||
typedef struct {
|
||||
svp_plate_vehicle_info base_info;
|
||||
xmedia_u8 loss_cnt;
|
||||
xmedia_u32 report_cnt;
|
||||
xmedia_u32 exist_cnt;
|
||||
xmedia_bool is_report;
|
||||
} svp_plate_vehicle_status;
|
||||
|
||||
typedef struct svp_plate_vehicle_status_node {
|
||||
svp_plate_vehicle_status data;
|
||||
struct svp_plate_vehicle_status_node *next;
|
||||
} svp_plate_vehicle_status_node;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 index;
|
||||
xmedia_float char_score;
|
||||
} svp_plate_vehicle_char_t;
|
||||
|
||||
typedef struct {
|
||||
xmedia_s32 num;
|
||||
svp_plate_vehicle_char_t char_arr[SVP_PLATE_T_STRIDE];
|
||||
} svp_plate_vehicle_char_vec;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 char_num;
|
||||
xmedia_char reco_char[SVP_PLATE_T_STRIDE];
|
||||
} svp_plate_vehicle_reco_char;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_point point_arry[SVP_PLATE_KPS];
|
||||
} svp_plate_vehicle_keypoint;
|
||||
|
||||
typedef struct {
|
||||
xmedia_npu_model *reco_model;
|
||||
xmedia_npu_model *color_model;
|
||||
xmedia_video_frame_info reco_frame;
|
||||
xmedia_void *frame_viraddr;
|
||||
} svp_plate_vehicle_reco_info;
|
||||
|
||||
typedef struct {
|
||||
yolov5_detect_param param;
|
||||
xmedia_void *frame_viraddr;
|
||||
xmedia_video_frame_info detect_frame;
|
||||
} svp_plate_vehicle_detect_info;
|
||||
|
||||
typedef struct {
|
||||
svp_plate_vehicle_detect_info *plate_detect;
|
||||
svp_plate_vehicle_detect_info *veh_detect;
|
||||
svp_plate_vehicle_reco_info *plate_reco;
|
||||
svp_plate_vehicle_reco_info *veh_reco;
|
||||
xmedia_u32 plate_min_width;
|
||||
xmedia_u32 report_count;
|
||||
xmedia_float report_thres;
|
||||
xmedia_svp_zone detect_zone;
|
||||
xmedia_u32 node_num;
|
||||
svp_plate_vehicle_status_node *head;
|
||||
svp_plate_vehicle_status_node *tail;
|
||||
} svp_plate_vehicle_information;
|
||||
|
||||
typedef struct {
|
||||
svp_plate_vehicle_information info;
|
||||
xmedia_void *priv;
|
||||
} svp_plate_vehicle_context;
|
||||
|
||||
xmedia_s32 plate_vehicle_recognition_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 plate_vehicle_recognition_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 plate_vehicle_recognition_set_attr(xmedia_void *context, const xmedia_svp_plate_vehicle_attr *task_attr);
|
||||
|
||||
xmedia_s32 plate_vehicle_recognition_get_attr(xmedia_void *context, xmedia_svp_plate_vehicle_attr *task_attr);
|
||||
|
||||
xmedia_s32 plate_vehicle_recognition_process(xmedia_void *context, const xmedia_svp_task_input *input,
|
||||
xmedia_svp_plate_vehicle_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
#ifndef __XMRCNN_H__
|
||||
#define __XMRCNN_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_svp.h"
|
||||
#include "svp_nms.h"
|
||||
#include "xmedia_svp_quantize.h"
|
||||
#include "svp_core.h"
|
||||
#include "yolov5.h"
|
||||
#include "svp_comm.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define RCNN_RECO_FRAME_SIZE 128
|
||||
#define RCNN_MODEL_NUM 2
|
||||
#define RCNN_TRACKER_THR 0.1
|
||||
#define RCNN_CLASSIFY_THR 0.5
|
||||
#define RCNN_CLASSIFY_COUNT 7
|
||||
#define RCNN_IOU_THR 0.45
|
||||
|
||||
typedef enum {
|
||||
SVP_CLASS_RCNN_PERSON = 1,
|
||||
SVP_CLASS_RCNN_CAR = 2,
|
||||
SVP_CLASS_RCNN_PET = 3,
|
||||
SVP_CLASS_RCNN_BIKER = 4,
|
||||
SVP_CLASS_RCNN_MOTORER = 5,
|
||||
SVP_CLASS_RCNN_TRICYCLER = 6,
|
||||
SVP_CLASS_RCNN_MAX
|
||||
} svp_class_rcnn_type;
|
||||
|
||||
typedef struct {
|
||||
yolov5_detect_param *detect_info;
|
||||
xmedia_u64 resize_phyaddr;
|
||||
xmedia_void *resize_viraddr;
|
||||
xmedia_s32 *user_count;
|
||||
} svp_rcnn_context;
|
||||
|
||||
typedef struct {
|
||||
xmedia_bool loaded;
|
||||
xmedia_npu_model model;
|
||||
} svp_rcnn_model;
|
||||
|
||||
xmedia_s32 rcnn_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 rcnn_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 rcnn_set_attr(xmedia_void *context, const xmedia_svp_yolov5_attr *task_attr);
|
||||
|
||||
xmedia_s32 rcnn_get_attr(xmedia_void *context, xmedia_svp_yolov5_attr *task_attr);
|
||||
|
||||
xmedia_s32 rcnn_process(xmedia_void *context, const xmedia_svp_task_input *input,
|
||||
xmedia_svp_yolov5_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,35 @@
|
||||
#ifndef __XMRCNN_720_H__
|
||||
#define __XMRCNN_720_H__
|
||||
|
||||
#include "xm_rcnn.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define INPUT_MID_WIDE 1280
|
||||
#define INPUT_MID_HIGH 720
|
||||
|
||||
typedef struct {
|
||||
yolov5_detect_param *detect_info;
|
||||
xmedia_u64 resize_phyaddr;
|
||||
xmedia_void *resize_viraddr;
|
||||
xmedia_s32 *user_count;
|
||||
} svp_rcnn_720p_context;
|
||||
|
||||
xmedia_s32 rcnn_720p_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 rcnn_720p_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 rcnn_720p_set_attr(xmedia_void *context, const xmedia_svp_yolov5_attr *task_attr);
|
||||
|
||||
xmedia_s32 rcnn_720p_get_attr(xmedia_void *context, xmedia_svp_yolov5_attr *task_attr);
|
||||
|
||||
xmedia_s32 rcnn_720p_process(xmedia_void *context, const xmedia_svp_task_input *input,
|
||||
xmedia_svp_yolov5_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,90 @@
|
||||
#ifndef __XM_VEHICLE_RECO_H__
|
||||
#define __XM_VEHICLE_RECO_H__
|
||||
|
||||
#include "svp_comm.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SVP_VEHICLE_DETECT_WIDTH 384
|
||||
#define SVP_VEHICLE_DETECT_HIGHT 224
|
||||
#define SVP_VEHICLE_RECO_WIDTH 224
|
||||
#define SVP_VEHICLE_RECO_HEIGHT 224
|
||||
|
||||
#define SVP_VEHICLE_TYPE_CLASS 6
|
||||
#define SVP_VEHICLE_COLOR_CLASS 6
|
||||
|
||||
#define SVP_VEHICLE_TYPE_THRES 0.5f
|
||||
#define SVP_VEHICLE_COLOR_THRES 0.5f
|
||||
#define SVP_VEHICLE_STATUS_CHANGE_CNT 5
|
||||
typedef struct {
|
||||
xmedia_s32 track_id;
|
||||
xmedia_svp_rect rect;
|
||||
xmedia_float color_scr;
|
||||
xmedia_float type_scr;
|
||||
xmedia_svp_vehicle_color color;
|
||||
xmedia_svp_vehicle_type type;
|
||||
} svp_vehicle_info;
|
||||
|
||||
typedef struct {
|
||||
svp_vehicle_info base_info;
|
||||
svp_vehicle_info tmp_info;
|
||||
xmedia_u8 tmp_type_cnt;
|
||||
xmedia_u8 tmp_color_cnt;
|
||||
xmedia_u8 loss_cnt;
|
||||
xmedia_u32 report_cnt;
|
||||
xmedia_u32 exist_type_cnt;
|
||||
xmedia_u32 exist_color_cnt;
|
||||
xmedia_bool is_report;
|
||||
} svp_vehicle_status;
|
||||
|
||||
typedef struct svp_vehicle_status_node {
|
||||
svp_vehicle_status data;
|
||||
struct svp_vehicle_status_node *next;
|
||||
} svp_vehicle_status_node;
|
||||
|
||||
typedef struct {
|
||||
xmedia_npu_model *reco_model;
|
||||
xmedia_video_frame_info reco_frame;
|
||||
xmedia_void *reco_viraddr;
|
||||
xmedia_u32 node_num;
|
||||
svp_vehicle_status_node *head;
|
||||
svp_vehicle_status_node *tail;
|
||||
} svp_vehicle_reco_info;
|
||||
|
||||
typedef struct {
|
||||
yolov5_detect_param param;
|
||||
xmedia_video_frame_info detect_frame;
|
||||
} svp_vehicle_detect_info;
|
||||
|
||||
typedef struct {
|
||||
svp_vehicle_detect_info *detect_info;
|
||||
svp_vehicle_reco_info *reco_info;
|
||||
xmedia_u32 report_count;
|
||||
xmedia_float report_thres;
|
||||
xmedia_svp_zone detect_zone;
|
||||
} svp_vehicle_information;
|
||||
|
||||
typedef struct {
|
||||
svp_vehicle_information info;
|
||||
xmedia_void *priv;
|
||||
} svp_vehicle_context;
|
||||
|
||||
xmedia_s32 vehicle_recognition_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 vehicle_recognition_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 vehicle_recognition_set_attr(xmedia_void *context, const xmedia_svp_vehicle_reco_attr *task_attr);
|
||||
|
||||
xmedia_s32 vehicle_recognition_get_attr(xmedia_void *context, xmedia_svp_vehicle_reco_attr *task_attr);
|
||||
|
||||
xmedia_s32 vehicle_recognition_process(xmedia_void *context, const xmedia_svp_task_input *input,
|
||||
xmedia_svp_vehicle_reco_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
#ifndef __XMYOLOV5N_H__
|
||||
#define __XMYOLOV5N_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_svp.h"
|
||||
#include "svp_nms.h"
|
||||
#include "xmedia_svp_quantize.h"
|
||||
#include "svp_core.h"
|
||||
#include "yolov5.h"
|
||||
#include "svp_comm.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
yolov5_detect_param *detect_info;
|
||||
xmedia_void *priv;
|
||||
} svp_yolov5n_context;
|
||||
|
||||
xmedia_s32 xmyolov5n_detect_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 xmyolov5n_detect_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 xmyolov5n_detect_set_attr(xmedia_void *context, const xmedia_svp_yolov5_attr *task_attr);
|
||||
|
||||
xmedia_s32 xmyolov5n_detect_get_attr(xmedia_void *context, xmedia_svp_yolov5_attr *task_attr);
|
||||
|
||||
xmedia_s32 xmyolov5n_detect_process(xmedia_void *context, const xmedia_svp_task_input *input, xmedia_svp_yolov5_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,37 @@
|
||||
#ifndef __XMYOLOV5N_AOV_H__
|
||||
#define __XMYOLOV5N_AOV_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_svp.h"
|
||||
#include "svp_nms.h"
|
||||
#include "xmedia_svp_quantize.h"
|
||||
#include "svp_core.h"
|
||||
#include "yolov5.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
yolov5_detect_param *detect_info;
|
||||
xmedia_void *priv;
|
||||
} svp_yolov5n_aov_context;
|
||||
|
||||
xmedia_s32 xmyolov5n_aov_detect_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 xmyolov5n_aov_detect_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 xmyolov5n_aov_detect_set_attr(xmedia_void *context, const xmedia_svp_aov_attr *task_attr);
|
||||
|
||||
xmedia_s32 xmyolov5n_aov_detect_get_attr(xmedia_void *context, xmedia_svp_aov_attr *task_attr);
|
||||
|
||||
xmedia_s32 xmyolov5n_aov_detect_process(xmedia_void *context, const xmedia_svp_task_input *input, xmedia_svp_aov_detect_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,37 @@
|
||||
#ifndef __XMYOLOV8_H__
|
||||
#define __XMYOLOV8_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_svp.h"
|
||||
#include "svp_nms.h"
|
||||
#include "xmedia_svp_quantize.h"
|
||||
#include "svp_core.h"
|
||||
#include "yolov8.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
yolov8_detect_param *detect_info;
|
||||
xmedia_void *priv;
|
||||
} svp_yolov8_context;
|
||||
|
||||
xmedia_s32 xmyolov8_detect_init(xmedia_void *context, const xmedia_svp_task_cfg cfg);
|
||||
|
||||
xmedia_s32 xmyolov8_detect_uninit(xmedia_void *context);
|
||||
|
||||
xmedia_s32 xmyolov8_detect_set_attr(xmedia_void *context, const xmedia_svp_yolov8_attr *task_attr);
|
||||
|
||||
xmedia_s32 xmyolov8_detect_get_attr(xmedia_void *context, xmedia_svp_yolov8_attr *task_attr);
|
||||
|
||||
xmedia_s32 xmyolov8_detect_process(xmedia_void *context, const xmedia_svp_task_input *input, xmedia_svp_yolov8_output *output);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,74 @@
|
||||
#ifndef __SVP_CORE_H__
|
||||
#define __SVP_CORE_H__
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include "xmedia_cl.h"
|
||||
#include "xmedia_svp_std.h"
|
||||
#include "xmedia_sys.h"
|
||||
#include "xmedia_tde.h"
|
||||
#include "xmedia_ive.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define INPUT_MODEL_NUM_RGB888 1
|
||||
#define INPUT_MODEL_NUM_YUV420 2
|
||||
#define SVP_ALIGN_BYTE 16
|
||||
#define SVP_ALIGN_UP(A, ALIGN) \
|
||||
((((A) % (ALIGN)) == 0) ? (A) : ((A) + (ALIGN) - ((A) % (ALIGN))))
|
||||
|
||||
#define ALIGN_BYTE 8
|
||||
#define DEFAULT_INOUT_NUM 16
|
||||
#define ALIGN_FUNC(A, ALIGN) \
|
||||
((((A) % (ALIGN)) == 0) ? (A) : ((A) + (ALIGN) - ((A) % (ALIGN))))
|
||||
|
||||
typedef struct _xmedia_npu_model {
|
||||
xmedia_cl_graph graph;
|
||||
xmedia_cl_device_id *devices;
|
||||
xmedia_cl_context context;
|
||||
xmedia_s32 *output_size;
|
||||
xmedia_cl_tensor_info_inout output; // 模型输出相关数据信息
|
||||
xmedia_cl_tensor_info_inout input; // 模型输入相关数据信息
|
||||
xmedia_u64 weight_u64phyaddr;
|
||||
xmedia_void* weight_viraddr;
|
||||
xmedia_s32 *user_count;
|
||||
xmedia_void *rgb_viraddr;
|
||||
xmedia_u64 rgb_phyaddr;
|
||||
xmedia_u64 output_u64phyaddr;
|
||||
xmedia_void* output_viraddr;
|
||||
xmedia_cl_memory_reuse_type mem_reuse_type;
|
||||
} xmedia_npu_model;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 size;
|
||||
xmedia_bool reuse_flag;
|
||||
xmedia_u64 phyaddr;
|
||||
xmedia_void *viraddr;
|
||||
} svp_mem_config;
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_mem_reuse_type reuse_type;
|
||||
svp_mem_config workbuf_cfg;
|
||||
svp_mem_config inputbuf_cfg;
|
||||
svp_mem_config outputbuf_cfg;
|
||||
} svp_config;
|
||||
|
||||
xmedia_s32 npu_init_context();
|
||||
xmedia_s32 svp_set_cfg(xmedia_svp_cfg *cfg);
|
||||
xmedia_s32 svp_get_cfg(xmedia_svp_cfg *cfg);
|
||||
xmedia_s32 npu_load_model(const xmedia_svp_modules *model, xmedia_npu_model *xmd_npu_model);
|
||||
xmedia_s32 npu_run_model(xmedia_npu_model *xmd_npu_model, xmedia_u64 img_src_phy, xmedia_video_pixel_format pixel_fmt);
|
||||
xmedia_s32 npu_unload_model(xmedia_npu_model *xmd_npu_model);
|
||||
xmedia_s32 npu_release_context();
|
||||
extern xmedia_s32 check_chip_otp();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,54 @@
|
||||
#ifndef __SVP_PROC_H__
|
||||
#define __SVP_PROC_H__
|
||||
|
||||
#include "xmedia_svp.h"
|
||||
#include "svp_comm.h"
|
||||
#include "task_common.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define SVP_PROC_SIZE (4096 * 4)
|
||||
#define SVP_PROC_NAME_SIZE (16)
|
||||
|
||||
typedef struct {
|
||||
xmedia_svp_alg_type alg_type; // 算法类型
|
||||
xmedia_float detect_threshold; // 置信度阈值,建议值0.55f
|
||||
xmedia_float classifier_threshold; // 分类器阈值,建议值0.01f
|
||||
xmedia_float iou_threshold; // iou相交比阈值,建议值0.5f
|
||||
xmedia_u32 max_target_num; // 最大目标数,最大值10
|
||||
svp_movement movement; // 静止过滤相关参数
|
||||
xmedia_bool track_enable; // 追踪相关参数
|
||||
} proc_detect_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u8 framerate; // 帧率
|
||||
xmedia_u64 cost_time; // 消耗的时间
|
||||
xmedia_u8 fps_count; // 一秒内运行的次数
|
||||
struct timeval last_time; // 上次统计时间
|
||||
} svp_dbg_info;
|
||||
|
||||
typedef struct {
|
||||
xmedia_u32 buff_len_total;
|
||||
xmedia_u32 remain_buf;
|
||||
xmedia_char *vir_addr;
|
||||
} svp_proc_info;
|
||||
|
||||
typedef struct {
|
||||
svp_proc_info proc_info;
|
||||
svp_dbg_info dbg_info[XMEDIA_SVP_MAX_TASK_NUM];
|
||||
svp_task_handle *handle[XMEDIA_SVP_MAX_TASK_NUM];
|
||||
} svp_proc_context;
|
||||
|
||||
xmedia_s32 svp_update_proc_time(svp_proc_context* proc, xmedia_s32 handle, xmedia_u64 cost_time);
|
||||
xmedia_s32 svp_update_proc_framerate(svp_proc_context* proc, xmedia_s32 handle);
|
||||
xmedia_s32 svp_update_proc_info(svp_proc_context* proc, xmedia_s32 handle);
|
||||
xmedia_s32 svp_init_proc(xmedia_svp_context* context);
|
||||
xmedia_s32 svp_deinit_proc(xmedia_svp_context* context);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user