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
|
||||
Reference in New Issue
Block a user