完善个人信息

完善您的账号信息,便于为您提供更精准的服务

跳过
开发者类型:
企业名称:
联系人姓名:
真实姓名:
行业:
地区:

 无标题文档

ArcSoft ArcFace SDK Linux 平台 API 文档 V2.2

1 数据结构与枚举

1.1 数据结构

1.1.1 ASF_VERSION

结构体描述:
SDK版本信息
定义:

  1. typedef struct {
  2. MPChar Version; // 版本号
  3. MPChar BuildDate; // 构建日期
  4. MPChar CopyRight; // 版权说明
  5. }ASF_VERSION;

1.1.2 ASF_ActiveFileInfo

结构体描述:
激活文件信息
定义:

  1. typedef struct{
  2. MPChar startTime; //SDK开始时间
  3. MPChar endTime; //SDK截止时间
  4. MPChar platform; //平台版本
  5. MPChar sdkType; //SDK类型
  6. MPChar appId; //APPID
  7. MPChar sdkKey; //SDKKEY
  8. MPChar sdkVersion; //SDK版本号
  9. MPChar fileVersion; //激活文件版本号
  10. }ASF_ActiveFileInfo, *LPASF_ActiveFileInfo;

1.1.3 ASF_SingleFaceInfo

结构体描述:
单人脸信息
定义:

  1. typedef struct {
  2. MRECT faceRect; // 人脸框
  3. MInt32 faceOrient; //人脸角度
  4. } ASF_SingleFaceInfo, *LPASF_SingleFaceInfo;

1.1.4 ASF_MultiFaceInfo

结构体描述:
多人脸信息
定义:

  1. typedef struct {
  2. MRECT* faceRect; // 人脸框数组
  3. MInt32* faceOrient; // 人脸角度数组
  4. MInt32 faceNum; // 检测到的人脸个数
  5. MInt32* faceID; //在VIDEO模式下有效,IMAGE模式下为空
  6. }ASF_MultiFaceInfo, *LPASF_MultiFaceInfo;

1.1.5 ASF_FaceFeature

结构体描述:
人脸特征
定义:

  1. typedef struct {
  2. MByte* feature; // 人脸特征
  3. MInt32 featureSize; // 人脸特征长度
  4. }ASF_FaceFeature, *LPASF_FaceFeature;

1.1.6 ASF_AgeInfo

结构体描述:
年龄信息
定义:

  1. typedef struct{
  2. MInt32* ageArray; // 0:未知; >0:年龄
  3. MInt32 num; // 检测的人脸个数
  4. }ASF_AgeInfo, *LPASF_AgeInfo;

1.1.7 ASF_GenderInfo

结构体描述:
性别信息
定义:

  1. typedef struct{
  2. MInt32* genderArray; // 0:男性; 1:女性; -1:未知
  3. MInt32 num; // 检测的人脸个数
  4. }ASF_GenderInfo, *LPASF_GenderInfo;

1.1.8 ASF_Face3DAngle

结构体描述:
3D角度信息
定义:

  1. typedef struct{
  2. MFloat* roll; //横滚角
  3. MFloat* yaw; //偏航角
  4. MFloat* pitch; //俯仰角
  5. MInt32* status; //0:正常; 非0:异常
  6. MInt32 num; //检测的人脸个数
  7. }ASF_Face3DAngle, *LPASF_Face3DAngle;

1.1.9 ASF_LivenessThreshold

结构体描述:
活体置信度
定义:

  1. typedef struct{
  2. MFloat thresholdmodel_BGR; //RGB活体置信度
  3. MFloat thresholdmodel_IR; //IR活体置信度
  4. }ASF_LivenessThreshold, *LPASF_LivenessThreshold;

1.1.10 ASF_LivenessInfo

结构体描述:
活体信息
定义:

  1. typedef struct{
  2. MInt32* isLive; //0:非真人; 1:真人; -1:不确定; -2:传入人脸数>1
  3. MInt32 num; //检测的人脸个数
  4. }ASF_LivenessInfo, *LPASF_LivenessInfo;

2 枚举

2.1 人脸检测方向

  1. 根据应用场景,推荐选择单一角度,检测效果更优;
  1. enum ArcSoftFace_OrientPriority {
  2. ASF_OP_0_ONLY = 0x1, // 仅检测0度
  3. ASF_OP_90_ONLY = 0x2, // 仅检测90度
  4. ASF_OP_270_ONLY = 0x3, // 仅检测270度
  5. ASF_OP_180_ONLY = 0x4, // 仅检测180度
  6. ASF_OP_0_HIGHER_EXT = 0x5, // 全角度检测
  7. };

注:IMAGE模式下为了提高检测识别率,不支持ASF_OP_0_HIGHER_EXT检测

2.2 检测到的人脸角度(按逆时针方向)

  1. enum ArcSoftFace_OrientCode {
  2. ASF_OC_0 = 0x1, // 0度
  3. ASF_OC_90 = 0x2, // 90度
  4. ASF_OC_270 = 0x3, // 270度
  5. ASF_OC_180 = 0x4, // 180度
  6. ASF_OC_30 = 0x5, // 30度
  7. ASF_OC_60 = 0x6, // 60度
  8. ASF_OC_120 = 0x7, // 120度
  9. ASF_OC_150 = 0x8, // 150度
  10. ASF_OC_210 = 0x9, // 210度
  11. ASF_OC_240 = 0xa, // 240度
  12. ASF_OC_300 = 0xb, // 300度
  13. ASF_OC_330 = 0xc // 330度
  14. };

3. 接口

3.1 接口说明

3.1.1 ASFGetActiveFileInfo

接口

  1. MRESULT ASFGetActiveFileInfo(
  2. LPASF_ActiveFileInfo activeFileInfo
  3. );

功能描述
获取激活文件信息
参数

名称 IN/OUT 说明
activeFileInfo [out] 激活文件信息

返回值
成功返回MOK,失败详见 3.2错误码列表

3.1.2 ASFOnlineActivation

接口

  1. MRESULT ASFOnlineActivation(
  2. MPChar AppId,
  3. MPChar SDKKey
  4. );

功能描述
用于在线激活SDK
注:
1) 初次使用SDK时需要对SDK先进行激活,激活后无需重复调用;
2) 调用此接口时必须为联网状态,激活成功后即可离线使用;

参数

名称 IN/OUT 说明
AppId [in] 官网获取的APPID
SDKKey [in] 官网获取的SDKKEY

返回值

成功返回MOK或MERR_ASF_ALREADY_ACTIVATED,失败详见 3.2错误码列表

3.1.3 ASFActivation

接口

  1. MRESULT ASFActivation(
  2. MPChar AppId,
  3. MPChar SDKKey
  4. );

功能描述

在线激活SDK,与ASFOnlineActivation接口功能相同,首次需要联网激活,生成激活文件之后即可进行本地校验。(ASFOnlineActivation接口做了激活方案的优化,推荐使用ASFOnlineActivation接口)
参数

名称 IN/OUT 说明
AppId [in] 官网获取的APPID
SDKKey [in] 官网获取的SDKKEY

返回值

成功返回MOK或MERR_ASF_ALREADY_ACTIVATED,失败详见 3.2错误码列表

3.1.4 ASFInitEngine

接口

  1. MRESULT ASFInitEngine(
  2. MUInt32 detectMode,
  3. ASF_OrientPriority detectFaceOrientPriority,
  4. MInt32 detectFaceScaleVal,
  5. MInt32 detectFaceMaxNum,
  6. MInt32 combinedMask,
  7. MHandle* hEngine
  8. );

功能描述

初始化引擎

参数

名称 IN/OUT 说明
detectMode [in] VIDEO模式/IMAGE模式
VIDEO模式,:处理连续帧的图像数据
IMAGE模式:,处理单张的图像数据
detectFaceOrientPriority [in] 人脸检测角度,推荐单一角度检测;IMAGE模式下不支持全角度(ASF_OP_0_HIGHER_EXT)检测
detectFaceScaleVal [in] 识别的最小人脸比例(图片长边与人脸框长边的比值)
VIDEO模式取值范围[2,32],推荐值为16
IMAGE模式取值范围[2,32],推荐值为30
detectFaceMaxNum [in] 最大需要检测的人脸个数,取值范围[1,50]
combinedMask [in] 需要启用的功能组合,可多选
hEngine [out] 引擎句柄

返回值

成功返回MOK,失败详见 3.2错误码列表

3.1.5 ASFDetectFaces

接口

  1. MRESULT ASFDetectFaces(
  2. MHandle hEngine,
  3. MInt32 width,
  4. MInt32 height,
  5. MInt32 format,
  6. MUInt8* imgData,
  7. LPASF_MultiFaceInfo detectedFaces
  8. );

