【關注我,后續持續新增專題博文,謝謝!!!】
上一篇我們講了:
? ? ? ? 這一篇我們開始講:?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); ///<解密響應失敗
【關注我,后續持續新增專題博文,謝謝!!!】
下一篇講解: