Camera相机人脸识别系列专题分析之十六:人脸特征检测FFD算法之libcvface_api.so数据结构详细注释解析
【关注我,后续持续新增专题博文,谢谢!!!】
上一篇我们讲了:
这一篇我们开始讲: 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); ///<解密响应失败
【关注我,后续持续新增专题博文,谢谢!!!】
下一篇讲解: