|
#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_
|