You need to enable JavaScript to run this app.
导航
人脸检测(FaceDetect)
最近更新时间:2025.03.14 10:07:19首次发布时间:2025.03.14 10:07:19
我的收藏
有用
有用
无用
无用
1.初始化
HeidiFaceDetectCreateHandle(unsigned long long config, const char *param_path, HeidiHandle *handle);

参数说明

参数名参数类型参数说明
configunsigned long long人脸检测算法的配置
strModelPathconst char *模型文件所在路径
handleHeidiHandle*句柄

返回值
成功返回 HEIDI_CODE_SUC, 失败返回相应错误码, 具体请参考 HeidiPublicDefines.h
备注
人脸检测算法的可配置选项如下
● 设置模型类型
我们目前只提供小模型一种模型,且该选项必须设置。

符号数值含义
HEIDI_INIT_SMALL_MODEL0x00200000faster detection algorithm 更快

● 设置检测模式
检测模式分为视频检测和图片检测两类,其中图片检测模式分为普通模式和高级模式,高级模式相比普通模式检测效果更好,能检测到更小的人脸,但相应耗时会增加。检测模式选项如下表所示。如果没有设置,默认检测模式为BEF_DETECT_MODE_VIDEO。

符号数值含义
HEIDI_MOBILE_DETECT_MODE_VIDEO0x00020000video detect, 视频检测
HEIDI_MOBILE_DETECT_MODE_IMAGE0x00040000image detect, 图片检测
HEIDI_MOBILE_DETECT_MODE_IMAGE_SLOW0x00080000效果更好的图片检测模式,能检测更小的人脸

● 设置可检测的特征
可检测的人脸特征选项如下表所示。

符号数值含义
HEIDI_MOBILE_FACE_DETECT0x00000001106 key points face detect, 106 点人脸检测
HEIDI_MOBILE_EYE_BLINK0x00000002眨眼
HEIDI_MOBILE_MOUTH_AH0x00000004mouth open, 嘴巴大张
HEIDI_MOBILE_HEAD_YAW0x00000008shake head, 摇头
HEIDI_MOBILE_HEAD_PITCH0x00000010nod, 点头
HEIDI_MOBILE_BROW_JUMP0x00000020wiggle eyebrow, 眉毛挑动
HEIDI_MOBILE_MOUTH_POUT0x00000040嘴巴嘟嘴
HEIDI_MOBILE_DETECT_FULL0x0000007F检测上面所有的特征

创建人脸检测句柄时,config = 模型类型(必须设置)|检测模式(缺省值为缺省值为HEIDI_MOBILE_DETECT_MODE_VIDEO)|可检测的特征(必须设置)

2.人脸检测授权
int HeidiFaceDetectCheckLicense(HeidiHandle handle, const char* licensePath);

参数说明

参数名参数类型参数说明
handleHeidiHandle已创建的人脸检测句柄
licensePathconst char *授权文件路径

返回值
成功返回 HEIDI_CODE_SUC, 失败返回相应错误码, 具体请参考 HeidiPublicDefines.h

3.设置人脸检测240/280关键点模型
int HeidiFaceDetectAddExtraModel(HeidiHandle handle, unsigned long long config, const char *param_path);

参数说明

参数名参数类型参数说明
handleHeidiHandle已创建的人脸检测句柄
configunsigned long long指定240模型的模型参数,创建240或者280
param_pathconst char *模型的文件路径

返回值
成功返回 HEIDI_CODE_SUC, 失败返回相应错误码, 具体请参考 HeidiPublicDefines.h
备注
设置人脸检测240/280关键点检测模型时,使用的是步骤1中创建的106关键点检测的handle,240/280关键点是基于106关键点检测结果的扩展。
config可以设置的值有

// Config-240,HEIDI_MOBILE_FACE_240_DETECT
// Config-280,HEIDI_MOBILE_FACE_280_DETECT
// Config-240 快速模式, HEIDI_MOBILE_FACE_240_DETECT | HEIDI_MOBILE_FACE_240_DETECT_FASTMODE
// Config-280 快速模式, HEIDI_MOBILE_FACE_280_DETECT | HEIDI_MOBILE_FACE_240_DETECT_FASTMODE

