GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)

This commit is contained in:
lai
2026-09-06 03:52:57 +08:00
commit b1928b41c0
21813 changed files with 4413081 additions and 0 deletions
@@ -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