灵云SDK开发手册(C API)  5.2
 全部 结构体 函数 变量 类型定义 枚举 枚举值  
FPR能力

以下描述了如何使用灵云FPR能力。

1. FPR简介

FPR 指纹识别能力,对特定的指纹数据进行模型注册和训练后,支持对未知指纹数据的校验。

2. 选择模块和能力

灵云可以提供云端和本地端的指纹识别能力. 无论使用云端或本地端的指纹识别能力,基础模块 hci_fpr都是需要的。 使用云端能力时,需要加上hci_fpr_cloud_recog模块; 使用本地端能力时,需要加上hci_fpr_local_recog模块.

3. 指纹图像数据格式

指纹可以使用不同的文件格式进行存储,支持格式包括jpg, bmp, png等常见格式图像,目前仅支持位深为位灰度, 24位彩色的图像。这些图像格式具有文件头,标识了文件格式、图像的基本信息(例如宽、高、图像类型), 并且对图像数据进行了压缩。在使用时,开发者直接将这些格式的数据传给灵云FPR模块,灵云FPR模块会根据文件头自动判断文件格式, 并进行解压缩操作。 目前不支持多页TIFF类型的文件,多页TIFF只会处理第一页的内容。目前Android不支持GIF格式以及TIFF格式文件。 开发者也可以使用raw格式数据给FPR模块,此时需要指定图像的宽高等属性。

4. 指纹特征注册和训练

当调用hci_fpr_enroll接口进行注册时,用户唯一标识可以由服务端产生,也可以由用户自己指定,但必须要保证该标识的唯一性。 可以对该指纹模型进行多次注册用以完善模型。

示例代码如下:

enrollData.uiFingerDataCount = nEnrollDataCount;
enrollData.psFingerDataList = enrollItemArray;
//userID为非必填项,但要注意,开发者需要确保userID的唯一性。
string enrollConfig = "imageType=raw,bgColor=white,dpi=500";
FPR_ENROLL_RESULT enrollResult;
HCI_ERR_CODE errCode = hci_fpr_enroll(nSessionId,&enrollData,enrollConfig.c_str(),&enrollResult);
if (errCode != HCI_ERR_NONE)
{
printf("hci_fpr_enroll return %d\n",errCode);
hci_fpr_session_stop(nSessionId);
return;
}

5. 指纹特征确认

指纹模型注册和训练成功后,可以对指纹数据进行校验,以判断用户唯一标识和指纹数据是否相符。

示例代码如下:

//userID 为必填项,判断指纹数据特征与此 userID对应的模型是否相同。
string verifyConfig = "userid=" + userID;
verifyConfig += ",imageType=raw,dpi=500,bgColor=white";
FPR_VERIFY_RESULT pVerifyResult;
errCode = hci_fpr_verify(nSessionId, FingerData.m_pBuf, FingerData.m_nLen, verifyConfig.c_str(), &pVerifyResult);
if( errCode != HCI_ERR_NONE )
{
printf( "hci_fpr_verify return %d\n", errCode );
hci_fpr_session_stop(nSessionId);
return;
}
printf( "hci_fpr_verify success\n" );
if (pVerifyResult.eStatus == FPR_VERIFY_STATUS_MATCH)
{
printf( "Finger data matches with user id:%s!\n",userID.c_str() );
}
else
{
printf("Finger data doesn't match with user id:%s!\n",userID.c_str());
}
errCode = hci_fpr_free_verify_result(&pVerifyResult);
if( errCode != HCI_ERR_NONE )
{
printf( "hci_fpr_free_verify_result return %d\n", errCode );
hci_fpr_session_stop(nSessionId);
return;
}
printf( "hci_fpr_free_verify_result success\n" );

6. 指纹特征辨识

指纹模型多次注册后,可对指纹数据进行校验,选出与用户唯一标识最相符的数据,并按得分排列。

示例代码如下:

string identifyConfig = "bgcolor=white,dpi=512";
identifyConfig += ",imagetype=format";
if (groupID!="")
{
identifyConfig += ",groupid=" +groupID;
}
printf("hci_fpr_identify config [%s]\n", identifyConfig.c_str());
FPR_IDENTIFY_RESULT identifyResult;
err_code = hci_fpr_identify(nSessionId, fingerData.buff_, fingerData.buff_len_, identifyConfig.c_str(), &identifyResult);
if( err_code == HCI_ERR_NONE )
{
printf( "hci_fpr_identify succes\n");
PrintIdentifyResult(identifyResult);
hci_fpr_free_identify_result(&identifyResult);
}
else
{
printf( "hci_fpr_identify return (%d:%s)\n", err_code, hci_get_error_info(err_code));
}
err_code = hci_fpr_session_stop(nSessionId);
if( err_code != HCI_ERR_NONE )
{
printf( "hci_fpr_session_stop return (%d:%s)\n", err_code, hci_get_error_info(err_code));
}
printf( "hci_fpr_session_stop success\n" );