Files
gk-sdk/source/gmp/usr/svp/include/alg/svp_movement.h
T

77 lines
2.0 KiB
C

#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