功能描述
人脸检测
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
width [in] 图片宽度,为4的倍数
height [in] 图片高度,YUYV/I420/NV21/NV12格式为2的倍数;BGR24/GRAY/DEPTH_U16格式无限制
format [in] 颜色空间格式
imgData [in] 图片数据
detectedFaces [out] 检测到的人脸信息

返回值

成功返回MOK,失败详见 3.2错误码列表

3.1.6 ASFFaceFeatureExtract

接口

  1. MRESULT ASFFaceFeatureExtract(
  2. MHandle hEngine,
  3. MInt32 width,
  4. MInt32 height,
  5. MInt32 format,
  6. MUInt8* imgData,
  7. LPASF_SingleFaceInfo faceInfo,
  8. LPASF_FaceFeature feature
  9. );

功能描述
单人脸特征提取
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
width [in] 图片宽度,为4的倍数
height [in] 图片高度,YUYV/I420/NV21/NV12格式为2的倍数;BGR24/GRAY格式无限制
format [in] 颜色空间格式
imgData [in] 图片数据
faceInfo [in] 单张人脸信息
feature [out] 人脸特征

返回值

成功返回MOK,失败详见 3.2错误码列表

3.1.7 ASFFaceFeatureCompare

接口

  1. MRESULT ASFFaceFeatureCompare(
  2. MHandle hEngine,
  3. LPASF_FaceFeature feature1,
  4. LPASF_FaceFeature feature2,
  5. MFloat* confidenceLevel
  6. );

功能描述
人脸特征比对
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
feature1 [in] 人脸特征值
feature2 [in] 人脸特征值
confidenceLevel [out] 比对结果,相似度

返回值

成功返回MOK,失败详见 3.2错误码列表

3.1.8 ASFSetLivenessParam

接口

  1. MRESULT ASFSetLivenessParam(
  2. MHandle hEngine,
  3. LPASF_LivenessThreshold threshold
  4. );

功能描述
修改RGB/IR活体阈值,SDK默认RGB:0.75,IR:0.7
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
threshold [in] 活体置信度,推荐阈值 RGB:0.75, IR:0.7

返回值

成功返回MOK,失败详见 3.2错误码列表

3.1.9 ASFProcess

接口

  1. MRESULT ASFProcess(
  2. MHandle hEngine,
  3. MInt32 width,
  4. MInt32 height,
  5. MInt32 format,
  6. MUInt8* imgData,
  7. LPASF_MultiFaceInfo detectedFaces,
  8. MInt32 combinedMask
  9. );

功能描述

人脸信息检测(年龄/性别/人脸3D角度),最多支持4张人脸信息检测,超过部分返回未知(活体仅支持单张人脸检测,超出返回未知),接口不支持IR图像检测。

参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
width [in] 图片宽度,为4的倍数
height [in] 图片高度,YUYV/I420/NV21/NV12格式为2的倍数,BGR24格式无限制
format [in] 颜色空间格式
imgData [in] 图片数据
detectedFaces [in] 检测到的人脸信息
combinedMask [in] 检测的属性(ASF_AGE、ASF_GENDER、 ASF_FACE3DANGLE、ASF_LIVENESS),支持多选

注:检测的属性须在引擎初始化接口的combinedMask参数中启用

返回值

成功返回MOK,失败详见 3.2错误码列表

3.1.10 ASFProcess_IR

接口

  1. MRESULT ASFProcess_IR(
  2. MHandle hEngine,
  3. MInt32 width,
  4. MInt32 height,
  5. MInt32 format,
  6. MUInt8* imgData,
  7. LPASF_MultiFaceInfo detectedFaces,
  8. MInt32 combinedMask
  9. );

功能描述
IR活体单人脸检测
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
width [in] 图片宽度,为4的倍数
height [in] 图片高度,I420/NV21/NV12格式为2的倍数,DEPTH_U16/GRAY格式无限制
format [in] 颜色空间格式,

支持(I420/NV21/NV12/DEPTH_U16/GRAY)的检测

imgData [in] 图片数据
detectedFaces [in] 人脸信息,用户根据待检测的功能选择需要使用的人脸。
combinedMask [in] 检测的属性(ASF_IR_LIVENESS)。

注:检测的属性须在引擎初始化接口的combinedMask参数中启用

返回值

