xuxiuxi
2017-05-11 109ffe9a777658936a38d0c146579a67c60a0d17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
 
#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
);
 
/// @}
 
 
/// @defgroup cvface_verify cvface verify
/// @brief face verification interfaces
///
/// This set of interfaces processing face verification routines.
///
/// @{
 
/// @brief 创建人脸验证句柄
/// @param[out]    handle函数成功时被设置为有效的verify handle
/// @param[in]    model_path 模型库所在文件夹的绝对路径或相对路径(sdk中模型文件路径为sdk/models/verify.model"),不能为NULL
/// @return 返回CV_OK 失败返回错误码
CV_SDK_API
cv_result_t
cv_verify_create_handle(
    cv_handle_t* handle,
    const char *model_path
);
 
/// @brief 创建人脸验证句柄的副本,与旧的句柄共享内存,可用于多线程调用
/// @param[in]    old_handle 旧的人脸验证句柄,新句柄释放后才能释放旧句柄
/// @param[out]    new_handle 函数成功返回人脸验证句柄的副本
/// @return 成功返回CV_OK
CV_SDK_API
cv_result_t
cv_verify_duplicate_handle(
    cv_handle_t old_handle,
    cv_handle_t* new_handle
);
 
/// @brief 销毁已初始化的人脸验证句柄
/// @param[in] verify_handle 已初始化的人脸验证句柄
CV_SDK_API
void
cv_verify_destroy_handle(
    cv_handle_t verify_handle
);
 
/// @brief 获取当前人脸验证使用的模型版本号
/// @param[in] verify_handle 人脸验证句柄
/// @return 版本号
CV_SDK_API
int
cv_verify_get_version(
    cv_handle_t verify_handle
);
 
/// @brief 获取当前人脸验证使用的模型提取的feature长度,不包含cv_feature_header_t的长度
/// @param[in] verify_handle 人脸验证句柄
/// @return 特征长度
CV_SDK_API
int
cv_verify_get_feature_length(
    cv_handle_t verify_handle
);
 
/// @brief 提取人脸特征,返回特征数据长度,可以把返回数组编码成字符串后存储起来以便以后使用
/// @param[in]    verify_handle 已初始化的人脸验证句柄
/// @param[in]    image 用于检测的图像数据
/// @param[in]    piexl_format 用于检测的图像数据的像素格式
/// @param[in]    image_width 用于检测的图像的宽度(以像素为单位)
/// @param[in]    image_height 用于检测的图像的高度(以像素为单位)
/// @param[in]    image_stride 用于检测的图像中每一行的跨度(以像素为单位),图像跨度=图像宽度*图像维度
/// @param[in]    face 输入待处理的人脸信息,需要包括关键点信息,即 face.points_array 不为NULL
/// @param[out]    p_feature 人脸特征数据,需要调用cv_verify_release_feature函数释放
/// @param[out]    feature_blob_size 特征的长度,包含cv_feature_header_t的长度,与cv_feature_header_t->len一致
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_get_feature(
    cv_handle_t verify_handle,
    const unsigned char *image,
    cv_pixel_format pixel_format,
    int image_width,
    int image_height,
    int image_stride,
    const cv_face_t *face,
    cv_feature_t **p_feature,
    unsigned int *feature_blob_size
);
 
/// @brief 特征信息编码成字符串,编码后的字符串用于保存
/// @param[in]    feature 输入的特征信息
/// @param[out]    feature_str 输出的编码后的字符串,由用户分配和释放
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_serialize_feature(
    const cv_feature_t *feature,
    char *feature_str
);
 
 
/// @brief 解码字符串成特征信息
/// @param[in] feature_str 输入的待解码的字符串,api负责分配内存,需要调用cv_verify_release_feature释放
/// @return 返回解码后的feature, 需要用户使用 cv_common_feature_release() 释放
CV_SDK_API
cv_feature_t *
cv_verify_deserialize_feature(
    const char *feature_str
);
 
/// @brief 人脸验证
/// @param[in]    verify_handle 已初始化的人脸验证句柄
/// @param[in]    feature1 第一张人脸特征信息
/// @param[in]    feature2 第二张人脸特征信息
/// @param[out]    score 人脸验证相似度得分,范围0-1,得分越接近1越相似
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_compare_feature(
    cv_handle_t verify_handle,
    const cv_feature_t *feature1,
    const cv_feature_t *feature2,
    float *score
);
 
/// @brief 释放提取人脸特征时分配的空间
/// @param[in]  feature 提取到的人脸特征信息
CV_SDK_API
void
cv_verify_release_feature(
    cv_feature_t *feature
);
 
/// @}
 
 
/// @defgroup cvface_search cvface search
/// @brief face searching interfaces
///
/// This set of interfaces processing face search routines.
///
/// @{
 
/// @defgroup cvface_database cvface database for search
/// @ingroup cvface_search
/// @brief face database CURD interfaces for face searching
/// @{
 
/// @brief    创建人脸数据库句柄
/// @handle[out]    成功时候设置为人脸数据库句柄
/// @return[in]        成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_create_db(cv_handle_t *handle);
 
/// @brief 销毁已初始化的人脸数据库句柄
/// @param[in] db_handle 已初始化的人脸数据库句柄
CV_SDK_API
void
cv_verify_destroy_db(
    cv_handle_t db_handle
);
 
/// @brief 人脸数据库增加数据
/// @param[in] db_handle 已初始化的人脸数据库句柄
/// @param[in] items 用于创建数据库的人脸特征信息数组
/// @param[in] item_count 特征信息数量
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_build_db(
    cv_handle_t db_handle,
    cv_feature_t* const *items,
    unsigned int item_count
);
 
/// @brief 人脸数据库增加数据
/// @param[in]    db_handle 已初始化的人脸数据库句柄
/// @param[in]    item 待加入的人脸特征信息
/// @param[out]    idx 加入后的人脸数据库索引值
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_add_face(
    cv_handle_t db_handle,
    const cv_feature_t *item,
    int *idx
);
 
/// @brief 人脸数据库删除数据
/// @param[in]    db_handle 已初始化的人脸数据库句柄
/// @param[in]    idx 待删除的人脸数据库索引值(与加入时一致)
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_delete_face(
    cv_handle_t db_handle,
    int idx
);
 
/// @brief 将人脸数据库信息保存为数据库文件
/// @param[in] db_handle 已初始化的人脸数据库句柄
/// @param[in] db_path 人脸数据库保存文件的路径
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_save_db(
    cv_handle_t db_handle,
    const char *db_path
);
 
/// @brief 加载人脸数据库文件
/// @param[in] db_handle 已初始化的人脸数据库句柄
/// @param[in] db_path 人脸数据库保存文件的路径
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_load_db(
    cv_handle_t db_handle,
    const char *db_path
);
 
/// @}
 
/// @brief 搜索人脸数据库
/// @param[in]    verify_handle 已初始化的人脸验证句柄
/// @param[in]    db_handle 已初始化的人脸数据库句柄
/// @param[in]    query 待搜索的人脸特征信息
/// @param[in]    top_k 最大的人脸搜索数量
/// @param[out] top_idxs 搜索到的人脸数据库索引值数组(由用户分配和释放)
/// @param[out]    top_scores 搜索到的人脸相似度得分数组(由用户分配和释放),范围0-1,得分越接近1越相似
/// @param result_length 实际搜索到的人脸数量
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_search_face(
    cv_handle_t verify_handle,
    cv_handle_t db_handle,
    const cv_feature_t *query,
    unsigned int top_k,
    int *top_idxs,
    float *top_scores,
    unsigned int *result_length
);
 
/// @brief 从一组特征数组中搜索人脸
/// @param[in]    verify_handle 已初始化的人脸验证句柄
/// @param[in]    list_feature 人脸特征信息数组
/// @param[in]    list_count 人脸特征信息数量
/// @param[in]    query 待搜索的人脸特征信息
/// @param[in]    top_k 最大的人脸搜索数量
/// @param[out]    top_idxs 搜索到的人脸数据库索引值数组(由用户分配和释放)
/// @param[out]    top_scores 搜索到的人脸相似度得分数组(由用户分配和释放),范围0-1,得分越接近1越相似
/// @param[out]    result_length 实际搜索到的人脸数量
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_search_face_from_list(
    cv_handle_t verify_handle,
    cv_feature_t* const *list_feature,
    int list_count,
    const cv_feature_t *query,
    unsigned int top_k,
    int *top_idxs,
    float *top_scores,
    unsigned int *result_length
);
 
/// @}
 
 
/// @defgroup cvface_group cvface group
/// @brief face grouping interfaces
///
/// This set of interfaces processing face grouping routines.
///
/// @{
 
 
/// @brief 批量人脸分组
/// @param[in]    verify_handle 已初始化的人脸验证句柄
/// @param[in]    features 人脸特征信息数组
/// @param[in]    feature_count 人脸特征信息数量
/// @param[out]    p_groups_array 分组结果,index对应features的index,p_groups_array[0]表示index为0的feature对应的分组,内存由用户管理,p_groups_array大小与feature_count一致
/// @param[out]    group_count 分组的组数,需用户初始化为0
/// @return 成功返回CV_OK,否则返回错误类型
CV_SDK_API
cv_result_t
cv_verify_grouping(
    cv_handle_t verify_handle,
    const cv_feature_t * const *features,
    unsigned int feature_count,
    unsigned int *p_groups_array,
    unsigned int *groups_count
);
 
/// @brief 初始化特征数组结果
/// @param[in] p_groups_array    特征分组结果存储地址
/// @param[in] feature_count    特征数组长度
CV_SDK_API
void
cv_verify_initialize_labels(
    unsigned int *p_groups_array,
    unsigned int feature_count
);
 
/// @}
 
 
/// @defgroup cvface_group cvface group
/// @brief face grouping interfaces
///
/// This set of interfaces processing face grouping routines.
///
/// @{
 
/// @brief 创建特征聚类句柄
/// @param[out] handle 输出已初始化的特征聚类句柄所在地址
/// @param[in] model 载入的模型路径
/// @return 成功返回CV_OK, 否则返回错误信息
CV_SDK_API
cv_result_t
cv_face_create_clustering(
cv_handle_t *clustering_handle,
const char* model_path
);
 
/// @brief 特征聚类(包含增量聚类)
/// @param[in] handle 已初始化的特征聚类句柄
/// @param[in] features 待聚类的特征数组
/// @param[out] labels 类别数组, 0表示需要重新聚类,1表示是单张人脸(当人脸数量大于等于2是才会单独分组),2表示噪音(模糊、侧脸、不是人脸等),3及其以上表示实际分类结果
/// @param[out] size 特征和类别的数量
/// @return 成功返回CV_OK, 否则返回错误类型
CV_SDK_API
cv_result_t
cv_face_clustering(
cv_handle_t clustering_handle,
const cv_feature_t * const *features,
unsigned int *labels,
int size
);
 
 
/// @brief 销毁已初始化的特征聚类句柄
/// @param[in] handle 已初始化的特征聚类句柄
CV_SDK_API
void
cv_face_clustering_destroy(
cv_handle_t clustering_handle
);
 
/// @}
 
 
#endif  // INCLUDE_CVFACE_API_CV_FACE_H_