【关注我,后续持续新增专题博文,谢谢!!!】

上一篇我们讲了

        这一篇我们开始讲 Camera相机人脸识别系列专题分析之十六:人脸特征检测FFD算法之libcvface_api.so数据结构详细注释解析

目录

一、libcvface_api.so数据结构详细注释解析


一、libcvface_api.so数据结构详细注释解析

/// @brief 人脸信息结构体
typedef struct cv_face_t
{cv_rect_t rect;  ///< 代表面部的矩形区域float score;  ///< 置信度,用于筛除负例,与人脸照片质量无关,值越高表示置信度越高。float yaw;    ///< 水平转角,真实度量的左负右正float pitch;  ///< 俯仰角,真实度量的上负下正float roll;   ///< 旋转角,真实度量的左负右正float eye_dist;  ///< 两眼间距int ID;  ///< faceID,用于表示在实时人脸跟踪中的相同人脸在不同帧多次出现,在人脸检测的结果中无实际意义cv_landmarks_t landmarks;cv_pointf_t points_more[512];  ///< 全部关键点信息(不开启240状态下默认仅包含106 + 新增的31额头关键点 = 137)// unsigned char occlusion[512];  ///< 遮挡点信息int points_count;  ///< 全部关键点数量unsigned char occlusion[512];               ///< 遮挡点信息
} cv_face_t;/// @brief 分割信息结构体
/// 若嘴唇分割模型输出小于低阈值,即无遮挡,口红效果不变。
/// 若嘴唇分割模型输出大于高阈值,为遮挡,输出原始嘴唇像素值。
/// 若嘴唇分割模型输出在高低阈值之间,做透明度过渡。
typedef struct cv_face_segment_t
{cv_image_t* mask;/// mask数据,gray类型,像素范围0-255float mouth_score;///用来缓解嘴唇分割模型在无遮挡场景误判的问题float min_thr;///无遮挡胖定阈值float max_thr;///遮挡判定阈值cv_pointf_t offset;///mask位于原图的左上角坐标
}cv_face_segment_t;typedef struct cv_face_matrix_attribute_t
{int gender;float age;float smile;int race;
} cv_face_matrix_attribute_t;// @brief 质量信息结构体
typedef struct cv_selector_message
{float integrity;      // 脸部画面完成度,[0, 1]float summary_score;  // 汇总后的质量分数,大部分位于[0, 1],但不保证
} cv__selector_message;/// 人脸检测、跟踪配置选项
#define CV_FACE_DEFAULT_CONFIG      0x00000000    ///< 默认选项,不设置任何开关
#define CV_FACE_RESIZE_IMG_320W     0x00000002   ///< resize图像为长边320的图像
#define CV_FACE_RESIZE_IMG_480W     0x00000004   ///< resize图像为长边480的图像
#define CV_FACE_RESIZE_IMG_640W     0x00000008   ///< resize图像为长边640的图像
#define CV_FACE_RESIZE_IMG_720W     0x00000010   ///< resize图像为长边720的图像
#define CV_FACE_RESIZE_IMG_960W     0x00000020   ///< resize图像为长边960的图像
#define CV_FACE_RESIZE_IMG_1080W    0x00000040  ///< resize图像为长边1080的图像
#define CV_FACE_RESIZE_IMG_1280W    0x00000080  ///< resize图像为长边1280的图像/// high precision keypoints config flags
#define CV_FACE_ENABLE_HIGH_PRECISION_LIPS              0x00001000     ///< 开启嘴唇精度优化。
#define CV_FACE_ENABLE_HIGH_PRECISION_EYE               0x00002000      ///< 开启眼眶精度优化。预留字段,暂未启用。
#define CV_FACE_ENABLE_HIGH_PRECISION_EYEBROW           0x00004000  ///< 开启眉毛精度优化。预留字段,暂未启用。
#define CV_FACE_ENABLE_HIGH_PRECISION_IRIS              0x00008000     ///< 开启瞳孔点。预留字段,暂未启用。/// detect main obj flag
#define CV_FACE_ENABLE_MAIN_OBJECT_TRACK                0x00020000  ///< 开启主体追踪功能#define CV_FACE_ENABLE_MIDDLE_PRECISION_KEYPOINTS       0x02000000  ///< 开启中等精度282关键点模式
#define CV_FACE_ENABLE_LOW_PRECISION_KEYPOINTS          0x01000000  ///< 开启低精度关键点模式,仅输出137点(106+31额头点)/// detect config flags, 0x----00-- ~ 0x----FF--
#define CV_DETECT_ENABLE_ALIGN_21                       0x00000100   ///< 开启面部关键21点检测选项
#define CV_DETECT_ENABLE_ALIGN_106                      0x00000200  ///< 开启面部关键106点检测选项
#define CV_DETECT_ENABLE_ALIGN_296                      0x00000400  ///< 开启面部关键296点检测选项/// 该版本sdk未开启此功能(如:面部关键21点检测版本传入了面部关键106点检测参数)
#define CV_E_UNSURPPORTED (-1000)
/// 指定位置未找到license.lic文件
#define CV_E_MISSLICENSE (-1001)
/// cv_face_init_license_config 函数被重复调用
#define CV_E_MULTI_CALLS (-1002)/// @brief  人脸朝向
typedef enum
{CV_FACE_UP = 0x0000001,     ///< 人脸向上,即人脸朝向正常CV_FACE_LEFT = 0x0000002,   ///< 人脸向左,即人脸被逆时针旋转了90度CV_FACE_DOWN = 0x0000004,   ///< 人脸向下,即人脸被逆时针旋转了180度CV_FACE_RIGHT = 0x0000008,  ///< 人脸向右,即人脸被逆时针旋转了270度CV_FACE_UNKNOWN = 0xf  ///< 人脸朝向未知,API自动判断人脸朝向,耗时增加。face_track不支持此参数,等同于CV_FACE_UP
} cv_face_orientation;//>> CONFIG_ST_FACE_API_COLOR_CONVERT
// ===================== color convert ====================
typedef enum
{CV_BGRA_YUV420P = 0,   ///< CV_PIX_FMT_BGRA8888到CV_PIX_FMT_YUV420P转换CV_BGR_YUV420P = 1,    ///< CV_PIX_FMT_BGR888到CV_PIX_FMT_YUV420P转换CV_BGRA_NV12 = 2,      ///< CV_PIX_FMT_BGRA8888到CV_PIX_FMT_NV12转换CV_BGR_NV12 = 3,       ///< CV_PIX_FMT_BGR888到CV_PIX_FMT_NV12转换CV_BGRA_NV21 = 4,      ///< CV_PIX_FMT_BGRA8888到CV_PIX_FMT_NV21转换CV_BGR_NV21 = 5,       ///< CV_PIX_FMT_BGR888到CV_PIX_FMT_NV21转换CV_YUV420P_BGRA = 6,   ///< CV_PIX_FMT_YUV420P到CV_PIX_FMT_BGRA8888转换CV_YUV420P_BGR = 7,    ///< CV_PIX_FMT_YUV420P到CV_PIX_FMT_BGR888转换CV_NV12_BGRA = 8,      ///< CV_PIX_FMT_NV12到CV_PIX_FMT_BGRA8888转换CV_NV12_BGR = 9,       ///< CV_PIX_FMT_NV12到CV_PIX_FMT_BGR888转换CV_NV21_BGRA = 10,     ///< CV_PIX_FMT_NV21到CV_PIX_FMT_BGRA8888转换CV_NV21_BGR = 11,      ///< CV_PIX_FMT_NV21到CV_PIX_FMT_BGR888转换CV_BGRA_GRAY = 12,     ///< CV_PIX_FMT_BGRA8888到CV_PIX_FMT_GRAY8转换CV_BGR_BGRA = 13,      ///< CV_PIX_FMT_BGR888到CV_PIX_FMT_BGRA8888转换CV_BGRA_BGR = 14,      ///< CV_PIX_FMT_BGRA8888到CV_PIX_FMT_BGR888转换CV_YUV420P_GRAY = 15,  ///< CV_PIX_FMT_YUV420P到CV_PIX_FMT_GRAY8转换CV_NV12_GRAY = 16,     ///< CV_PIX_FMT_NV12到CV_PIX_FMT_GRAY8转换CV_NV21_GRAY = 17,     ///< CV_PIX_FMT_NV21到CV_PIX_FMT_GRAY8转换CV_BGR_GRAY = 18,      ///< CV_PIX_FMT_BGR888到CV_PIX_FMT_GRAY8转换CV_GRAY_YUV420P = 19,  ///< CV_PIX_FMT_GRAY8到CV_PIX_FMT_YUV420P转换CV_GRAY_NV12 = 20,     ///< CV_PIX_FMT_GRAY8到CV_PIX_FMT_NV12转换CV_GRAY_NV21 = 21,     ///< CV_PIX_FMT_GRAY8到CV_PIX_FMT_NV21转换CV_NV12_YUV420P = 22,  ///< CV_PIX_FMT_GRAY8到CV_PIX_FMT_NV21转换CV_NV21_YUV420P = 23,  ///< CV_PIX_FMT_GRAY8到CV_PIX_FMT_NV21转换CV_NV21_RGBA = 24,     ///< CV_PIX_FMT_NV21到CV_PIX_FMT_RGBA转换CV_BGR_RGBA = 25,      ///< CV_PIX_FMT_BGR到CV_PIX_FMT_RGBA转换CV_BGRA_RGBA = 26,     ///< CV_PIX_FMT_BGRA到CV_PIX_FMT_RGBA转换CV_RGBA_BGRA = 27,     ///< CV_PIX_FMT_RGBA到CV_PIX_FMT_BGRA转换CV_GRAY_BGR = 28,      ///< CV_PIX_FMT_GRAY8到CV_PIX_FMT_BGR888转换CV_GRAY_BGRA = 29,     ///< CV_PIX_FMT_GRAY8到CV_PIX_FMT_BGRA8888转换CV_NV12_RGBA = 30,     ///< CV_PIX_FMT_NV12到CV_PIX_FMT_RGBA8888转换CV_NV12_RGB = 31,      ///< CV_PIX_FMT_NV12到CV_PIX_FMT_RGB888转换CV_RGBA_NV12 = 32,     ///< CV_PIX_FMT_RGBA8888到CV_PIX_FMT_NV12转换CV_RGB_NV12 = 33,      ///< CV_PIX_FMT_RGB888到CV_PIX_FMT_NV12转换CV_RGBA_BGR = 34,      ///< CV_PIX_FMT_RGBA888到CV_PIX_FMT_BGR888转换CV_BGRA_RGB = 35,      ///< CV_PIX_FMT_BGRA888到CV_PIX_FMT_RGB888转换CV_RGBA_GRAY = 36,CV_RGB_GRAY = 37,CV_RGB_BGR = 38,CV_BGR_RGB = 39,CV_YUV420P_RGBA = 40,CV_RGBA_YUV420P = 41
} cv_color_convert;//>> CONFIG_ST_FACE_API_ATTRIBUTE/// @defgroup cvface_attribute cvface attribute
/// @brief face attribute detection interfaces
///
/// This set of interfaces detect face attribute like emotion, accessories etc.
///
/// @{/// 推荐阀值设置为50,可根据实际场景进行微调typedef enum
{CV_FEATURE_AGE = 0,           ///< 年龄 0 - 100CV_FEATURE_GENDER_MALE = 1,   ///< 性别 为男性的百分比置信度(0-100)CV_FEATURE_ATTRACTIVE = 2,    ///< 魅力 0 - 100CV_FEATURE_EYEGLASS = 3,      ///< 眼镜 百分比置信度(0-100)CV_FEATURE_SUNGLASS = 4,      ///< 太阳镜 百分比置信度(0-100)CV_FEATURE_SMILE = 5,         ///< 微笑 百分比置信度(0-100)CV_FEATURE_MASK = 6,          ///< 面具 百分比置信度(0-100)CV_FEATURE_RACE = 7,          ///< 种族 Yellow 0, Black 1,White 2CV_FEATURE_EYE_OPEN = 8,      ///< 眼睛睁开 百分比置信度(0-100)CV_FEATURE_MOUTH_OPEN = 9,    ///< 嘴巴张开 百分比置信度(0-100)CV_FEATURE_BEARD = 10,        ///< 有胡子 百分比置信度(0-100)CV_FEATURE_LUMA = 11,         ///< 肤色 百分比置信度(0-100)CV_FEATURE_SKIN = 12,         ///< 肤质 百分比置信度(0-100)CV_FEATURE_QUAILITY = 13,     ///< 人脸质量 百分比置信度(0-100)CV_FEATURE_COVER = 14,        ///< 遮挡 百分比置信度(0-100)CV_FEATURE_EXPRESSION = 15,   ///< 表情 百分比置信度(0-100)CV_FEATURE_QUALITY_PIC = 16,  ///< 图片质量 百分比置信度(0-100)CV_FEATURE_LUMA_U = 17,       ///< 肤色,U通道 百分比置信度(0-100)CV_FEATURE_LUMA_V = 18,       ///< 肤色,V通道 百分比置信度(0-100)CV_FEATURE_RACE_YELLOW = 20,  ///< 种族-黄 百分比置信度(0-100)CV_FEATURE_RACE_BLACK = 21,   ///< 种族-黑 百分比置信度(0-100)CV_FEATURE_RACE_WHITE = 22,   ///< 种族-白 百分比置信度(0-100)CV_FEATURE_RACE_BROWN = 23,   ///< 种族-棕 百分比置信度(0-100)CV_FEATURE_LENGTH = 32        ///< 属性条目数
} cv_attribute_feature_type;/// 表情为置信度最高的选项
typedef enum
{CV_EMOTION_ANGRY = 0,      ///< 愤怒 百分比置信度(0-100)CV_EMOTION_CALM = 1,       ///< 平静 百分比置信度(0-100)CV_EMOTION_CONFUSED = 2,   ///< 困惑 百分比置信度(0-100)CV_EMOTION_DISGUST = 3,    ///< 厌恶 百分比置信度(0-100)CV_EMOTION_HAPPY = 4,      ///< 高兴 百分比置信度(0-100)CV_EMOTION_SAD = 5,        ///< 悲伤 百分比置信度(0-100)CV_EMOTION_SCARED = 6,     ///< 惊恐 百分比置信度(0-100)CV_EMOTION_SURPRISED = 7,  ///< 诧异 百分比置信度(0-100)CV_EMOTION_SQUINT = 8,     ///< 斜视 百分比置信度(0-100)CV_EMOTION_SCREAM = 9,     ///< 尖叫 百分比置信度(0-100)CV_EMOTION_LENGTH = 32     ///< 属性条目数 百分比置信度(0-100)
} cv_attribute_emotion_type;#define CV_E_COMMON_LIB 0x19
#define CV_E_COMMON_MODULE_FOUNDATION 0x00
#define CV_E_COMMON_MODULE_DETECTION 0x01#define CV_E_COMMON_DETECTION_CAPABILITY_NOT_SUPPORTED \CV_ERR_PACK(CV_E_COMMON_LIB, CV_E_COMMON_MODULE_DETECTION, 0x01)  ///< 不支持的detection输出
#define CV_E_COMMON_SUBMODULE_NON_EXIT \CV_ERR_PACK(CV_E_COMMON_LIB, CV_E_COMMON_MODULE_FOUNDATION, 0x03)  ///< 子模型不存在
#define CV_E_COMMON_FEATURE_ILLEGAL_VALUE \CV_ERR_PACK(CV_E_COMMON_LIB, CV_E_COMMON_MODULE_FOUNDATION, 0x04)  ///< 特征值非法/// cv handle declaration
typedef void *cv_handle_t;/// cv result declaration
typedef cv_errcode cv_result_t;/// cv rectangle definition
typedef struct cv_rect_t
{int left;    ///< 矩形最左边的坐标int top;     ///< 矩形最上边的坐标int right;   ///< 矩形最右边的坐标int bottom;  ///< 矩形最下边的坐标
} cv_rect_t;/// cv float type point definition
typedef struct cv_pointf_t
{float x;  ///< 点的水平方向坐标, 为浮点数float y;  ///< 点的竖直方向坐标, 为浮点数
} cv_pointf_t;/// cv integer type point definition
typedef struct cv_pointi_t
{int x;  ///< 点的水平方向坐标, 为整数int y;  ///< 点的竖直方向坐标, 为整数
} cv_pointi_t;/// cv float type 3d point definition
typedef struct cv_point3f_t
{float x;  ///< 点的水平方向坐标, 为浮点数float y;  ///< 点的竖直方向坐标, 为浮点数float z;  ///< 点的深度坐标, 为浮点数
} cv_point3f_t;/// pose definition
typedef struct cv_pose_t
{float yaw;    ///< 围绕Y轴旋转,也叫偏航角float pitch;  ///< 围绕X轴旋转,也叫做俯仰角float roll;   ///< 围绕Z轴旋转,也叫翻滚角
} cv_pose_t;typedef struct cv_landmarks_extra_info_t
{float affine_mat[3][3];    ///< 仿射变换矩阵cv_point3f_t *points_ori;  ///< 原始关键点数组int points_count;          ///< 关键点数量int model_input_size;float left_eye_score; ///< 左眼球置信度float right_eye_score; ///< 右眼球置信度float mouth_score; ///< 嘴部遮挡置信度
} cv_landmarks_extra_info_t;/// cv landmarks array struct
typedef struct cv_landmarks_t
{cv_point3f_t *points_array;  ///< 关键点数组unsigned char *occlusion;int points_count;  ///< 关键点数量int label;         ///< tracking得到float score;       ///< 关键点置信的labelfloat label_score;void *extra_info;  ///< the real type is cv_landmarks_extra_info_t* or others, it's up to the modelsfloat *points_score;unsigned int reserved1;unsigned int reserved2;
} cv_landmarks_t;/// @brief detection结果
typedef struct cv_detection_result_t
{cv_rect_t rect;   ///< 结果rectfloat score;      ///< 结果分数int label;        ///< 结果标签int orientation;  ///< 结果朝向unsigned int reserved1;unsigned int reserved2;
} cv_detection_result_t;/// @brief 关键点
typedef struct cv_keypoint_t
{cv_pointf_t point;  ///< 关键点float score;        ///< 关键点置信度unsigned int reserved1;unsigned int reserved2;
} cv_keypoint_t;/// @brief 跟踪结果
typedef struct cv_target_t
{cv_detection_result_t detect_result;  ///< 框cv_landmarks_t landmarks;             ///< 关键点int id;  ///< 目标ID, 用于表示在目标跟踪中的相同目标在不同帧多次出现
} cv_target_t;/// @brief template track中间状态
typedef struct cv_template_state_t
{cv_rect_t rect;float score;float angle;int corr_feature_size;float* corr_feature;
} cv_template_state_t;/// @brief template track跟踪结果
typedef struct cv_template_target_t
{cv_detection_result_t detect_result;  ///< 框cv_landmarks_t landmarks;             ///< 关键点int id;  ///< 目标ID, 用于表示在目标跟踪中的相同目标在不同帧多次出现cv_template_state_t state;
} cv_template_target_t;/// @brief template track 跟踪结果new
typedef struct cv_template_track_target_t
{cv_detection_result_t detect_result;            ///< 框int id;                ///< 目标ID, 用于表示在目标跟踪中的相同目标在不同帧多次出现cv_template_state_t state;
} cv_template_track_target_t;/// @brief template facial track 跟踪结果
typedef struct cv_template_facial_track_target_t
{cv_template_track_target_t track_target;cv_landmarks_t landmarks;
} cv_template_facial_track_target_t;
/// @brief template universal track 跟踪结果
typedef struct cv_template_universal_track_target_t
{cv_template_track_target_t track_target;
} cv_template_universal_track_target_t;/// @brief pose refine结果
typedef struct cv_template_pose_refine_t {cv_rect_t rect;     ///< 框cv_rect_t rect_in_origin;   ///<原图框float score;        ///< 分float angle;        ///< 角
} cv_template_pose_refine_t;
/// 相机类型
typedef enum
{CV_PROJECTION = 0,  ///< 投影相机CV_ORTHO = 1,       ///< 正交相机CV_DEPTH = 2,       ///< 深度相机
} cv_camera_type;/// 相机内参
typedef struct cv_intrinsic_param_t
{cv_camera_type camera_type;     ///< 相机类型int calib_width, calib_height;  ///< 相机标定时分辨率float camera_matrix[3][3];      ///< 相机内参矩阵 [ fx, 0.0f, cx | 0.0f, fy, cy | 0.0f, 0.0f, 1.0f ]float dist_coeffs[8];           ///< 相机畸变参数 [ k1, k2, p1, p2, k3, k4, k5, k6 ]void *ext;                      ///< 其他畸变计算
} cv_intrinsic_param_t;typedef struct cv_extrinsic_param_t
{float rotation_matrix[3][3];  ///< 旋转矩阵float translation[3];         ///< 平移向量
} cv_extrinsic_param_t;/// @brief 朝向信息
typedef enum
{CV_ORIENTATION_0 = 0,    ///< 不做旋转预处理CV_ORIENTATION_90 = 1,   ///< 预处理图像, 将输入图像顺时针旋转90度, 再执行后续操作CV_ORIENTATION_180 = 2,  ///< 预处理图像, 将输入图像顺时针旋转180度, 再执行后续操作CV_ORIENTATION_270 = 3,  ///< 预处理图像, 将输入图像顺时针旋转270度, 再执行后续操作
} cv_orientation;/// cv pixel format definition,注意,某些算法可能仅仅支持部分图像格式
typedef enum
{CV_PIX_FMT_GRAY8,    ///< Y    1       8bpp ( 单通道8bit灰度像素 )CV_PIX_FMT_YUV420P,  ///< YUV  4:2:0   12bpp ( 3通道, 一个亮度通道, 另两个为U分量和V分量通道, 所有通道都是连续的 )CV_PIX_FMT_NV12,  ///< YUV  4:2:0   12bpp ( 2通道, 一个通道是连续的亮度通道, 另一通道为UV分量交错 )CV_PIX_FMT_NV21,  ///< YUV  4:2:0   12bpp ( 2通道, 一个通道是连续的亮度通道, 另一通道为VU分量交错 )CV_PIX_FMT_BGRA8888,  ///< BGRA 8:8:8:8 32bpp ( 4通道32bit BGRA 像素 )CV_PIX_FMT_BGR888,    ///< BGR  8:8:8   24bpp ( 3通道24bit BGR 像素 )/// 以下图像格式只在fastcv开启时支持CV_PIX_FMT_RGBA8888,  ///< RGBA  8:8:8:8   32bpp ( 4通道32bit RGBA 像素 )CV_PIX_FMT_RGB888,    ///< RGB  8:8:8   24bpp ( 3通道24bit RGB 像素 )CV_PIX_FMT_GRAY16,  ///< 特殊图像格式,并不提供旋转以及到其他格式的转换等CV_PIX_FMT_RGB565,  ///< RGB 5:6:5 16bpp,只在fastcv开启时支持从RGB565转BGR和GRAY,目前仅支持android arm平台CV_PIX_FMT_ABGR8888,  ///< ABGR 8:8:8:8 32bpp ( 4通道32bit ABGR 像素 ),目前仅支持android arm平台CV_PIX_FMT_FLOAT2,    ///< 2通道CV_PIX_FMT_FLOAT,     ///< 1通道CV_PIX_FMT_YUYV,  /// 目前仅支持到GRAY8和BGR888的转换CV_PIX_FMT_UYVY   /// 目前仅支持到GRAY8和BGR888的转换
} cv_pixel_format;/// @brief 时间戳定义
typedef struct cv_time_t
{long int tv_sec;   ///< 秒long int tv_usec;  ///< 微秒
} cv_time_t;/// 图像格式定义
typedef struct cv_image_t
{unsigned char *data;           ///< 图像数据指针cv_pixel_format pixel_format;  ///< 像素格式int width;                     ///< 宽度(以像素为单位)int height;                    ///< 高度(以像素为单位)int stride;                    ///< 跨度, 即每行所占的字节数///< 目前仅支持内存连续的图像, 各图像格式具体大小应为:///< CV_PIX_FMT_GRAY8:      stride = width///< CV_PIX_FMT_YUV420P:    stride = width///< CV_PIX_FMT_NV12:       stride = width///< CV_PIX_FMT_NV21:       stride = width///< CV_PIX_FMT_BGRA8888:   stride = width * 4///< CV_PIX_FMT_BGR888:     stride = width * 3///< CV_PIX_FMT_RGBA8888:   stride = width * 4///< CV_PIX_FMT_RGB888:     stride = width * 3///< CV_PIX_FMT_GRAY16:     stride = width * 2///< CV_PIX_FMT_RGB565:     stride = width * 2///< CV_PIX_FMT_ABGR8888:   stride = width * 4///< CV_PIX_FMT_FLOAT2:     stride = width * 8///< CV_PIX_FMT_FLOAT:      stride = width * 4///< CV_PIX_FMT_YUYV:       stride = width * 2///< CV_PIX_FMT_UYVY:       stride = width * 2cv_time_t time_stamp;          ///< 时间戳
} cv_image_t;typedef int cv_errcode;#define CV_ERR_PACK(lib, module, reason)                                                                               \((int)(0x80000000 | ((unsigned int)(lib)&0x7ff) << 20 | ((unsigned int)(module)&0xf) << 16                         \| ((unsigned int)(reason)&0xffff)))#define CV_ERR_GETLIB(error_code) ((unsigned int)(error_code) >> 20 & 0x7ff)#define CV_ERR_GETMODULE(error_code) ((unsigned int)(error_code) >> 16 & 0xf)#define CV_ERR_GETREASON(error_code) ((unsigned int)(error_code)&0xffff)///====================global error definition==========================================
#define CV_E_GLOBAL_LIB 0x7ff
#define CV_E_GLOBAL_MODULE 0xf
#define CV_E_ONLINE_ACTIVATE_MODULE 0xe
#define CV_E_CONNECTION_MODULE 0xd#define CV_OK 0 ///< 正常运行
#define CV_E_INVALIDARG CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffff) ///< 无效参数 -1
#define CV_E_HANDLE CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfffe) ///< 句柄错误 -2
#define CV_E_OUTOFMEMORY CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfffd) ///< 内存不足 -3
#define CV_E_FAIL CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfffc) ///< 运行失败,内部错误 -4
#define CV_E_DELNOTFOUND CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfffb) ///< 定义缺失 -5
#define CV_E_INVALID_PIXEL_FORMAT CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfffa) ///< 不支持的图像格式 -6
#define CV_E_FILE_NOT_FOUND CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfff9) ///< 文件不存在 -7
#define CV_E_INVALID_FILE_FORMAT                                                                                       \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfff8) ///< 模型格式不正确导致加载失败 -8
#define CV_E_UNSUPPORTED CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfc18) ///< 不支持的函数调用方式 -1000#define CV_E_FILE_EXPIRE CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfff7) ///< 模型文件过期 -9
#define CV_E_READ_FILE_FAIL CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfff6) ///< 读取模型文件失败 -10
#define CV_E_VERIFY_REG_FAIL                                                                                           \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfff5) ///< 在线verify注册失败 -11///< ///
#define CV_E_INVALID_AUTH CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfff3) ///< license不合法 -13
#define CV_E_INVALID_APPID CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfff2) ///< 包名错误 -14
#define CV_E_AUTH_EXPIRE CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfff1) ///< SDK过期 -15
#define CV_E_UUID_MISMATCH CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xfff0) ///< UUID不匹配 -16
#define CV_E_ONLINE_AUTH_CONNECT_FAIL CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffef) ///< 在线验证连接失败 -17
#define CV_E_ONLINE_AUTH_TIMEOUT CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffee) ///< 在线验证超时 -18
#define CV_E_ONLINE_AUTH_INVALID CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffed) ///< 在线验证失败 -19
#define CV_E_LICENSE_IS_NOT_ACTIVABLE                                                                                  \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffec) ///< license不可离线激活 -20
#define CV_E_ACTIVE_FAIL CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffeb) ///< license离线激活失败 -21
#define CV_E_ACTIVE_CODE_INVALID CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffea) ///< 离线激活码无效 -22
#define CV_E_PRODUCT_VERSION_MISMATCH                                                                                  \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffe9) ///< 产品代码版本不一致 -23
#define CV_E_PLATFORM_NOTSUPPORTED CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffe8) ///< 不支持的平台 -24
#define CV_E_UNZIP_FAILED CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffe7) ///< 模型解压缩失败 -25
#define CV_E_SUBMODULE_NON_EXIT CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffe6) ///< 子模型不存在 -26
#define CV_E_ONLINE_ACTIVATE_NO_NEED                                                                                   \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffe5) ///< license不可在线激活 -27
#define CV_E_ONLINE_ACTIVATE_FAIL CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffe4) ///< 在线激活失败 -28
#define CV_E_ONLINE_ACTIVATE_CODE_INVALID                                                                              \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffe3) ///< 在线激活码无效 -29
#define CV_E_ONLINE_ACTIVATE_CONNECT_FAIL                                                                              \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffe2) ///< 在线激活连接失败 -30
#define CV_RET_UNRECOGNIZED                                                                                            \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffe1) ///< 图片不能识别(但是API调用正常) -31
#define CV_E_HW_AUTH_INIT_FAIL CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffe0) ///< 加密芯片验证初始化错误 -32
#define CV_E_HW_AUTH_FAIL CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffdf) ///< 加密芯片验证失败 -33
#define CV_E_VERIFY_FAIL CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffde) ///< 在线认证v2失败 -34
#define CV_E_VERIFY_EXPIRE CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffdd) ///< 在线认证v2过期 -35
#define CV_E_NO_LICENSE CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffdc) ///< 没有可用的证书 -36
#define CV_E_HW_REG_FAIL CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffdb) ///< 加密芯片验证注册失败 -37
#define CV_E_PRODUCT_VERSION_FAILED                                                                                    \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffda) ///< 获取product_version的函数调用失败 -38
#define CV_E_SIGN_ACTIVATION_CODE_FAILED CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffd9)   ///< 生成激活码失败 -39
#define CV_E_SIGN_ACTIVATION_CODE_TOKEN_EXPIRE CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffd8)		///< 激活码token过期 -40
#define CV_E_SIGN_ACTIVATION_CODE_EXPIRE CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_GLOBAL_MODULE, 0xffd7)		///< 激活码/** Connection error module code*/
/** \brief SSL status: normal connection fail. */
#define CV_E_CONNECTION_FAIL CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_CONNECTION_MODULE, 0xffff)///=======================protector errors===========================================
#define CV_E_PROTECTOR_LIB 0x1
#define CV_E_LICENSE_LIB 0x7F // 127
#define CV_E_PROTECTOR_MODULE_ONLINEAUTH_MODULE 0x1 ///< protector 在线验证返回错误码mask
#define CV_E_LICENSE_SENTINEL_MODULE 0x0/***CV_E_ONLINE_ACTIVATE_MODULE 错误码-2145517567 在请求body中没有system_info或者system_info格式不对-2145517566 jwt token格式不对-2145517565 body里system_info中没有udid或为空-2145517564 jwt签名算法不是HS256-2145517563 jwt签名校验失败-2145517562 jwt token中udid与body里system_info中的udid不一致-2145517561 jwt token中kid为空或者与body中license不一致-2145517560 认证失败-2145517559 内部错误-2145517558 license未找到-2145517557 license激活次数已用完-2145517556 认证失败-2145517555 license _act字段不是online_activation-2145517554 license已失效-2145517553 找不到父证书-2145517552 license父证书过多,最多为10层if (CV_ERR_GETLIB(code) == CV_E_PROTECTOR_LIB)if (CV_ERR_GETMODULE(code) == CV_E_ONLINE_ACTIVATE_MODULE)CV_ERR_GETREASON(code)对应获取getreason结果1 在请求body中没有system_info或者system_info格式不对2 jwt token格式不对3 body里system_info中没有udid或为空4 jwt签名算法不是HS2565 jwt签名校验失败6 jwt token中udid与body里system_info中的udid不一致7 jwt token中kid为空或者与body中license不一致8 认证失败9 内部错误10 license未找到11 license激活次数已用完12 认证失败13 license _act字段不是online_activation14 license已失效15 找不到父证书16 license父证书过多,最多为10层
***/#define CV_E_PROTECTOR_UDID                                                                                            \CV_ERR_PACK(CV_E_PROTECTOR_LIB, CV_E_PROTECTOR_MODULE_ONLINEAUTH_MODULE, 0xffff) ///< 获取udid失败
#define CV_E_PROTECTOR_FORMAT_HEADER                                                                                   \CV_ERR_PACK(CV_E_PROTECTOR_LIB, CV_E_PROTECTOR_MODULE_ONLINEAUTH_MODULE, 0xfffe) ///< 生成请求消息失败
#define CV_E_PROTECTOR_INVALID_URL                                                                                     \CV_ERR_PACK(CV_E_PROTECTOR_LIB, CV_E_PROTECTOR_MODULE_ONLINEAUTH_MODULE, 0xfffd) ///< url错误#define CV_E_HEARTBEAT_CONNECT_FAIL CV_ERR_PACK(CV_E_PROTECTOR_LIB, CV_E_GLOBAL_MODULE, 0xffff) ///< 连接心跳服务器失败
#define CV_E_HEARTBEAT_INVALID_RESPONSE                                                                                \CV_ERR_PACK(CV_E_PROTECTOR_LIB, CV_E_GLOBAL_MODULE, 0xfffe) ///< 心跳服务器响应消息格式错误/*
加密狗相关错误码说明:
错误码LIB(用CV_ERR_GETLIB获取):CV_E_LICENSE_LIB
错误码MODULE(用CV_ERR_GETMODULE获取):CV_E_LICENSE_SENTINEL_MODULE
错误码REASON(用CV_ERR_GETREASON获取):0x8xxx的错误码定义在本文件中,为加密狗模块通用错误码;0x4xxx的错误码为激活服务器端响应返回的错误码;其他错误码为加密狗硬件相关错误码
*/
#define CV_E_SENTINEL_PARSE_XML CV_ERR_PACK(CV_E_LICENSE_LIB, CV_E_LICENSE_SENTINEL_MODULE, 0x8000) ///< 解析xml失败
#define CV_E_SENTINEL_CONNECT_FAIL                                                                                     \CV_ERR_PACK(CV_E_LICENSE_LIB, CV_E_LICENSE_SENTINEL_MODULE, 0x8001) ///< 链接激活服务器失败
#define CV_E_SENTINEL_V2C_MISSING                                                                                      \CV_ERR_PACK(CV_E_LICENSE_LIB, CV_E_LICENSE_SENTINEL_MODULE, 0x8002) ///< 服务器响应中没有v2c文件
#define CV_E_SENTINEL_INVALID_RESPONSE                                                                                 \CV_ERR_PACK(CV_E_LICENSE_LIB, CV_E_LICENSE_SENTINEL_MODULE, 0x8003) ///< 服务器响应格式错误
#define CV_E_SENTINEL_FINGERPRINT_MISMATCH                                                                             \CV_ERR_PACK(CV_E_LICENSE_LIB, CV_E_LICENSE_SENTINEL_MODULE, 0x8004) ///< 机器指纹不匹配/*
URLTYPE_HTTP_SP类型错误码:
错误码LIB(用CV_ERR_GETLIB获取):CV_E_GLOBAL_LIB
错误码MODULE(用CV_ERR_GETMODULE获取):CV_E_ONLINE_ACTIVATE_MODULE
错误码REASON(用CV_ERR_GETREASON获取):0x8xxx的错误码定义在本文件中*/
#define CV_E_HTTP_SP_ENCRYPT_REQUEST_FAILED                                                                            \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_ONLINE_ACTIVATE_MODULE, 0x8001); ///<加密请求失败
#define CV_E_HTTP_SP_DECRYPT_RESPONSE_FAILED                                                                           \CV_ERR_PACK(CV_E_GLOBAL_LIB, CV_E_ONLINE_ACTIVATE_MODULE, 0x8002); ///<解密响应失败

【关注我,后续持续新增专题博文,谢谢!!!】

下一篇讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/913416.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/913416.shtml
英文地址,请注明出处:http://en.pswp.cn/news/913416.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【字节跳动】数据挖掘面试题0012:数据分析、数据挖掘、数据建模的区别

文章大纲 数据分析、数据挖掘、数据建模的区别一、核心定义与目标二、技术方法差异三、应用场景对比四、三者的关联与递进关系五、面试应答策略 数据分析、数据挖掘、数据建模的区别 一、核心定义与目标 数据分析&#xff1a; 是对已有的数据进行收集、清洗、整理&#xff0c;并…

预警:病毒 “黑吃黑”,GitHub 开源远控项目暗藏后门

在开源生态蓬勃发展的当下&#xff0c;黑客们也将黑手伸向了代码共享平台。当黑产开发者以为在共享 “行业秘笈” 时&#xff0c;殊不知已经掉入了黑客布置的陷阱 —— 看似方便的后门远程控制源码和游戏作弊外挂源码等 “圈内资源”&#xff0c;实则是植入了恶意代码的投毒诱饵…

Qt中的QProcess类

Qt中的QProcess类 QProcess 是 Qt 框架中用于启动和控制外部进程的类&#xff0c;它属于 QtCore 模块。这个类提供了执行外部程序并与它们交互的功能。 一、主要功能 启动外部程序&#xff1a;可以启动系统上的其他可执行程序进程通信&#xff1a;通过标准输入、输出和错误流…

周任务自动化升级:N8N与多维表格无缝联动全解析

.自动化之言&#xff1a; 在上一篇文章中&#xff0c;我们介绍了如何利用多维表格&#xff08;如飞书多维表格或Notion&#xff09;搭建一个灵活的任务管理系统。现在我们将进一步扩展这个系统&#xff0c;借助 N8N 实现周报的自动汇总与邮件发送&#xff0c;真正实现任务管理…

Go语言的web框架--gin

本章内容&#xff0c;会介绍一下gin的运用&#xff0c;以及gin框架底层的内容&#xff0c;话不多说&#xff0c;开始进入今天的主题吧&#xff01; 一.基本使用 gin框架支持前后端不分离的形式&#xff0c;也就是直接使用模板的形式。 模板是什么&#xff1f; 这里可能有同…

企业为什么需要双因素认证?

从进入互联网时代开始&#xff0c;密码是我们个人日常的重要保护。但是单独的密码保护可能已经不再适应当前的数字化时代。密码已经不再足够安全最近发生的各种安全漏洞让我重新审视网络安全。几行代码可能就导致了全球数以百万的登录凭证被泄露。今天&#xff0c;仅仅周期性地…

Spring Boot + 本地部署大模型实现:优化与性能提升!

在Spring Boot中集成本地部署的大模型&#xff08;如LLaMA、ChatGLM等&#xff09;并进行优化&#xff0c;需要从模型选择、推理加速、资源管理和架构设计等多方面入手。以下是完整的优化方案及实现步骤&#xff1a; 一、核心优化策略 1. 模型量化 目标&#xff1a;减少显存占…

仿mudou库one thread oneloop式并发服务器

前言 我们所要实现的是一个高并发服务器的组件&#xff0c;使服务器的性能更加高效&#xff0c;是一个高并发服务器的组件&#xff0c;并不包含实际的业务。 首先需要先明确我们所要实现的目标是什么 第一点&#xff0c;实现一个高并发的服务器第二点&#xff0c;在服务器的基础…

超详细的私有化安装部署Dify服务以及安装过程中问题处理

一、什么是Dify Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员&#xff0c;也能参与到 AI 应用的定义和数据…

国产DSP,QXS320F280049,QXS320F28377D,QXS320F2800137,QXS320F28034

自定义指令集&#xff0c;自研内核架构&#xff0c;基于eclipse自研IDE&#xff0c;工具链&#xff0c;算法库。 根据自研QXS320F280049&#xff0c;做了600W和2KW数字电源方案&#xff0c;1.5KW电机方案&#xff0c;目前已在市场大量投产。 QXS320F290049应用于数字电源&#…

dotnet publish 发布后的项目,例如asp.net core mvc项目如何在ubuntu中运行,并可外部访问

复制到 Ubuntu 上的是使用 Visual Studio 或 dotnet publish 命令生成的 发布后的输出文件&#xff08;publish output&#xff09;&#xff0c;而不是原始项目源代码。在这种情况下&#xff0c;确实没有 .csproj 文件&#xff0c;所以不能直接用 dotnet run 启动。但你可以通过…

