一.rockx人脸检测使用的API

rockx框架提供了一系列的人脸识别、检测的API,开发者使用它的API能够快速开发出人脸相关的功能。我们来看看在人脸检测中需要用到的API。

1.1.rockx_create函数的定义

rockx_ret_t rockx_create(rockx_handle_t *handle, rockx_module_t m, void *config, size_t config_size);

函数解释:rockx_create创建rockx的句柄rockx_handle_trockx_handle_t也是管理整个rockx人脸检测、人脸识别的最重要结构体

第一个参数:rockx_handle_t的结构体指针

第二个参数:rockx_module_t的结构体,rockx_module_t是一个枚举类型,设置当前rockx的处理类型。具体的如下:

typedef enum {
    ROCKX_MODULE_FACE_DETECTION      = 1,    ///< Face Detection with 320x320 input: retinaface, pure u8-quant,with same mean value(117)
    ROCKX_MODULE_FACE_LANDMARK_68    = 2,    ///< Face Landmark (68 KeyPoints)
    ROCKX_MODULE_FACE_RECOGNIZE      = 3,    ///< Face Recognition
    ROCKX_MODULE_FACE_ANALYZE        = 4,    ///< Face Attribute(Gender and Age) Analyze
    ROCKX_MODULE_OBJECT_DETECTION    = 5,    ///< Object Detection(91 Classes)
    ROCKX_MODULE_POSE_BODY           = 6,    ///< Body Pose(14 KeyPoints)
    ROCKX_MODULE_POSE_FINGER_21      = 7,    ///< Finger Landmark(21 KeyPoint)
    ROCKX_MODULE_FACE_LANDMARK_5     = 8,    ///< Face Landmark(5 KeyPoints)
    ROCKX_MODULE_HEAD_DETECTION      = 9,    ///< Head Detection
    ROCKX_MODULE_CARPLATE_DETECTION  = 10,   ///< Car Plate Detection
    ROCKX_MODULE_CARPLATE_ALIGN      = 11,   ///< Car Plate Correct Alignment
    ROCKX_MODULE_CARPLATE_RECOG      = 12,   ///< Car Plate Recognition
    ROCKX_MODULE_OBJECT_TRACK        = 13,   ///< Object Track
    ROCKX_MODULE_POSE_FINGER_3       = 14,   ///< Finger Landmark(3 KeyPoint)
    ROCKX_MODULE_FACE_MASKS_DETECTION = 16,  ///< Face Mask Detection
    ROCKX_MODULE_FACE_DETECTION_V2   = 18,   ///< Face Detection V2
    ROCKX_MODULE_BODY_MASK           = 19,   ///< Body mask
    ROCKX_MODULE_POSE_BODY_V2        = 20,   ///< Body Pose(17 KeyPoints)
    ROCKX_MODULE_FACE_DETECTION_V3   = 22,   ///< Face Detection with 320x320 input: retinaface, input/output node is uint8,others is int16
    ROCKX_MODULE_FACE_DETECTION_V3_LARGE    = 23,   ///< Face Detection with 640x640 input
    ROCKX_MODULE_PERSON_DETECTION           = 24,   ///< Person Detection with 320x320 input
    ROCKX_MODULE_FACE_LANDMARK_106          = 25,   ///< Face Landmark(106 KeyPoints)
    ROCKX_MODULE_FACE_BEAUTY                = 26,   ///< Face beauty score
    ROCKX_MODULE_FACE_SMILE_DETECT          = 27,   ///< Face Smile Detect
    ROCKX_MODULE_FACE_MASK_CLASSIFIER       = 28,   ///< FACE Mask Classifier
    ROCKX_MODULE_PERSON_DETECTION_V2        = 29,   ///< Person Detection with input: 532X320
    ROCKX_MODULE_PERSON_DETECTION_V3        = 30,   ///< Person Detection
} rockx_module_t;

ROCKX_MODULE_FACE_DETECTION人脸检测模块

ROCKX_MODULE_FACE_LANDMARK_68人脸68个特征点检测   

ROCKX_MODULE_FACE_RECOGNIZE人脸识别模块     

ROCKX_MODULE_FACE_ANALYZE:  人脸分析模块       

ROCKX_MODULE_OBJECT_DETECTION目标检测模块    

ROCKX_MODULE_POSE_BODY人体姿态检测模块,14个关键点          

ROCKX_MODULE_POSE_FINGER_21手指检测模块,21个关键点

ROCKX_MODULE_FACE_LANDMARK_5人脸5个特征点检测     

ROCKX_MODULE_HEAD_DETECTION 人体头部检测模块

ROCKX_MODULE_CARPLATE_DETECTION 车牌检测模块  

ROCKX_MODULE_CARPLATE_ALIGN车牌对齐模块

ROCKX_MODULE_CARPLATE_RECOG车牌识别模块     

ROCKX_MODULE_OBJECT_TRACK物体追踪模块       

ROCKX_MODULE_POSE_FINGER_3手指检测模块, 支持3个关键点     

ROCKX_MODULE_FACE_MASKS_DETECTION人脸口罩检测,检测这个人是否戴口罩

ROCKX_MODULE_FACE_DETECTION_V2人脸检测模块,Version2版本

ROCKX_MODULE_BODY_MASK人体身体遮挡检测,主要是检测当前人体是否有遮挡物         

ROCKX_MODULE_POSE_BODY_V2人体姿态检测,V2是Version2,最多能够检测17个关键点     

ROCKX_MODULE_FACE_DETECTION_V3人脸检测模块,V3是Version3,它只能检测320 * 320的人脸

 ROCKX_MODULE_FACE_DETECTION_V3_LARGE人脸检测模块加强版,V3是Version3,Large能够检测640 * 640的人脸

 ROCKX_MODULE_PERSON_DETECTION行人检测模块,主要是检测当前图像中是否有行人      

 ROCKX_MODULE_FACE_LANDMARK_106人脸关键点检测模型,总共能检测出106个关键点         

 ROCKX_MODULE_FACE_BEAUTY人脸漂亮指数检测模型,主要是检测人的漂亮指数是多少            

 ROCKX_MODULE_FACE_SMILE_DETECT人脸微笑检测模型,检测当前人是否微笑         

 ROCKX_MODULE_FACE_MASK_CLASSIFIER人脸口罩分类检测模型,主要是检测当前口罩的类型是什么      

 ROCKX_MODULE_PERSON_DETECTION_V2行人检测模型V2是Version2,它只能检测532 * 320的行人图像       

 ROCKX_MODULE_PERSON_DETECTION_V3行人检测模型,V3是Version3,它可以检测多尺寸的行人图像

第三个参数:rockx_config_t结构体指针,主要是配置rockx的基本参数,它的创建是用rockx_add_config来创建

第四个参数:config_size,默认是0就可以

第三个参数:rockx_config_t结构体指针,主要是配置rockx的基本参数,它的创建是用rockx_add_config来创建

第四个参数:config_size,默认是0就可以

​​​​​​​1.2.rockx_add_config函数的定义

rockx_ret_t rockx_add_config(rockx_config_t *config, const char *key, const char *value);

函数解释:添加rockx的config配置

第一个参数:rockx_config_t结构体指针,rockx_config_t的创建是用rockx_create_config来分配,如:rockx_config_t *config = rockx_create_config();

第二个参数:config的key, 最常见的KEY是ROCKX_CONFIG_DATA_PATH(ROCKX的配置路径)

第三个参数:config的value, 跟Key一一对应, 比方说Key是ROCKX_CONFIG_DATA_PATH, 那它的value就是对应的rockx的具体路径,如:/userdata/rockx_data/。

示例:

rockx_config_t *config = rockx_create_config();

rockx_add_config(config, ROCKX_CONFIG_DATA_PATH, "/userdata/rockx_data/");

​​​​​​​1.3.rockx_face_detect函数的定义

函数解释:这个API主要是对人脸进行检测,得到人脸检测的位置信息

rockx_ret_t rockx_face_detect(rockx_handle_t handle, rockx_image_t *in_img, rockx_object_array_t *face_array, rockx_async_callback *callback);

第一个参数:rockx_handle_t的结构体指针

第二个参数:rockx_image_t的结构体指针,这个是输入的图像,需要检测的图像,也可以是每一帧视频流。

第三个参数:rockx_object_array_t的结构体指针,主要是输出检测结果,这个检测结果的结构体如下:

typedef struct rockx_object_array_t {
    int count;                  ///< Array Count(0 <= count < 128)
    rockx_object_t object[128]; ///< Objects
} rockx_object_array_t;

count:检测的人脸数量

rockx_object_t检测的具体信息,具体的成员变量如下:

typedef struct rockx_object_t {
    int id;                 ///< Track id
    int cls_idx;            ///< Class index
    rockx_rect_t box;       ///< Object Region
    float score;            ///< Object confidence score
} rockx_object_t;

id:object的id号
cls_idx:object的index索引
box:rockx的区域信息,rockx_rect_t结构体。

typedef struct rockx_rect_t {
    int left;       ///< Most left coordinate
    int top;        ///< Most top coordinate
    int right;      ///< Most right coordinate
    int bottom;     ///< Most bottom coordinate
} rockx_rect_t;

left:区域左边缘的x坐标,其实就是x轴数据

top: 区域顶的y坐标,其实就是Y轴数据

right:区域右边缘的x坐标,其实就是left + width

bottom:区域底的Y坐标,其实就是 top + height

score:object物体信任分数(根据经验值去填)

第四个参数:config_size默认是0就可以

​​​​​​​1.4.rockx_face_recognize函数的定义

函数定义:这个API主要是对人脸进行识别,并提取人脸数据

rockx_ret_t rockx_face_recognize(rockx_handle_t handle, rockx_image_t *in_img, rockx_face_feature_t *out_feature);

第一个参数:rockx_handle_t的结构体指针

第二个参数:rockx_image_t的结构体指针,这个是输入的图像,需要检测的图像,也可以是每一帧视频流。

第三个参数:rockx_face_feature_t的结构体指针,rockx_face_feature_t结构体主要是存储人脸的特征值和长度,我们来看看这个结构体的组成

typedef struct rockx_face_feature_t {
    int version;            ///< Face recognition algorithm version
    int len;                ///< Feature length
    float feature[512];     ///< Feature data
} rockx_face_feature_t;

version:人脸识别版本

len:人脸识别的长度

feature[512]:人脸识别的数据,512的float数组,这个值是存储一个二进制数据

​​​​​​​1.5.rockx_face_feature_similarity函数的定义

函数的定义:这个API主要是对比两个人脸,并计算两个人脸的对比数值

rockx_ret_t rockx_face_feature_similarity(rockx_face_feature_t *in_feature1, rockx_face_feature_t *in_feature2, float *out_similarity);

第一个参数:in_feature1,需要对比的人脸特征值1

第一个参数:in_feature2,需要对比的人脸特征值2

第三个参数:in_feature1和in_feature2对比的相似度值,一般小于1.0可以判断为同一个人

​​​​​​​1.6.rockx_face_align函数的定义

函数的定义:这个API主要是对目前检测的人脸进行对齐,这个对齐一般是用face_landmark检测人脸关键点进行对齐

rockx_ret_t rockx_face_align(rockx_handle_t handle, rockx_image_t *in_img, rockx_rect_t *in_box, rockx_face_landmark_t *in_landmark, rockx_image_t *out_img);

第一个参数:rockx_handle_t的结构体

第二个参数:in_img输入的图像

第三个参数:in_box是人脸检测的区域,用矩形来表示,我们来看看rockx_rect_t的结构体成员变量

typedef struct rockx_rect_t {
    int left;       ///< Most left coordinate
    int top;        ///< Most top coordinate
    int right;      ///< Most right coordinate
    int bottom;     ///< Most bottom coordinate
} rockx_rect_t;

left:表示矩形左边缘的X坐标。

top:表示矩形顶部的y坐标

right:表示矩形右边缘的x坐标

bottom:表示矩形底部的y坐标。

第四个参数:rockx_face_landmark_t 的结构体指针,主要是检测人脸关键点,我们来看看这个结构体的成员变量

第五个参数:out_image是输出后的图像,经过人脸对齐后的图像

typedef struct rockx_face_landmark_t {
    int image_width;                ///< Input image width
    int image_height;               ///< Input image height
    rockx_rect_t face_box;          ///< Face region
    int landmarks_count;            ///< Landmark points count
    rockx_point_t landmarks[128];   ///< Landmark points
    float score;                    ///< Score (Only 5 points has score)
} rockx_face_landmark_t;

image_width:图像的长度

image_height:图像的高度

face_box:人脸的检测区域,用矩形表示
landmarks_count:关键点个数

landmarks[128]:具体的人脸关键点,rockx_point_t来表示,它本质上就是x,y的点

typedef struct rockx_point_t {
    int x;      ///< X Coordinate
    int y;      ///< Y Coordinate
} rockx_point_t;

​​​​​​​1.7.rockx_face_filter函数的定义

函数的定义:这个API主要是过滤人脸,过滤图像中不符合人脸的图像

rockx_ret_t rockx_face_filter(rockx_handle_t handle, rockx_image_t *in_img, rockx_rect_t *in_box, int *is_false_face);

第一个参数:rockx_handle_t的结构体指针

第二个参数:in_img是输入的图像

第三个参数:in_box人脸检测区域,是一个矩形

第四个参数:is_falas_face判断当前检测的图像是否是人脸,是人脸就等于true,否则false

​​​​​​​1.8.rockx_face_masks_detect函数的定义

函数解释:这个API主要是检测当前人脸是否有戴口罩

rockx_ret_t rockx_face_masks_detect(rockx_handle_t handle, rockx_image_t *in_img, rockx_face_mask_array_t *face_mask_array,rockx_async_callback *callback);

第一个参数:rockx_handle_t的结构体指针

第二个参数:in_img是输入的图像

第三个参数:face_mask_array存放口罩的数据,我们来看看这个结构体的数据

typedef struct rockx_face_mask_array_t {
    int count;                                  ///< Face masks count
    rockx_face_mask_t face_masks[128];          ///< Face masks
} rockx_face_mask_array_t;

第一个参数:count,口罩的数量

第二个参数:rockx_face_mask_t,具体的口罩参数,如下

typedef struct rockx_face_mask_t {
    rockx_rect_t face_box;          ///< Face region
    float mask_score;               ///< Mask score
    int hasMask;                  ///< Mask flag
} rockx_face_mask_t;

第一个参数:face_box是口罩的区域,用矩形表示

第二个参数:mask_score,口罩的分数

第三个参数:hasMask,是否有戴口罩

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