#ifndef INCLUDE_CVFACE_API_CV_FACE_EXTERNAL_H_ #define INCLUDE_CVFACE_API_CV_FACE_EXTERNAL_H_ #include "cv_common.h" /// @defgroup cvface_common cvface common /// @brief Common definitions for cvface /// @{ /// @brief 人脸信息结构体 typedef struct cv_face_t { cv_rect_t rect; ///< 代表面部的矩形区域 float score; ///< 置信度,用于筛除负例,与人脸照片质量无关,值越高表示置信度越高。 int points_count; ///< 人脸关键点数组的长度,如果没有计算关键点,则为0 float yaw; ///< 水平转角,真实度量的左负右正 float pitch; ///< 俯仰角,真实度量的上负下正 float roll; ///< 旋转角,真实度量的左负右正 float eye_dist; ///< 两眼间距 int ID; ///< faceID,用于表示在实时人脸跟踪中的相同人脸在不同帧多次出现,在人脸检测的结果中无实际意义 cv_pointf_t points_array[256]; ///< 人脸关键点的数组支持21点,106点,以及为将来预留的空间 } cv_face_t; /// 人脸检测、跟踪配置选项 #define CV_FACE_DEFAULT_CONFIG 0x00000000 ///< 默认选项,不设置任何开关 #define CV_FACE_RESIZE_IMG_320W 0x00000002 ///< resize图像为长边320的图像 #define CV_FACE_RESIZE_IMG_640W 0x00000004 ///< resize图像为长边640的图像 #define CV_FACE_RESIZE_IMG_1280W 0x00000008 ///< resize图像为长边1280的图像 /// detect config flags, 0x----00-- ~ 0x----FF-- #define CV_DETECT_ENABLE_ALIGN_21 0x00000100 ///< 开启面部关键21点检测选项 #define CV_DETECT_ENABLE_ALIGN_106 0x00000200 ///< 开启面部关键106点检测选项 /// 该版本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; /// @brief 输出当前SDK所支持的算法及内置模型信息 CV_SDK_API void cv_face_algorithm_info(); /// @brief 手动加载license文件,除IOS,Android平台外,都可以不主动调用此函数(但需要将license文件放在可执行程序同一目录,名称命名为license.lic),该函数只能被成功调用一次 /// param[in] szLicense 授权文件中的字符串,license文件的全部内容 CV_SDK_API cv_result_t cv_face_init_license_config(const char* szLicense); /// @defgroup cvface_detect cvface detect /// @brief face position detection interfaces /// /// This set of interfaces processing face position & 21 or 106 points landmark detection routines /// /// @{ /// @brief 创建人脸检测句柄 /// @param[out] handle函数成功时被设置为有效的detector handle /// @param[in] model_path 模型文件的绝对路径或相对路径,若不指定模型可为NULL /// @param[in] config 配置选项,默认配置为CV_DETECT_ENABLE_ALIGN_21(21关键点检测)。支持106关键点检测CV_DETECT_ENABLE_ALIGN_106和自动缩放CV_FACE_RESIZE_IMG_XXXX。 /// @return 返回CV_OK 失败返回错误码 CV_SDK_API cv_result_t cv_face_create_detector( cv_handle_t *handle, const char *model_path, unsigned int config ); /// @brief 获取当前人脸检测的默认阀值 /// @param[in] handle 人脸检测句柄 /// @param[out] threshold 人脸检测的默认阀值 CV_SDK_API cv_result_t cv_face_detect_get_threshold( cv_handle_t detector_handle, float *threshold ); /// @brief 设置当前人脸检测的阀值,需要在调用cv_face_detect之前调用此函数,阈值需大于0,设置后调用cv_face_detect_get_threshold为新设置后的值) /// @param[in] handle 人脸检测句柄 /// @param[in] threshold 人脸检测新阀值 CV_SDK_API cv_result_t cv_face_detect_set_threshold( cv_handle_t detector_handle, float threshold ); /// @brief 销毁已初始化的人脸检测句柄 /// @param[in] detector_handle 已初始化的人脸检测句柄 CV_SDK_API void cv_face_destroy_detector( cv_handle_t detector_handle ); /// @brief 人脸检测 /// @param[in] detector_handle 已初始化的人脸检测句柄 /// @param[in] image 用于检测的图像数据 /// @param[in] piexl_format 用于检测的图像数据的像素格式 /// @param[in] image_width 用于检测的图像的宽度(以像素为单位) /// @param[in] image_height 用于检测的图像的高度(以像素为单位) /// @param[in] image_stride 用于检测的图像中每一行的跨度(以像素为单位) 图像跨度=图像宽度*图像维度 /// @param[in] orientation 图片中人脸的方向 /// @param[out] p_faces_array 检测到的人脸信息数组,api负责分配内存,需要调用cv_face_release_detector_result函数释放 /// @param[out] p_faces_count 检测到的人脸数量 /// @return 成功返回CV_OK,否则返回错误类型 CV_SDK_API cv_result_t cv_face_detect( cv_handle_t detector_handle, const unsigned char *image, cv_pixel_format pixel_format, int image_width, int image_height, int image_stride, cv_face_orientation orientation, cv_face_t **p_faces_array, int *p_faces_count ); /// @brief 释放人脸检测返回结果时分配的空间 /// @param[in] faces_array 检测到的人脸信息数组 /// @param[in] faces_count 检测到的人脸数量 CV_SDK_API void cv_face_release_detector_result( cv_face_t *faces_array, int faces_count ); /// @} /// @defgroup cvface_track cvface track /// @brief face tracking interfaces /// /// This set of interfaces processing face tracking routines /// /// @{ #define CV_FACE_TRACKING_TWO_THREAD 0x00110000 ///< 开启双线程人脸跟踪,建议低配置环境开启此选项。 /// @brief 创建实时人脸跟踪句柄。可以调用cv_face_track_set_detect_face_cnt_limit设置检测的最大人脸数目,默认为不限制人脸检测数量。 /// @param[out] handle函数成功时被设置为有效的tracker handle /// @param[in] model_path 模型文件的绝对路径或相对路径,若不指定模型可为NULL /// @param[in] config 默认配置为CV_DETECT_ENABLE_ALIGN_21(21关键点检测)。支持106关键点检测CV_DETECT_ENABLE_ALIGN_106、自动缩放CV_FACE_RESIZE_IMG_XXXX和双线程跟踪CV_FACE_TRACKING_TWO_THREAD。 /// @return 返回CV_OK 失败返回错误码 CV_SDK_API cv_result_t cv_face_create_tracker( cv_handle_t *handle, const char *model_path, unsigned int config ); /// @brief 销毁已初始化的实时人脸跟踪句柄 /// @param[in] tracker_handle 已初始化的实时人脸跟踪句柄 CV_SDK_API void cv_face_destroy_tracker( cv_handle_t tracker_handle ); /// @brief 对连续视频帧进行实时快速人脸跟踪 /// @param[in] tracker_handle 已初始化的实时人脸跟踪句柄 /// @param[in] image 用于检测的图像数据 /// @param[in] piexl_format 用于检测的图像数据的像素格式 /// @param[in] image_width 用于检测的图像的宽度(以像素为单位) /// @param[in] image_height 用于检测的图像的高度(以像素为单位) /// @param[in] image_stride 用于检测的图像中每一行的跨度(以像素为单位),图像跨度=图像宽度*图像维度 /// @param[in] orientation 视频中人脸的方向 /// @param[out] p_faces_array 检测到的人脸信息数组,api负责分配内存,需要调用cv_facesdk_release_tracker_result函数释放 /// @param[out] p_faces_count 检测到的人脸数量 /// @return 成功返回CV_OK,否则返回错误类型 CV_SDK_API cv_result_t cv_face_track( cv_handle_t tracker_handle, const unsigned char *image, cv_pixel_format pixel_format, int image_width, int image_height, int image_stride, cv_face_orientation orientation, cv_face_t **p_faces_array, int *p_faces_count ); /// @brief 重置人脸跟踪检测器 /// @param[in] tracker_handle 已初始化的实时人脸跟踪句柄 CV_SDK_API void cv_face_reset_tracker( cv_handle_t tracker_handle ); /// @brief 释放实时人脸跟踪返回结果时分配的空间 /// @param[in] faces_array 检测到的人脸信息数组 /// @param[in] faces_count 检测到的人脸数量 CV_SDK_API void cv_face_release_tracker_result( cv_face_t *faces_array, int faces_count ); /// @brief 设置检测到的最大人脸数目N,持续track已检测到的N个人脸直到人脸数小于N再继续做detect,如果未调用则不对检测人脸数量做限制 /// @param[in] tracker_handle 已初始化的实时人脸跟踪句柄 /// @param[in] detect_face_cnt_limit 最大人脸数目N,-1表示不设上限 /// @param[out] val 如果为非空指针,则返回采用的新的值,注意,由于内部的限制, 实际采用的值并不一定等于detect_face_cnt_limit /// @return 成功返回CV_OK,否则返回错误类型 (实际设置检测到的最大目标数目N可能小于detect_face_cnt_limit) CV_SDK_API cv_result_t cv_face_track_set_detect_face_cnt_limit( cv_handle_t tracker_handle, int detect_face_cnt_limit, int* val ); /// @} #endif // INCLUDE_CVFACE_API_CV_FACE_H_