Linux多线程(十二)之【生产者消费者模型】

文章目录生产者消费者模型为何要使用生产者消费者模型生产者消费者模型优点基于BlockingQueue的生产者消费者模型BlockingQueueC queue模拟阻塞队列的生产消费模型单线程生产消费模型多线程生产消费模型生产者消费者模型 consumer/productor 321原则(便于记忆) 为何要使用生产…

MySQL表的操作(3)

文章目录前言一、创建表创建表时指定属性二、查看表查看表结构查看建表消息三、修改表修改列属性修改列名修改表名四、删除表总结前言 Hello! 那我们乘胜追击&#xff0c;开始 表的操作&#xff01; 一、创建表 首先创建一个 数据库 testForTable mysql> create database i…

从“人工智障”到“智能助手”:集成为什么能拯救AI用户体验?

几年前&#xff0c;当人们满怀期待地与AI语音助手对话时&#xff0c;常常遭遇令人啼笑皆非的回应——“抱歉&#xff0c;我不明白你在说什么”“请再说一遍”甚至答非所问。AI被戏称为“人工智障”&#xff0c;用户体验一度让人失望。然而&#xff0c;近年来&#xff0c;随着技…

Uniapp 自定义TabBar + 动态菜单实现教程(Vuex状态管理详解)

