以下描述了如何使用灵云AFR能力。
1. AFR简介
AFR 人脸识别能力,对图像中的人脸进行检测、注册,支持对未知图像人脸的的确认和辨识。
2. 选择模块和能力
灵云可以提供人脸识别能力。 无论使用云端或本地端的人脸识别能力,基础模块 hci_afr都是需要的。 使用云端能力时,需要加上hci_afr_cloud_recog模块; 使用本地能力时,需要加上hci_afr_local_recog模块。
3. 人脸检测
通过对会话图像进行检测,提取其中的人脸特征。
示例代码如下:
char *filename = "face.jpg";
{
printf("failed to set image.\n");
break;
}
err_code =
hci_afr_detect(session_id, session_config.c_str(), &result);
{
printf("failed to detect face from image.\n");
break;
}
4. 人脸注册
接口中的人脸ID(faceId),由同一会话中的检测接口返回。 使用云端能力,调用hci_afr_enroll接口进行注册时,用户唯一标识可以由服务端产生,也可以由用户自己指定,必须要保证该标识的唯一性。 使用本地能力,调用hci_afr_enroll接口进行注册时,用户唯一标识由用户指定(应用层维护用户标识),需要保证该标识的唯一性。 注册成功后,可以对该人脸模型进行多次训练。
示例代码如下:
string session_config = "capkey=" + capkey;
string enrollConfig;
enrollConfig += ",faceid=" + faceId;
printf("hci_afr_enroll config [%s]\n", enrollConfig.c_str());
err_code =
hci_afr_enroll(session_id,enrollConfig.c_str(),&enrollResult);
{
break;
}
5. 人脸确认
接口中的人脸ID(faceId),由同一会话中的检测接口返回。 使用人脸ID与已注册的用户ID的特征进行匹配性确认。确认时可以设置阈值(threshold)。
示例代码如下:
string session_config = "capkey=";
session_config += capkey;
string verify_config = "userid=" + userId;
verify_config += ",faceid=" + faceId;
printf("hci_afr_verify config [%s]\n", verify_config.c_str());
err_code =
hci_afr_verify(session_id, verify_config.c_str(), &verifyResult);
{
}
printf( "hci_afr_verify success\n" );
{
printf( "voice data matches with user id:%s!\n",userId.c_str() );
printf("the result score is :%d \n",verifyResult.uiScore);
}
else
{
printf("voice data doesn't match with user id:%s !\n",userId.c_str());
}
6. 人脸辨识
接口中的人脸ID(faceId),由同一会话中的检测接口返回。 待辨识用户ID需要加入加入用户组(hci_add_user)。 不需要继续辨识的用户ID需要从用户组删除(hci_remove_user)。 对于云端识别,可以使用hci_create_group和hci_delete_group创建和删除用户组。 对于本地识别,使用空字符串作为组名,进行本地用户组维护(即本地只支持一个用户组)。 可以在一组用户中进行指定人脸ID(通过检测获取)的用户辨识。可以指定辨识结果的候选数量和阈值。
示例代码如下:
string groupId = "testgroup";
{
} else {
printf("hci_create_group Success \n");
}
{
printf("hci_add_user Success \n");
}
else
{
}
string sessionConfig = "capkey=";
sessionConfig += capkey;
string config = "groupid=" + groupId;
config += ",faceid=" + faceId;
printf("hci_afr_verify config [%s]\n", config.c_str());
{
}
if (result.uiIdentifyResultItemCount != 1)
{
printf("failed to identify");
}
printf( "hci_afr_identify success\n" );
{
}
printf("hci_remove_user Success \n");
{
printf("hci_delete_group Success \n");
}
else
{
}