204 lines
5.0 KiB
C
204 lines
5.0 KiB
C
#ifndef __APP_H__
|
|
#define __APP_H__
|
|
|
|
#include "common.h"
|
|
|
|
/* These header defines structures shared by scpu/ncpu/host_lib */
|
|
|
|
#define BOXES_MAX_NUM 80
|
|
#define YOLO_KEYPOINT_MAX 127
|
|
#define LAND_MARK_POINTS 5
|
|
#define FR_FEAT_SIZE 256
|
|
#define LV_R_SIZE 1
|
|
#define DUAL_LAND_MARK_POINTS 10
|
|
#define DME_OBJECT_MAX 80
|
|
#define IMAGENET_TOP_MAX 5
|
|
#define LAND_MARK_MOUTH_POINTS (4)
|
|
#define FD_RES_LENGTH (2 * 5)
|
|
|
|
#ifdef MASK_FDR
|
|
#define FR_RES_COUNT 2
|
|
#else
|
|
#define FR_RES_COUNT 1
|
|
#endif
|
|
#ifdef EMBED_CMP_NPU
|
|
#define FR_RES_LENGTH (FR_RES_COUNT * (16 + FR_FEAT_SIZE + 2)) // wt_hdr + user embedding
|
|
#else
|
|
#define FR_RES_LENGTH (FR_RES_COUNT * (4 * FR_FEAT_SIZE))
|
|
#endif
|
|
#define LM_RES_LENGTH (4 * LAND_MARK_POINTS)
|
|
#define LV_RES_LENGTH 4
|
|
#define SCORE_RES_LENGTH 4
|
|
#define MAX_PLATE_STR_LEN 10
|
|
#define OCR_MAX_NUM 7
|
|
|
|
#define MAX_YOLO_FACE_LANDMARK_CNT 4 * 2 // (x and y) * max point count
|
|
|
|
/* Yolo Result */
|
|
struct bounding_box_s {
|
|
float x1; // top-left corner: x
|
|
float y1; // top-left corner: y
|
|
float x2; // bottom-right corner: x
|
|
float y2; // bottom-right corner: y
|
|
float score; // probability score
|
|
int32_t class_num; // class # (of many) with highest probability
|
|
};
|
|
|
|
struct bounding_box_landmark_s {
|
|
float x1; // top-left corner: x
|
|
float y1; // top-left corner: y
|
|
float x2; // bottom-right corner: x
|
|
float y2; // bottom-right corner: y
|
|
float score; // probability score
|
|
int32_t class_num; // class # (of many) with highest probability
|
|
float lm[MAX_YOLO_FACE_LANDMARK_CNT]; // landmark data
|
|
};
|
|
|
|
struct yolo_result_s {
|
|
uint32_t class_count; // total class count
|
|
uint32_t box_count; // boxes of all classes
|
|
struct bounding_box_s boxes[BOXES_MAX_NUM]; // box_count
|
|
};
|
|
|
|
struct keypoint_s {
|
|
float x;
|
|
float y;
|
|
float score;
|
|
};
|
|
|
|
struct bounding_box_keypoint_s {
|
|
struct bounding_box_s bbox;
|
|
uint32_t keypoint_count;
|
|
struct keypoint_s kpts[YOLO_KEYPOINT_MAX]; // keypoint data
|
|
};
|
|
|
|
struct yolo_and_keypoint_result_s {
|
|
uint32_t class_count; // total class count
|
|
uint32_t box_count; // total box count
|
|
struct bounding_box_keypoint_s boxes_kpts[BOXES_MAX_NUM]; // found bounding boxes
|
|
};
|
|
|
|
struct yolo_and_landmark_result_s {
|
|
uint32_t class_count; // total class count
|
|
uint32_t box_count; // boxes of all classes
|
|
struct bounding_box_landmark_s boxes[BOXES_MAX_NUM]; // box_count
|
|
};
|
|
|
|
struct age_gender_result_s {
|
|
uint32_t age;
|
|
uint32_t ismale;
|
|
};
|
|
|
|
struct imagenet_result_s {
|
|
int32_t index; // index of the class
|
|
float score; // probability score of the class
|
|
};
|
|
|
|
struct facedet_result_s {
|
|
#ifdef LARRY_UPDATE_0905
|
|
int32_t len;
|
|
#endif
|
|
int32_t xywh[4]; // 4 values for X, Y, W, H
|
|
int32_t class_num; // masked 2 / unmasked 1
|
|
};
|
|
|
|
struct landmark_result_s {
|
|
struct {
|
|
uint32_t x;
|
|
uint32_t y;
|
|
} marks[LAND_MARK_POINTS];
|
|
float score;
|
|
float blur;
|
|
int32_t class_num;
|
|
};
|
|
|
|
struct fr_result_s {
|
|
float feature_map[FR_FEAT_SIZE];
|
|
int8_t feature_map_fixed[FR_FEAT_SIZE];
|
|
};
|
|
|
|
struct lv_result_s{
|
|
float real[LV_R_SIZE];
|
|
};
|
|
|
|
struct dual_landmarks_s {
|
|
struct {
|
|
uint32_t x;
|
|
uint32_t y;
|
|
} marks[DUAL_LAND_MARK_POINTS];
|
|
};
|
|
|
|
struct fd_landmark_result_s {
|
|
struct bounding_box_s boxes;
|
|
struct {
|
|
uint32_t x;
|
|
uint32_t y;
|
|
} marks[LAND_MARK_POINTS];
|
|
float score;
|
|
float blur;
|
|
};
|
|
|
|
typedef struct {
|
|
struct bounding_box_s fd_res;
|
|
struct age_gender_result_s ag_res;
|
|
} fd_age_gender_res;
|
|
|
|
struct fd_age_gender_s {
|
|
uint32_t count;
|
|
fd_age_gender_res boxes[DME_OBJECT_MAX];
|
|
};
|
|
|
|
typedef struct {
|
|
uint32_t class_count; // total class count
|
|
uint32_t box_count; // boxes of all classes
|
|
struct bounding_box_s boxes[DME_OBJECT_MAX]; // box information
|
|
} dme_res;
|
|
|
|
typedef struct {
|
|
uint32_t class_count; // total class count
|
|
uint32_t box_count; // boxes of all classes
|
|
struct fd_landmark_result_s fd_lm_res[DME_OBJECT_MAX]; // box and landmark information
|
|
} fd_lm_res;
|
|
|
|
enum mouth {
|
|
MOUTH_T = 0,
|
|
MOUTH_B,
|
|
MOUTH_L,
|
|
MOUTH_R,
|
|
};
|
|
|
|
struct yawning_result_s {
|
|
struct {
|
|
float x;
|
|
float y;
|
|
} marks[LAND_MARK_MOUTH_POINTS]; // mouth 0:top 1:bottom 2: left 3:right
|
|
uint32_t isYawning;
|
|
float yawning_rate;
|
|
};
|
|
|
|
struct fd_yawning_result_s {
|
|
struct bounding_box_s boxes;
|
|
struct yawning_result_s yawning;
|
|
};
|
|
|
|
typedef struct {
|
|
uint32_t count; // boxes of all classes
|
|
struct fd_yawning_result_s fd_yawning_res[DME_OBJECT_MAX]; // box and landmark information
|
|
} fd_yd_res;
|
|
|
|
#define CLASSIFIER_MAX_NUM 1000
|
|
struct classifier_result_s {
|
|
float score[CLASSIFIER_MAX_NUM]; // score for each class index
|
|
};
|
|
|
|
struct yolov5_face_result_s {
|
|
struct bounding_box_s box;
|
|
uint32_t mark_num;
|
|
struct {
|
|
uint32_t x;
|
|
uint32_t y;
|
|
} marks[1];
|
|
};
|
|
|
|
#endif
|