成功返回MOK,失败详见 3.2错误码列表

3.1.11 ASFGetAge

接口

  1. MRESULT ASFGetAge(
  2. MHandle hEngine,
  3. LPASF_AgeInfo ageInfo
  4. );

功能描述
获取年龄信息
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
ageInfo [out] 检测到的年龄信息

返回值
成功返回MOK,失败详见 3.2错误码列表

3.1.12 ASFGetGender

接口

  1. MRESULT ASFGetGender(
  2. MHandle hEngine,
  3. LPASF_GenderInfo genderInfo
  4. );

功能描述
获取性别信息
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
genderInfo [out] 检测到的性别信息

返回值

成功返回MOK,失败详见 3.2错误码列表

3.1.13 ASFGetFace3DAngle

接口

  1. MRESULT ASFGetFace3DAngle(
  2. MHandle hEngine,
  3. LPASF_Face3DAngle p3DAngleInfo
  4. );

功能描述
获取3D角度信息
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
p3DAngleInfo [out] 检测到脸部3D 角度信息

返回值
成功返回MOK,失败详见 3.2错误码列表

3.1.14 ASFGetLivenessScore

接口

  1. MRESULT ASFGetLivenessScore(
  2. MHandle hEngine,
  3. LPASF_LivenessInfo livenessInfo
  4. );

功能描述
获取RGB活体信息
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
livenessInfo [out] RGB活体信息,详见 2.2.10 ASF_LivenessInfo

返回值

成功返回MOK,失败详见 3.2错误码列表

3.1.15 ASFGetLivenessScore_IR

接口

  1. MRESULT ASFGetLivenessScore_IR(
  2. MHandle hEngine,
  3. LPASF_LivenessInfo livenessInfo
  4. );

功能描述
获取IR活体信息
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄
livenessInfo [out] IR活体信息,详见 2.2.10 ASF_LivenessInfo

返回值

成功返回MOK,失败详见 3.2错误码列表

3.1.16 ASFGetVersion

接口

  1. const ASF_VERSION* ASFGetVersion(
  2. MHandle hEngine
  3. );

功能描述
获取版本信息
参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄

返回值

  1. 成功返回版本信息,失败返回MNull

3.1.17 ASFUninitEngine

接口

  1. MRESULT ASFUninitEngine(
  2. MHandle hEngine
  3. );

功能描述
销毁引擎

参数

名称 IN/OUT 说明
hEngine [in] 引擎句柄

返回值
成功返回MOK,失败详见 3.2错误码列表

3.2 错误码列表

错误码名 十六进制 十进制 错误码说明
MOK 0x0 0 成功
MERR_UNKNOWN 0x1 1 错误原因不明
MERR_INVALID_PARAM 0x2 2 无效的参数
MERR_UNSUPPORTED 0x3 3 引擎不支持
MERR_NO_MEMORY 0x4 4 内存不足
MERR_BAD_STATE 0x5 5 状态错误
MERR_USER_CANCEL 0x6 6 用户取消相关操作
MERR_EXPIRED 0x7 7 操作时间过期
MERR_USER_PAUSE 0x8 8 用户暂停操作
MERR_BUFFER_OVERFLOW 0x9 9 缓冲上溢
MERR_BUFFER_UNDERFLOW 0xA 10 缓冲下溢
MERR_NO_DISKSPACE 0xB 11 存贮空间不足
MERR_COMPONENT_NOT_EXIST 0xC 12 组件不存在
MERR_GLOBAL_DATA_NOT_EXIST 0xD 13 全局数据不存在
MERR_FSDK_INVALID_APP_ID 0x7001 28673 无效的AppId
MERR_FSDK_INVALID_SDK_ID 0x7002 28674 无效的SDKkey
MERR_FSDK_INVALID_ID_PAIR 0x7003 28675 AppId和SDKKey不匹配
MERR_FSDK_MISMATCH_ID_AND_SDK 0x7004 28676 SDKKey和使用的SDK不匹配(注意:调用初始化引擎接口时,请确认激活接口传入的参数,并重新激活)
MERR_FSDK_SYSTEM_VERSION_UNSUPPORTED 0x7005 28677 系统版本不被当前SDK所支持
MERR_FSDK_LICENCE_EXPIRED 0x7006 28678 SDK有效期过期,需要重新下载更新
MERR_FSDK_FR_INVALID_MEMORY_INFO 0x12001 73729 无效的输入内存
MERR_FSDK_FR_INVALID_IMAGE_INFO 0x12002 73730 无效的输入图像参数
MERR_FSDK_FR_INVALID_FACE_INFO 0x12003 73731 无效的脸部信息
MERR_FSDK_FR_MISMATCHED_FEATURE_LEVEL 0x12005 73733 待比较的两个人脸特征的版本不一致
MERR_FSDK_FACEFEATURE_UNKNOWN 0x14001 81921 人脸特征检测错误未知
MERR_FSDK_FACEFEATURE_MEMORY 0x14002 81922 人脸特征检测内存错误
MERR_FSDK_FACEFEATURE_INVALID_FORMAT 0x14003 81923 人脸特征检测格式错误
MERR_FSDK_FACEFEATURE_INVALID_PARAM 0x14004 81924 人脸特征检测参数错误
MERR_FSDK_FACEFEATURE_LOW_CONFIDENCE_LEVEL 0x14005 81925 人脸特征检测结果置信度低
MERR_ASF_EX_FEATURE_UNSUPPORTED_ON_INIT 0x15001 86017 Engine不支持的检测属性
MERR_ASF_EX_FEATURE_UNINITED 0x15002 86018 需要检测的属性未初始化
MERR_ASF_EX_FEATURE_UNPROCESSED 0x15003 86019 待获取的属性未在process中处理过
MERR_ASF_EX_FEATURE_UNSUPPORTED_ON_PROCESS 0x15004 86020 PROCESS不支持的检测属性,例如FR,有自己独立的处理函数
MERR_ASF_EX_INVALID_IMAGE_INFO 0x15005 86021 无效的输入图像
MERR_ASF_EX_INVALID_FACE_INFO 0x15006 86022 无效的脸部信息
MERR_ASF_ACTIVATION_FAIL 0x16001 90113 SDK激活失败,请打开读写权限
MERR_ASF_ALREADY_ACTIVATED 0x16002 90114 SDK已激活
MERR_ASF_NOT_ACTIVATED 0x16003 90115 SDK未激活
MERR_ASF_SCALE_NOT_SUPPORT 0x16004 90116 detectFaceScaleVal不支持
MERR_ASF_ACTIVEFILE_SDKTYPE_MISMATCH 0x16005 90117 激活文件与SDK类型不匹配,请确认使用的sdk
MERR_ASF_DEVICE_MISMATCH 0x16006 90118 设备不匹配
MERR_ASF_UNIQUE_IDENTIFIER_ILLEGAL 0x16007 90119 唯一标识不合法
MERR_ASF_PARAM_NULL 0x16008 90120 参数为空
MERR_ASF_VERSION_NOT_SUPPORT 0x1600A 90122 版本不支持
MERR_ASF_SIGN_ERROR 0x1600B 90123 签名错误
MERR_ASF_DATABASE_ERROR 0x1600C 90124 激活信息保存异常
MERR_ASF_UNIQUE_CHECKOUT_FAIL 0x1600D 90125 唯一标识符校验失败
MERR_ASF_COLOR_SPACE_NOT_SUPPORT 0x1600E 90126 颜色空间不支持
MERR_ASF_IMAGE_WIDTH_HEIGHT_NOT_SUPPORT 0x1600F 90127 图片宽高不支持,宽度需四字节对齐
MERR_ASF_ACTIVATION_DATA_DESTROYED 0x16011 90129 激活数据被破坏,请删除激活文件,重新进行激活
MERR_ASF_SERVER_UNKNOWN_ERROR 0x16012 90130 服务端未知错误
MERR_ASF_ACTIVEFILE_SDK_MISMATCH 0x16014 90132 激活文件与SDK版本不匹配,请重新激活
MERR_ASF_DEVICEINFO_LESS 0x16015 90133 设备信息太少,不足以生成设备指纹
MERR_ASF_REQUEST_TIMEOUT 0x16016 90134 客户端时间与服务器时间(即北京时间)前后相差在30分钟以上
MERR_ASF_APPID_DATA_DECRYPT 0x16017 90135 数据校验异常
MERR_ASF_APPID_APPKEY_SDK_MISMATCH 0x16018 90136 传入的AppId和AppKey与使用的SDK版本不一致
MERR_ASF_NO_REQUEST 0x16019 90137 短时间大量请求会被禁止请求,30分钟之后解封
MERR_ASF_ACTIVE_FILE_NO_EXIST 0x1601A 90138 激活文件不存在
MERR_ASF_IMAGEMODE_0_HIGHER_EXT_UNSUPPORT 0x1601B 90139 IMAGE模式下不支持全角度(ASF_OP_0_HIGHER_EXT)检测
MERR_ASF_NETWORK_COULDNT_RESOLVE_HOST 0x17001 94209 无法解析主机地址
MERR_ASF_NETWORK_COULDNT_CONNECT_SERVER 0x17002 94210 无法连接服务器
MERR_ASF_NETWORK_CONNECT_TIMEOUT 0x17003 94211 网络连接超时
MERR_ASF_NETWORK_UNKNOWN_ERROR 0x17004 94212 网络未知错误

3.3 示例代码

  1. #include "arcsoft_face_sdk.h"
  2. #include "amcomdef.h"
  3. #include "asvloffscreen.h"
  4. #include "merror.h"
  5. #include <iostream>
  6. #include <string>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #define APPID "官网获取APPID"
  11. #define SDKKey "官网获取SDKKEY"
  12. #define SafeFree(p) { if ((p)) free(p); (p) = NULL; }
  13. #define SafeArrayDelete(p) { if ((p)) delete [] (p); (p) = NULL; }
  14. #define SafeDelete(p) { if ((p)) delete (p); (p) = NULL; }
  15. #define NSCALE "取值范围[2,32],VIDEO模式推荐值16,IMAGE模式内部设置固定值为30"
  16. #define FACENUM "检测的人脸数"
  17. int main()
  18. {
  19. //激活SDK
  20. MRESULT res = ASFOnlineActivation(APPID, SDKKEY);
  21. if (MOK != res && MERR_ASF_ALREADY_ACTIVATED != res)
  22. printf("ASFOnlineActivation fail: %d\n", res);
  23. else
  24. printf("ASFOnlineActivation sucess: %d\n", res);
  25. //初始化引擎
  26. MHandle handle = NULL;
  27. MInt32 mask = ASF_FACE_DETECT | ASF_FACERECOGNITION | ASF_AGE | ASF_GENDER | ASF_FACE3DANGLE | ASF_LIVENESS | ASF_IR_LIVENESS;
  28. res = ASFInitEngine(ASF_DETECT_MODE_IMAGE, ASF_OP_0_ONLY, NSCALE, FACENUM, mask, &handle);
  29. if (res != MOK)
  30. printf("ALInitEngine fail: %d\n", res);
  31. else
  32. printf("ALInitEngine sucess: %d\n", res);
  33. char* picPath1 = "图片路径,该demo只支持裸数据(NV21/BGR24/BMP等)格式";
  34. int Width1 = 图片宽度;
  35. int Height1 = 图片高度;
  36. int Format1 = ASVL_PAF_RGB24_B8G8R8; //图像数据为RGB24颜色格式
  37. MUInt8* imageData1 = (MUInt8*)malloc(Height1*Width1*3);
  38. FILE* fp1 = fopen(picPath1, "rb");
  39. char* picPath2 = "图片路径,该demo只支持裸数据(NV21/BGR24/BMP等)格式";
  40. int Width2 = 图片宽度;
  41. int Height2 = 图片高度;
  42. int Format2 = ASVL_PAF_RGB24_B8G8R8; //图像数据为RGB24颜色格式
  43. MUInt8* imageData2 = (MUInt8*)malloc(Height2*Width2*3);
  44. FILE* fp2 = fopen(picPath2, "rb");
  45. char* picPath3 = "图片路径,这里用的NV21为例";
  46. int Width3 = 图片宽度;
  47. int Height3 = 图片高度;
  48. int Format3 = ASVL_PAF_GRAY; //用于红外活体检测
  49. //只读NV21前2/3的数据为灰度数据
  50. MUInt8* imageData3 = (MUInt8*)malloc(Height2*Width2);
  51. FILE* fp3 = fopen(picPath3, "rb");
  52. if (fp1 && fp2 && fp3)
  53. {
  54. fread(imageData1, 1, Height1*Width1*3, fp1); //读BGR裸数据
  55. fclose(fp1);
  56. fread(imageData2, 1, Height2*Width2*3, fp2); //读BGR裸数据
  57. fclose(fp2);
  58. fread(imageData3, 1, Height3*Width3, fp3);//读NV21前2/3的数据,用于红外活体检测
  59. fclose(fp3);
  60. // 人脸检测
  61. ASF_MultiFaceInfo detectedFaces1 = { 0 };
  62. ASF_SingleFaceInfo SingleDetectedFaces = { 0 };
  63. ASF_FaceFeature feature1 = { 0 };
  64. ASF_FaceFeature copyfeature1 = { 0 };
  65. res = ASFDetectFaces(handle, Width1, Height1, Format1, imageData1, &detectedFaces1);
  66. if (res != MOK)
  67. printf("%s ASFDetectFaces fail: %d\n", picPath1, res);
  68. else
  69. {
  70. printf("%s ASFDetectFaces sucess: %d\n", picPath1, res);
  71. SingleDetectedFaces.faceRect.left = detectedFaces1.faceRect[0].left;
  72. SingleDetectedFaces.faceRect.top = detectedFaces1.faceRect[0].top;
  73. SingleDetectedFaces.faceRect.right = detectedFaces1.faceRect[0].right;
  74. SingleDetectedFaces.faceRect.bottom = detectedFaces1.faceRect[0].bottom;
  75. SingleDetectedFaces.faceOrient = detectedFaces1.faceOrient[0];
  76. }
  77. // 单人脸特征提取
  78. res = ASFFaceFeatureExtract(handle, Width1, Height1, Format1, imageData1, &SingleDetectedFaces, &feature1);
  79. if (res != MOK)
  80. printf("%s ASFFaceFeatureExtract fail: %d\n", picPath1, res);
  81. else
  82. {
  83. printf("%s ASFFaceFeatureExtract sucess: %d\n", picPath1, res);
  84. //拷贝feature,否则第二次进行特征提取,会覆盖第一次特征提取的数据,导致比对的结果为1
  85. copyfeature1.featureSize = feature1.featureSize;
  86. copyfeature1.feature = (MByte *)malloc(feature1.featureSize);
  87. memset(copyfeature1.feature, 0, feature1.featureSize);
  88. memcpy(copyfeature1.feature, feature1.feature, feature1.featureSize);
  89. }
  90. ASF_MultiFaceInfo detectedFaces2 = { 0 };
  91. ASF_FaceFeature feature2 = { 0 };
  92. res = ASFDetectFaces(handle, Width2, Height2, Format2, imageData2, &detectedFaces2);
  93. if (res != MOK)
  94. printf("%s ASFDetectFaces fail: %d\n", picPath2, res);
  95. else
  96. {
  97. printf("%s ASFDetectFaces sucess: %d\n", picPath2, res);
  98. SingleDetectedFaces.faceRect.left = detectedFaces2.faceRect[0].left;
  99. SingleDetectedFaces.faceRect.top = detectedFaces2.faceRect[0].top;
  100. SingleDetectedFaces.faceRect.right = detectedFaces2.faceRect[0].right;
  101. SingleDetectedFaces.faceRect.bottom = detectedFaces2.faceRect[0].bottom;
  102. SingleDetectedFaces.faceOrient = detectedFaces2.faceOrient[0];
  103. }
  104. res = ASFFaceFeatureExtract(handle, Width2, Height2, Format2, imageData2, &SingleDetectedFaces, &feature2);
  105. if (res != MOK)
  106. printf("%s ASFFaceFeatureExtract fail: %d\n", picPath2, res);
  107. else
  108. printf("%s ASFFaceFeatureExtract sucess: %d\n", picPath2, res);
  109. // 单人脸特征比对
  110. MFloat confidenceLevel;
  111. res = ASFFaceFeatureCompare(handle, ©feature1, &feature2, &confidenceLevel);
  112. if (res != MOK)
  113. printf("ASFFaceFeatureCompare fail: %d\n", res);
  114. else
  115. printf("ASFFaceFeatureCompare sucess: %lf\n", confidenceLevel);
  116. //设置活体置信度 SDK内部默认值为 IR:0.7 RGB:0.75(无特殊需要,可以不设置)
  117. ASF_LivenessThreshold threshold = { 0 };
  118. threshold.thresholdmodel_BGR = 0.75;
  119. threshold.thresholdmodel_IR = 0.7;
  120. res = ASFSetLivenessParam(handle, &threshold);
  121. if (res != MOK)
  122. printf("ASFSetLivenessParam fail: %d\n", res);
  123. else
  124. printf("ASFSetLivenessParam sucess: %d\n", res);
  125. // 人脸信息检测
  126. MInt32 lastMask = ASF_AGE | ASF_GENDER | ASF_FACE3DANGLE | ASF_LIVENESS;
  127. res = ASFProcess(handle, Width2, Height2, Format2, imageData2, &detectedFaces2, lastMask);
  128. if (res != MOK)
  129. printf("ASFProcess fail: %d\n", res);
  130. else
  131. printf("ASFProcess sucess: %d\n", res);
  132. // 获取年龄
  133. ASF_AgeInfo ageInfo = { 0 };
  134. res = ASFGetAge(handle, &ageInfo);
  135. if (res != MOK)
  136. printf("%s ASFGetAge fail: %d\n", picPath2, res);
  137. else
  138. printf("%s ASFGetAge sucess: %d First face age: %d\n", picPath2, res, ageInfo.ageArray[0]);
  139. // 获取性别
  140. ASF_GenderInfo genderInfo = { 0 };
  141. res = ASFGetGender(handle, &genderInfo);
  142. if (res != MOK)
  143. printf("%s ASFGetGender fail: %d\n", picPath2, res);
  144. else
  145. printf("%s ASFGetGender sucess: %d First face gender: %d\n", picPath2, res, genderInfo.genderArray[0]);
  146. // 获取3D角度
  147. ASF_Face3DAngle angleInfo = { 0 };
  148. res = ASFGetFace3DAngle(handle, &angleInfo);
  149. if (res != MOK)
  150. printf("%s ASFGetFace3DAngle fail: %d\n", picPath2, res);
  151. else
  152. printf("%s ASFGetFace3DAngle sucess: %d First face 3dAngle: roll: %lf yaw: %lf pitch: %lf\n", picPath2, res, angleInfo.roll[0], angleInfo.yaw[0], angleInfo.pitch[0]);
  153. //获取活体信息
  154. ASF_LivenessInfo rgbLivenessInfo = { 0 };
  155. res = ASFGetLivenessScore(handle, &rgbLivenessInfo);
  156. if (res != MOK)
  157. printf("ASFGetLivenessScore fail: %d\n", res);
  158. else
  159. printf("ASFGetLivenessScore sucess: %d\n", rgbLivenessInfo.isLive[0]);
  160. //**************进行IR活体检测********************
  161. printf("\n**********IR LIVENESS*************\n");
  162. ASF_MultiFaceInfo detectedFaces3 = { 0 };
  163. //以GRAY图像为例进行红外活体检测
  164. res = ASFDetectFaces(handle, Width3, Height3, Format3, imageData3, &detectedFaces3);
  165. if (res != MOK)
  166. printf("ASFDetectFaces fail: %d\n", res);
  167. else
  168. printf("Face num: %d\n", detectedFaces3.faceNum);
  169. //IR图像活体检测
  170. MInt32 processIRMask = ASF_IR_LIVENESS;
  171. res = ASFProcess_IR(handle, Width3, Height3, ASVL_PAF_GRAY, imageData3, &detectedFaces3, processIRMask);
  172. if (res != MOK)
  173. printf("ASFProcess_IR fail: %d\n", res);
  174. else
  175. printf("ASFProcess_IR sucess: %d\n", res);
  176. //获取IR活体信息
  177. ASF_LivenessInfo irLivenessInfo = { 0 };
  178. res = ASFGetLivenessScore_IR(handle, &irLivenessInfo);
  179. if (res != MOK)
  180. printf("ASFGetLivenessScore_IR fail: %d\n", res);
  181. else
  182. printf("IR Liveness: %d\n", irLivenessInfo.isLive[0]);
  183. SafeFree(copyfeature1.feature); //释放内存
  184. SafeArrayDelete(imageData1);
  185. SafeArrayDelete(imageData2);
  186. SafeArrayDelete(imageData3);
  187. //获取版本信息
  188. const ASF_VERSION* pVersionInfo = ASFGetVersion(handle);
  189. //反初始化
  190. res = ASFUninitEngine(handle);
  191. if (res != MOK)
  192. printf("ALUninitEngine fail: %d\n", res);
  193. else
  194. printf("ALUninitEngine sucess: %d\n", res);
  195. }
  196. else{
  197. printf("No pictures found.\n");
  198. }
  199. getchar();
  200. return 0;
  201. }