大家好&#xff0c;我是一诺。今天跟大家分享一下uniapp 封装自定义底部导航栏&#xff08;TabBar&#xff09; 过程中的思考和实践。通过本文&#xff0c;你将学会如何打造一个功能完善、可自由定制的TabBar组件&#xff01; 先看效果&#xff1a; 支持自定义图标和样式动态显…

MySQL数据库主从复制

概述1、master开启二进制日志记录2、slave开启IO进程&#xff0c;从master中读取二进制日志并写入slave的中继日志3、slave开启SQL进程&#xff0c;从中继日志中读取二进制日志并进行重放4、最终&#xff0c;达到slave与master中数据一致的状态&#xff0c;我们称作为主从复制的…

Rancher Server + Kubernets搭建云原生集群平台

目录Rancher Server Kubernets搭建云原生集群平台一、环境准备1、软件准备2、环境规划3、挂载数据盘二、虚拟机初始化基础配置&#xff08;所有节点都需要操作&#xff09;1、执行时间服务器脚本&#xff08;包括配置hostName主机名&#xff09;2、配置hosts文件3、配置各节点…

Java学习第八部分——泛型

目录 一、概述 &#xff08;一&#xff09;定义 &#xff08;二&#xff09;作用 &#xff08;三&#xff09;引入原因 二、使用 &#xff08;一&#xff09;类 &#xff08;二&#xff09;接口 &#xff08;三&#xff09;方法 三、类型参数 &#xff08;一&#xf…

定时点击二次鼠标 定时点击鼠标

定时点击二次鼠标 定时点击鼠标 今天分享一个定时点击两次的小工具。 我们在生活中&#xff0c;可能会遇到一些定时点击的任务。比如说在晚上9点去发送一个群发&#xff0c;或者倒计时点击一个按钮。那么可以使用这个工具&#xff0c;仅适用于Windows电脑。 #定时点击鼠标 #倒计…

Linux网络配置与故障排除完全指南

1. ifconfig命令 - 网络接口配置器 ifconfig&#xff08;interface configurator&#xff09;是Linux系统中最基础的网络配置工具。该命令可以初始化网络接口、分配IP地址、启用或禁用接口&#xff0c;同时还能查看接口的详细信息。 查看网络接口信息 # ifconfig eth0 …