4.设置人脸检测参数
int HeidiFaceDetectSetParam(HeidiHandle handle, HeidiFsFaceParamType type,
                            float value);

参数说明

参数名参数类型参数说明
handleHeidiHandle已创建的人脸检测句柄
typeHeidiFsFaceParamType需要设置的人脸检测类型
valuefloat具体设置的值

返回值
成功返回 HEIDI_CODE_SUC, 失败返回相应错误码, 具体请参考 HeidiPublicDefines.h

5.检测人脸关键点

人脸关键点检测结果定义在FaceDetect.h中,具体如下:

// 眼睛,眉毛,嘴唇详细检测结果, 280点结果
typedef struct HeidiAiFaceExtInfo {
   int eye_count;                  // 检测到眼睛数量
   int eyebrow_count;              // 检测到眉毛数量
   int lips_count;                 // 检测到嘴唇数量
   int iris_count;                 // 检测到虹膜数量
  
   Point eye_left[22];        // 左眼关键点
   Point eye_right[22];       // 右眼关键点
   Point eyebrow_left[13];    // 左眉毛关键点
   Point eyebrow_right[13];   // 右眉毛关键点
   Point lips[64];            // 嘴唇关键点
   Point left_iris[20];       // 左虹膜关键点
   Point right_iris[20];      // 右虹膜关键点
} HeidiAiFaceExtInfo;


// 供106点使用
typedef struct HeidiAiFace106 {
   Rect rect;                // 代表面部的矩形区域
   float score;                  // 置信度
   Point points_array[106]; // 人脸106关键点的数组
   float visibility_array[106];  // 对应点的能见度,点未被遮挡1.0, 被遮挡0.0
   float yaw;                    // 水平转角,真实度量的左负右正
   float pitch;                  // 俯仰角,真实度量的上负下正
   float roll;                   // 旋转角,真实度量的左负右正
   float eye_dist;               // 两眼间距
   int ID;                       // faceID: 每个检测到的人脸拥有唯一的faceID.人脸跟踪丢失以后重新被检测到,会有一个新的faceID
   unsigned int action;          // 动作, 定义在bef_ai_effect_face_detect.h 
   unsigned int tracking_cnt;
} HeidiAiFace106, *pHeidiAiFace106;


// @brief 检测结果
typedef struct HeidiAiFaceInfo {
   HeidiAiFace106 base_infos[HEIDI_MAX_FACE_NUM];          // 检测到的人脸信息
   HeidiAiFaceExtInfo extra_infos[HEIDI_MAX_FACE_NUM];    // 眼睛,眉毛,嘴唇关键点等额外的信息
   int face_count;                                     // 检测到的人脸数目
} HeidiAiFaceInfo, *pHeidiAiFaceInfo;

人脸关键点检测调用如下接口:

int HeidiFaceDetect(
        HeidiHandle handle,
        const unsigned char *image,
        ColorSpaceType pixel_format,
        int image_width,
        int image_height,
        int image_stride,
        ClockwiseRotateType orientation,
        unsigned long long detect_config,
        HeidiAiFaceInfo *p_face_info
);

参数说明

参数名参数类型参数说明
handleHeidiHandle已创建的人脸检测句柄
imageconst unsigned char *输入图片的数据指针
pixel_formatColorSpaceType输入图片的格式
image_widthint输入图像的宽度 (以像素为单位)
image_heightint输入图像的高度 (以像素为单位)
image_strideint输入图像每一行的步长 (以像素为单位)
orientationClockwiseRotateType输入图像的转向,具体请参考 bef_effect_ai_public_define.h 中的 bef_rotate_type
detect_configunsigned long long人脸检测相关的配置,例如HEIDI_MOBILE_FACE_DETECT | HEIDI_MOBILE_DETECT_EYEBALL
p_face_infoHeidiAiFaceInfo *接受人脸检测结果

返回值
成功返回 HEIDI_CODE_SUC, 失败返回相应错误码, 具体请参考 HeidiPublicDefines.h

6.销毁人脸检测句柄
int HeidiFaceDetectReleaseHandle(HeidiHandle handle);

参数说明

参数名参数类型参数说明
handleHeidiHandle已创建的人脸检测句柄