ARCSOFT ARC FACE DEVELOPER'S GUIDE

User Manual:

Open the PDF directly: View PDF PDF.
Page Count: 26

DownloadARCSOFT ARC FACE DEVELOPER'S GUIDE
Open PDF In BrowserView PDF
ArcSoft ArcFace SDK
开发说明文档

© 2018 ArcSoft Inc. All rights reserved.

目录
目录 .................................................................................................................................................. 2
1. 简介........................................................................................................................................... 4
1.1
产品概述....................................................................................................................... 4
1.2
环境要求....................................................................................................................... 4
1.2.1
系统要求 ........................................................................................................... 4
1.2.2
开发环境 ........................................................................................................... 4
1.2.3
支持的颜色空间格式 ....................................................................................... 4
1.3
产品功能简介............................................................................................................... 4
1.3.1
人脸检测 ........................................................................................................... 4
1.3.2
人脸跟踪 ........................................................................................................... 5
1.3.3
人脸属性检测 ................................................................................................... 5
1.3.4
人脸三维角度检测 ........................................................................................... 5
1.3.5
人脸比对 ........................................................................................................... 5
1.4
SDK 授权说明 ............................................................................................................... 5
2. 接入指南................................................................................................................................... 6
2.1
引擎获取....................................................................................................................... 6
2.1.1
注册为开发者 ................................................................................................... 6
2.1.2
SDK 下载 ........................................................................................................... 6
2.1.3
SDK 包结构 ....................................................................................................... 7
2.1.4
工程配置 ........................................................................................................... 7
2.1.5
调用流程 ........................................................................................................... 9
2.1.6
阈值推荐 ......................................................................................................... 10
2.2
数据结构..................................................................................................................... 10
2.2.1
ASF_VERSION ................................................................................................... 10
2.2.2
ASF_SingleFaceInfo ..................................................................................... 10
2.2.3
ASF_MultiFaceInfo ....................................................................................... 11
2.2.4
ASF_FaceFeature ........................................................................................... 11
2.2.5
ASF_AgeInfo ................................................................................................... 11
2.2.6
ASF_GenderInfo ............................................................................................. 11
2.2.7
ASF_Face3DAngle ........................................................................................... 12
2.3
枚举............................................................................................................................. 12
2.3.1
检测方向的优先级 ......................................................................................... 12
2.3.2
检测到的人脸角度(按逆时针方向) ......................................................... 12
3. 接口......................................................................................................................................... 13
3.1
接口说明..................................................................................................................... 13
3.1.1
ASFActivation................................................................................................... 13
3.1.2
ASFInitEngine .................................................................................................. 13
3.1.3
ASFDetectFaces ............................................................................................... 14
3.1.4
ASFFaceFeatureExtract .................................................................................... 15
3.1.5
ASFFaceFeatureCompare ................................................................................ 15
3.1.6
ASFProcess ...................................................................................................... 16

3.1.7
3.1.8
3.1.9
3.1.10
3.1.11

4.

ASFGetAge ....................................................................................................... 16
ASFGetGender ................................................................................................. 17
ASFGetFace3DAngle ........................................................................................ 17
ASFGetVersion ................................................................................................. 18
ASFUninitEngine .............................................................................................. 18

3.2
错误码概览................................................................................................................. 18
3.3
示例代码..................................................................................................................... 21
常见问题................................................................................................................................. 24
4.1
FAQ .............................................................................................................................. 24
4.2

其他帮助..................................................................................................................... 26

1. 简介
1.1 产品概述
ArcFace 离线 SDK,包含人脸检测、性别检测、年龄检测、人脸识别等能力,初次使用
时需联网激活,激活后即可本地无网络环境下工作,可根据业务需求结合人脸识别等 SDK
灵活的进行应用层开发。

1.2 环境要求
1.2.1 系统要求
Win7 及以上

1.2.2 开发环境
VS2013 及以上

1.2.3 支持的颜色空间格式
支持图像的颜色空间格式: NV21,NV12, BGR24,I420,YUYV
常量名

常量值

常量说明

CP_PAF_NV21

2050

8-bit Y 通道,8-bit 2x2 采样 V 与 U 分量交织通道

ASVL_PAF_NV12

2049

8-bit Y 通道,8-bit 2x2 采样 U 与 V 分量交织通道

CP_PAF_BGR24

513

RGB 分量交织,按 B, G, R, B 字节序排布

ASVL_PAF_I420

1537

8-bit Y 通道, 8-bit 2x2 采样 U 通道, 8-bit 2x2 采
样 V 通道

ASVL_PAF_YUYV

1289

YUV 分量交织, V 与 U 分量 2x1 采样,按 Y0, U0, Y1,
V0 字节序排布

1.3 产品功能简介
1.3.1 人脸检测
对传入图像数据进行人脸检测,返回人脸位置信息和人脸在图像中的朝向信息,可用于

后续的人脸分析、人脸比对操作,支持图像模式和视频流模式。
支持单人脸、多人脸检测,最多支持检测人脸数为 50。

1.3.2 人脸跟踪
捕捉视频流中的人脸信息,并对人脸进行跟踪。

1.3.3 人脸属性检测
对检测到的人脸进行属性分析,支持性别、年龄的属性分析,支持图像模式和视频流模
式。

1.3.4 人脸三维角度检测
检测输入图像数据指定区域人脸的三维角度信息,包含人脸三个空间角度:俯仰角
(pitch), 横滚角(roll), 偏航角(yaw),支持图像模式和视频流模式。

1.3.5 人脸比对
将两个人脸进行比对,来判断是否为同一个人,返回比对相似度值。

1.4 SDK 授权说明
SDK 授权按设备进行授权,每台硬件设备需要一个独立的授权,此授权的校验是基于设
备的唯一标识,被授权的设备,初次授权时需要联网进行授权,授权成功后在有效期内可以
离线运行 SDK。
激活一台设备后,遇以下情况,设备授权不变,但需要重新联网激活:



删除基于 SDK 开发的应用或删除应用数据



重新安装系统



激活一台设备后,硬件设备变更

2. 接入指南
2.1 引擎获取
2.1.1 注册为开发者
访问 ArcSoft AI 开放平台门户:https://ai.arcsoft.com.cn,注册开发者账号并登录。

2.1.2 SDK 下载
创建对应的应用,并选择需要下载的 SDK、对应平台以及版本,确认后即可下载 SDK 和
查看激活码。

可在查看激活码链接中获取 APPID 和 SDKKey,点击下载 SDK 下载 SDK 包。

点击【下载 SDK】即可下载 SDK 开发包;

点击【查看激活码】即可查看所需要 APPID、SDKKEY;

2.1.3 SDK 包结构
|---doc
|

|---ARCSOFT_FACE_SDK_DEVELOPER'S_GUIDE.PDF

开发说明文档

|---inc
|

|---amcomdef.h

平台文件

|

|---asvloffscreen.h

平台文件

|

|---arcsoft_face_sdk.h

接口文件

|

|---merror.h

错误码文件

|---lib
|

|---libarcsoft_face.dll

算法库

|

|---libarcsoft_face_engine.dll

引擎库

|

|---libarcsoft_face_engine.lib

引擎库

|---samplecode
|

|---samplecode.txt

|---releasenotes.txt

示例代码
说明文件

2.1.4 工程配置
方法 1:VS 中添加 lib 库及头文件(外部依赖项)的步骤:
1、 添加工程的头文件目录:
a) 右键单击工程名, 选择属性---配置属性---c/c++---常规---附加包含目录
b) 添加头文件存放目录路径

2、 添加文件引用的 lib 静态库路径:
a) 右键单击工程名,选择属性---配置属性---链接器---常规---附加库目录
b) 添加 lib 文件存放目录
3、 添加工程引用的 lib 库:
a) 右键单击工程名,选择属性---配置属性---链接器---输入---附加依赖项

b) 添加依赖的 lib 库名称

4、 添加工程引用的 dll 动态库:
a) 把引用的 dll 放到工程的可执行文件所在的目录下(例如:debug、relese
或工程目录下)。
方法 2:相对路径的设置
在 VS 的工程中常常要设置头文件的包含路径和库目录,如果使用绝对路径,其他人拷
贝你的工程到其他机器上就可能无法运行,原因是在建工程时可能把工程放在了 E:盘,但
是拷贝后的工程路径和拷贝前的工程路径不一致,会导致找不到头文件问题。因此,建议配
置包含路径和库目录时使用相对路径。
这里的相对路径就是相当于工程文件(XXXX.vcproj)为起点计算出的能找到包含所需
头文件(也就是找包含所需头文件的 include 目录)的路径。
例如你的工程文件(Count.vcproj)所在目录路径为:
E:\projects\Count\Count\Count.vcproj
该工程需要包含一个图片参数,该图片所在路径如下:
E:\projects\Count\pic\pic01.jpg
这里程序中的相对路径设置如下:
..\pic\pic02.jpg

程序代码中的参数路径设置时要用双斜线:
例如:
#include "..\\TestLib\\lib.h"
#pragma comment(lib,"..\\debug\\TestLib.lib");

2.1.5 调用流程

1)调用 ASFActivation 激活 SDK

2)调用 ASFInitEngine 初始化引擎

3)调用 ASFDetectFaces
进行人脸检测

4)调用 ASFFaceFeatureExtract
进行人脸特征提取

6)调用 ASFProcess
进行人脸信息检测

5)调用 ASFFaceFeatureCompare
进行人脸比对

7)调用 ASFGetAge/ ASFGetGender/
ASFGetFace3DAngle,获取年龄/性别/
人脸角度信息

8)调用 ASFUninitEngine 销毁引擎

Step 1:激活,调用 ASFActivation
接口所需 AppId 和 SDKKey 在申请 SDK 时获取,
只需在第一次使用时调用激活成功即可;
Step 2:初始化,调用 ASFInitEngine 初始化引擎


VIDEO 模式:处理连续帧的图像数据,并返回检测结果,需要将所有图像帧的数据
都传入接口进行处理;



IMAGE 模式:处理单帧的图像数据,并返回检测结果;

Step 3: 调用 ASFDetectFaces 进行人脸检测
接口所需的图像信息,format 参数支持 NV21/NV12/YUYV/BGR24/I420 五种颜色空间格

式,图像处理结果可从 detectedFaces 参数中获取;
Step 4:调用 ASFFaceFeatureExtract 接口进行人脸特征提取
接口只支持单人脸特征提取,处理结果可从 feature 参数中获取;
Step 5: 调用 ASFFaceFeatureCompare 接口进行人脸比对
接口只支持单人脸比对,处理结果可从 confidenceLevel 参数中获取;
Step 6: 调用 ASFProcess 接口进行人脸信息检测
接 口 中 combinedMask 参数 传 入 只 能 是 初 始 化 中 参 数 combinedMask 与 ASF_AGE|
ASF_GENDER| ASF_FACE3DANGLE 的交集的子集;
Step 7: 调用 ASFGetAge、ASFGetGender、ASFGetFace3Dangle 接口,年龄、性别、人脸角
度信息;
Step 8:调用 unInitEngine 销毁引擎

2.1.6 阈值推荐
阈值区间为[0~1],建议阈值设置为 0.8,可根据实际场景需求进行调整。

2.2 数据结构
2.2.1 ASF_VERSION
功能描述:
版本信息;
定义:
typedef struct {
MPChar Version;
MPChar BuildDate;
MPChar CopyRight;
}ASF_VERSION;

2.2.2 ASF_SingleFaceInfo
类描述:
单人脸信息;
定义:
typedef struct {

// 版本号
// 构建日期
// 版权说明

MRECT
faceRect;
// 人脸框
MInt32
faceOrient;
//人脸角度
} ASF_SingleFaceInfo, *LPASF_SingleFaceInfo;

2.2.3 ASF_MultiFaceInfo
类描述:
多人脸信息;
定义:
typedef struct {
MRECT*
faceRect;
// 人脸框数组
MInt32*
faceOrient;
// 人脸角度数组
MInt32
faceNum;
// 检测到的人脸个数
}ASF_MultiFaceInfo, *LPASF_MultiFaceInfo;

2.2.4 ASF_FaceFeature
功能描述:
人脸特征;
定义:
typedef struct {
MByte*
feature;
// 人脸特征
MInt32
featureSize;
// 人脸特征长度
}ASF_FaceFeature, *LPASF_FaceFeature;

2.2.5 ASF_AgeInfo
功能描述:
年龄信息;
定义:
typedef struct{
MInt32* ageArray; // 0 代表未知,大于 0 的数值即检测的年龄结果
MInt32 num;
// 检测的人脸个数
}ASF_AgeInfo, *LPASF_AgeInfo;

2.2.6 ASF_GenderInfo
功能描述:
性别信息;
定义:
typedef struct{
MInt32* genderArray;

// 0 表示男性,1 表示女性,-1 表示未知

MInt32 num;
// 检测的人脸个数
}ASF_GenderInfo, *LPASF_GenderInfo;

2.2.7 ASF_Face3DAngle
功能描述:
3D 角度信息
typedef struct{
MFloat* roll;
//横滚角
MFloat* yaw;
//偏航角
MFloat* pitch;
//俯仰角
MInt32* status;
//0: 正常,其他数值:出错
MInt32 num;
//检测的人脸个数
}ASF_Face3DAngle, *LPASF_Face3DAngle;

2.3 枚举
2.3.1 检测方向的优先级
根据应用场景,推荐选择单一角度,检测效果更优;
enum ArcSoftFace_OrientPriority {
ASF_OP_0_ONLY = 0x1,
// 仅检测 0 度
ASF_OP_90_ONLY = 0x2,
// 仅检测 90 度
ASF_OP_270_ONLY = 0x3,
// 仅检测 270 度
ASF_OP_180_ONLY = 0x4,
// 仅检测 180 度
ASF_OP_0_HIGHER_EXT = 0x5, // 检测 0,90,270,180 全角度
};

2.3.2 检测到的人脸角度(按逆时针方向)
enum ArcSoftFace_OrientCode
ASF_OC_0 = 0x1,
ASF_OC_90 = 0x2,
ASF_OC_270 = 0x3,
ASF_OC_180 = 0x4,
ASF_OC_30 = 0x5,
ASF_OC_60 = 0x6,
ASF_OC_120 = 0x7,
ASF_OC_150 = 0x8,
ASF_OC_210 = 0x9,
ASF_OC_240 = 0xa,

{
//
//
//
//
//
//
//
//
//
//

0 degree
90 degree
270 degree
180 degree
30 degree
60 degree
120 degree
150 degree
210 degree
240 degree

ASF_OC_300 = 0xb,
ASF_OC_330 = 0xc

// 300 degree
// 330 degree

};

3. 接口
3.1 接口说明
3.1.1 ASFActivation
原型
MRESULT ASFActivation(
MPChar

AppId,

MPChar

SDKKey

);

功能描述
激活 SDK。

参数
AppId

[in]

官网获取的 APPID

SDKKey

[in]

官网获取的 SDKKEY

返回值
成功返回 MOK 或 MERR_ASF_ALREADY_ACTIVATED,否则返回失败 codes。

3.1.2 ASFInitEngine
原型
MRESULT ASFInitEngine(
MLong

detectMode,

ASF_OrientPriority

detectFaceOrientPriority,

MInt32

detectFaceScaleVal,

MInt32

detectFaceMaxNum,

MInt32

combinedMask,

MHandle*

hEngine

);

功能描述
初始化引擎。

参数

detectMode

[in]

VIDEO 模式/IMAGE 模式
VIDEO 模式:处理连续帧的图像数据,并返回检测结果,需要将所有图
像帧的数据都传入接口进行处理;
IMAGE 模式:处理单帧的图像数据,并返回检测结果

detectFaceOrientPriority

[in]

检测脸部的角度优先值,推荐仅检测单一角度,效果更优

detectFaceScaleVal

[in]

用于数值化表示的最小人脸尺寸,该尺寸代表人脸尺寸相对于图片长
边的占比。
video 模式有效值范围[2,16], Image 模式有效值范围[2,32]
推荐值为 16

detectFaceMaxNum

[in]

最大需要检测的人脸个数[1-50]

combinedMask

[in]

用户选择需要检测的功能组合,可单个或多个

hEngine

[out]

初始化返回的引擎 handle

返回值
成功返回 MOK,否则返回失败 codes。

3.1.3 ASFDetectFaces
原型
MRESULT ASFDetectFaces(
MHandle

hEngine,

MInt32

width,

MInt32

height,

MInt32

format,

MUInt8*

imgData,

LPASF_MultiFaceInfo

detectedFaces

);

功能描述
人脸检测。

参数
hEngine

[in]

引擎 handle

width

[in]

图片宽度为 4 的倍数且大于 0

height

[in]

YUYV/I420/NV21/NV12 格式的图片高度为 2 的倍数,BGR24 格式
的图片高度不限制

format

[in]

颜色空间格式

imgData

[in]

图片数据

detectedFaces

[out]

检测到的人脸信息

返回值
成功返回 MOK,否则返回失败 codes。

3.1.4 ASFFaceFeatureExtract
原型
MRESULT ASFFaceFeatureExtract(
MHandle

hEngine,

MInt32

width,

MInt32

height,

MInt32

format,

MUInt8*

imgData,

LPASF_SingleFaceInfo

faceInfo,

LPASF_FaceFeature

feature

);

功能描述
单人脸特征提取。

参数
hEngine

[in]

引擎 handle

width

[in]

图片宽度为 4 的倍数且大于 0

height

[in]

YUYV/I420/NV21/NV12 格式的图片高度为 2 的倍数,BGR24 格式

format

[in]

颜色空间格式

imgData

[in]

图片数据

faceInfo

[in]

单张人脸位置和角度信息

feature

[out]

人脸特征

的图片高度不限制

返回值
成功返回 MOK,否则返回失败 codes。

3.1.5 ASFFaceFeatureCompare
原型
MRESULT ASFFaceFeatureCompare(
MHandle

hEngine,

LPASF_FaceFeature

feature1,

LPASF_FaceFeature

feature2,

MFloat*

confidenceLevel

);

功能描述
人脸特征比对。

参数
hEngine

[in]

引擎 handle

feature1

[in]

待比对的人脸特征

feature2

[in]

待比对的人脸特征

confidenceLevel

[out]

比对结果,置信度数值

返回值
成功返回 MOK,否则返回失败 codes。

3.1.6 ASFProcess
原型
MRESULT ASFProcess(
MHandle

hEngine,

MInt32

width,

MInt32

height,

MInt32

format,

MUInt8*

imgData,

LPASF_MultiFaceInfo

detectedFaces,

MInt32

combinedMask

);

功能描述
人脸信息检测(年龄/性别/人脸 3D 角度),最多支持 4 张人脸信息检测,超过部分返回未知。

参数
hEngine

[in]

引擎 handle

width

[in]

图片宽度为 4 的倍数且大于 0

height

[in]

YUYV/I420/NV21/NV12 格式的图片高度为 2 的倍数,BGR24 格式
的图片高度不限制

format

[in]

颜色空间格式

imgData

[in]

图片数据

detectedFaces

[in]

检测到的人脸信息

combinedMask

[in]

初始化中参数 combinedMask 与 ASF_AGE| ASF_GENDER|
ASF_FACE3DANGLE 的交集的子集

返回值
成功返回 MOK,否则返回失败 codes。

3.1.7 ASFGetAge
原型
MRESULT ASFGetAge(

);

MHandle

hEngine,

LPASF_AgeInfo

ageInfo

功能描述
获取年龄信息。

参数
hEngine

[in]

引擎 handle

ageInfo

[out]

检测到的年龄信息

返回值
成功返回 MOK,否则返回失败 codes。

3.1.8 ASFGetGender
原型
MRESULT ASFGetGender(
MHandle

hEngine,

LPASF_GenderInfo

genderInfo

);

功能描述
获取性别信息。

参数
hEngine

[in]

引擎 handle

genderInfo

[out]

检测到的性别信息

返回值
成功返回 MOK,否则返回失败 codes。

3.1.9 ASFGetFace3DAngle
原型
MRESULT ASFGetFace3DAngle(
MHandle

hEngine,

LPASF_Face3DAngle

p3DAngleInfo

);

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

参数
hEngine

[in]

引擎 handle

p3DAngleInfo

[out]

检测到脸部 3D 角度信息

返回值
成功返回 MOK,否则返回失败 codes。

3.1.10ASFGetVersion
原型
const ASF_VERSION* ASFGetVersion(
MHandle

hEngine

);

功能描述
获取版本信息。

参数
hEngine

[in]

引擎 handle

返回值
成功返回版本信息,否则返回 MNull。

3.1.11 ASFUninitEngine
原型
MRESULT ASFUninitEngine(
[in] 引擎 handle

MHandle hEngine
);

功能描述
销毁引擎。

参数
hEngine

[in]

引擎 handle

返回值
成功返回 MOK,否则返回失败 codes。

3.2 错误码概览
错误码名

十六进制

十进制

错误码说明

MOK

0

0

成功

MERR_UNKNOWN

1

1

错误原因不明

MERR_INVALID_PARAM

2

2

无效的参数

MERR_UNSUPPORTED

3

3

引擎不支持

MERR_NO_MEMORY

4

4

内存不足

MERR_BAD_STATE

5

5

状态错误

MERR_USER_CANCEL

6

6

用户取消相关操作

MERR_EXPIRED

7

7

操作时间过期

MERR_USER_PAUSE

8

8

用户暂停操作

MERR_BUFFER_OVERFLOW

9

9

缓冲上溢

MERR_BUFFER_UNDERFLOW

A

10

缓冲下溢

MERR_NO_DISKSPACE

B

11

存贮空间不足

MERR_COMPONENT_NOT_EXIST

C

12

组件不存在

MERR_GLOBAL_DATA_NOT_EXIST

D

13

全局数据不存在

MERR_FSDK_INVALID_APP_ID

7001

28673

无效的 App Id

MERR_FSDK_INVALID_SDK_ID

7002

28674

无效的 SDK key

MERR_FSDK_INVALID_ID_PAIR

7003

28675

AppId 和 SDKKey 不匹配

MERR_FSDK_MISMATCH_ID_AND_
SDK

7004

28676

SDKKey 和使用的 SDK 不匹配

MERR_FSDK_SYSTEM_VERSION_U
NSUPPORTED

7005

28677

系统版本不被当前 SDK 所支持

MERR_FSDK_LICENCE_EXPIRED

7006

28678

SDK 有效期过期,需要重新下载更新

MERR_FSDK_FR_INVALID_MEMOR
Y_INFO

12001

73729

无效的输入内存

MERR_FSDK_FR_INVALID_IMAGE
_INFO

12002

73730

无效的输入图像参数

MERR_FSDK_FR_INVALID_FACE_
INFO

12003

73731

无效的脸部信息

MERR_FSDK_FR_NO_GPU_AVAILA
BLE

12004

73732

当前设备无 GPU 可用

MERR_FSDK_FR_MISMATCHED_FE
ATURE_LEVEL

12005

73733

待比较的两个人脸特征的版本不一致

MERR_FSDK_FACEFEATURE_UNKN
OWN

14001

81921

人脸特征检测错误未知

MERR_FSDK_FACEFEATURE_MEMO
RY

14002

81922

人脸特征检测内存错误

MERR_FSDK_FACEFEATURE_INVA
LID_FORMAT

14003

81923

人脸特征检测格式错误

MERR_FSDK_FACEFEATURE_INVA
LID_PARAM

14004

81924

人脸特征检测参数错误

MERR_FSDK_FACEFEATURE_LOW_
CONFIDENCE_LEVEL

14005

81925

人脸特征检测结果置信度低

MERR_ASF_EX_FEATURE_UNSUPP
ORTED_ON_INIT

15001

86017

Engine 不支持的检测属性

MERR_ASF_EX_FEATURE_UNINIT
ED

15002

86018

需要检测的属性未初始化

MERR_ASF_EX_FEATURE_UNPROC

15003

86019

待获取的属性未在 process 中处理过

ESSED
MERR_ASF_EX_FEATURE_UNSUPP
ORTED_ON_PROCESS

15004

86020

PROCESS 不支持的检测属性,例如 FR,
有自己独立的处理函数

MERR_ASF_EX_INVALID_IMAGE_
INFO

15005

86021

无效的输入图像

MERR_ASF_EX_INVALID_FACE_I
NFO

15006

86022

无效的脸部信息

MERR_ASF_ACTIVATION_FAIL

16001

90113

SDK 激活失败,请打开读写权限

MERR_ASF_ALREADY_ACTIVATED

16002

90114

SDK 已激活

MERR_ASF_NOT_ACTIVATED

16003

90115

SDK 未激活

MERR_ASF_SCALE_NOT_SUPPORT

16004

90116

detectFaceScaleVal 不支持

MERR_ASF_VERION_MISMATCH

16005

90117

SDK 版本不匹配

MERR_ASF_DEVICE_MISMATCH

16006

90118

设备不匹配

MERR_ASF_UNIQUE_IDENTIFIER
_MISMATCH

16007

90119

唯一标识不匹配

MERR_ASF_PARAM_NULL

16008

90120

参数为空

MERR_ASF_LIVENESS_EXPIRED

16009

90121

活体检测功能已过期

MERR_ASF_VERSION_NOT_SUPPO
RT

1600A

90122

版本不支持

MERR_ASF_SIGN_ERROR

1600B

90123

签名错误

MERR_ASF_DATABASE_ERROR

1600C

90124

数据库插入错误

MERR_ASF_UNIQUE_CHECKOUT_F
AIL

1600D

90125

唯一标识符校验失败

MERR_ASF_COLOR_SPACE_NOT_S
UPPORT

1600E

90126

颜色空间不支持

MERR_ASF_IMAGE_WIDTH_HEIGH
T_NOT_SUPPORT

1600F

90127

图片宽度或高度不支持

MERR_ASF_READ_PHONE_STATE_
DENIED

16010

90128

android.permission.READ_PHONE_ST
ATE 权限被拒绝

MERR_ASF_ACTIVATION_DATA_D
ESTROYED

16011

90129

激活数据被破坏,请删除激活文件,重
新进行激活

MERR_ASF_SERVER_UNKNOWN_ER
ROR

16012

90130

服务端未知错误

MERR_ASF_NETWORK_COULDNT_R
ESOLVE_HOST

17001

94209

无法解析主机地址

MERR_ASF_NETWORK_COULDNT_C
ONNECT_SERVER

17002

94210

无法连接服务器

MERR_ASF_NETWORK_CONNECT_T
IMEOUT

17003

94211

网络连接超时

MERR_ASF_NETWORK_UNKNOWN_E

17004

94212

网络未知错误

RROR

3.3 示例代码
#include "stdafx.h"
#include "arcsoft_face_sdk.h"
#include "amcomdef.h"
#include "asvloffscreen.h"
#include "merror.h"
#include 
#include 
#include 
#include 
#include 
using namespace std;
#pragma comment(lib, "libarcsoft_face_engine.lib")
#define APPID "官网下载的APPID"
#define SDKKey "官网下载的APPKEY"
#define SafeFree(p) { if ((p)) free(p); (p) = NULL; }
#define SafeArrayDelete(p) { if ((p)) delete [] (p); (p) = NULL; }
#define SafeDelete(p) { if ((p)) delete (p); (p) = NULL; }
int main()
{
//激活SDK
MRESULT res = ASFActivation(APPID, SDKKey);
if (MOK != res && MERR_ASF_BASE_ALREADY_ACTIVATED != res)
printf("ALActivation fail: %d\n", res);
else
printf("ALActivation sucess: %d\n", res);
//初始化引擎
MHandle handle = NULL;
MInt32 mask = ASF_FACE_DETECT | ASF_FACERECOGNITION | ASF_AGE | ASF_GENDER |
ASF_FACE3DANGLE;
res = ASFInitEngine(ASF_DETECT_MODE_IMAGE, ASF_OP_0_ONLY, 16, 5, mask, &handle);
if (res != MOK)
printf("ALInitEngine fail: %d\n", res);
else

printf("ALInitEngine sucess: %d\n", res);
// 人脸检测
IplImage* img = cvLoadImage("图片路径");
IplImage* img1 = cvLoadImage("图片路径");
if (img && img1)
{
ASF_MultiFaceInfo detectedFaces1 = { 0 };
ASF_SingleFaceInfo SingleDetectedFaces1 = { 0 };
ASF_FaceFeature feature1 = { 0 };
ASF_FaceFeature copyfeature1 = { 0 };
res = ASFDetectFaces(handle, img->width, img->height, ASVL_PAF_RGB24_B8G8R8,
(MUInt8*)img->imageData, &detectedFaces1);
if (MOK == res)
{
SingleDetectedFaces1.faceRect.left = detectedFaces1.faceRect[0].left;
SingleDetectedFaces1.faceRect.top = detectedFaces1.faceRect[0].top;
SingleDetectedFaces1.faceRect.right = detectedFaces1.faceRect[0].right;
SingleDetectedFaces1.faceRect.bottom = detectedFaces1.faceRect[0].bottom;
SingleDetectedFaces1.faceOrient = detectedFaces1.faceOrient[0];
res = ASFFaceFeatureExtract(handle, img->width, img->height,
ASVL_PAF_RGB24_B8G8R8, (MUInt8*)img->imageData, &SingleDetectedFaces1, &feature1);
if (res == MOK)
{
//拷贝feature
copyfeature1.featureSize = feature1.featureSize;
copyfeature1.feature = (MByte *)malloc(feature1.featureSize);
memset(copyfeature1.feature, 0, feature1.featureSize);
memcpy(copyfeature1.feature, feature1.feature, feature1.featureSize);
}
else
printf("ASFFaceFeatureExtract 1 fail: %d\n", res);
}
else
printf("ASFDetectFaces 1 fail: %d\n", res);
//第二张人脸提取特征
ASF_MultiFaceInfo detectedFaces2 = { 0 };
ASF_SingleFaceInfo SingleDetectedFaces2 = { 0 };
ASF_FaceFeature feature2 = { 0 };
res = ASFDetectFaces(handle, img1->width, img1->height, ASVL_PAF_RGB24_B8G8R8,
(MUInt8*)img1->imageData, &detectedFaces2);

if (MOK == res)
{
SingleDetectedFaces2.faceRect.left = detectedFaces2.faceRect[0].left;
SingleDetectedFaces2.faceRect.top = detectedFaces2.faceRect[0].top;
SingleDetectedFaces2.faceRect.right = detectedFaces2.faceRect[0].right;
SingleDetectedFaces2.faceRect.bottom = detectedFaces2.faceRect[0].bottom;
SingleDetectedFaces2.faceOrient = detectedFaces2.faceOrient[0];
res = ASFFaceFeatureExtract(handle, img1->width, img1->height,
ASVL_PAF_RGB24_B8G8R8, (MUInt8*)img1->imageData, &SingleDetectedFaces2, &feature2);
if (MOK != res)
printf("ASFFaceFeatureExtract 2 fail: %d\n", res);
}
else
printf("ASFDetectFaces 2 fail: %d\n", res);
// 单人脸特征比对
MFloat confidenceLevel;
res = ASFFaceFeatureCompare(handle, ©feature1, &feature2, &confidenceLevel);
if (res != MOK)
printf("ASFFaceFeatureCompare fail: %d\n", res);
else
printf("ASFFaceFeatureCompare sucess: %lf\n", confidenceLevel);
// 人脸信息检测
MInt32 processMask = ASF_AGE | ASF_GENDER | ASF_FACE3DANGLE;
res = ASFProcess(handle, img1->width, img1->height, ASVL_PAF_RGB24_B8G8R8,
(MUInt8*)img1->imageData, &detectedFaces1, processMask);
if (res != MOK)
printf("ASFProcess fail: %d\n", res);
else
printf("ASFProcess sucess: %d\n", res);
// 获取年龄
ASF_AgeInfo ageInfo = { 0 };
res = ASFGetAge(handle, &ageInfo);
if (res != MOK)
printf("ASFGetAge fail: %d\n", res);
else
printf("ASFGetAge sucess: %d\n", res);
// 获取性别
ASF_GenderInfo genderInfo = { 0 };
res = ASFGetGender(handle, &genderInfo);

if (res != MOK)
printf("ASFGetGender fail: %d\n", res);
else
printf("ASFGetGender sucess: %d\n", res);
// 获取3D角度
ASF_Face3DAngle angleInfo = { 0 };
res = ASFGetFace3DAngle(handle, &angleInfo);
if (res != MOK)
printf("ASFGetFace3DAngle fail: %d\n", res);
else
printf("ASFGetFace3DAngle sucess: %d\n", res);
SafeFree(copyfeature1.feature);

//释放内存

}
//获取版本信息
const ASF_VERSION* pVersionInfo = ASFGetVersion(handle);
//反初始化
res = ASFUninitEngine(handle);
if (res != MOK)
printf("ALUninitEngine fail: %d\n", res);
else
printf("ALUninitEngine sucess: %d\n", res);
getchar();
return 0;
}

4. 常见问题
4.1 FAQ
Q:调用初始化引擎接口返回设备不匹配(90118)的情况下,应该怎么解决?
A:工程激活之后拷贝到其他设备上或激活文件被损坏,在初始化引擎时会返回设备不
匹配的错误码提示信息,应该到工程目录下或执行程序同级目录下找到 asf_install.dat
文件删除并重新激活 SDK;

Q:初始化引擎时检测方向(detectFaceOrientPriority)应该怎么选择?
A:SDK 初始化引擎中可选择仅对 0 度、90 度、180 度、270 度单角度进行人脸检测,
也可选择全角度进行检测;根据应用场景,推荐使用单角度进行人脸检测,因为选择全
角度的情况下,算法中会对每个角度检测一遍,导致性能相对于单角度较慢。

Q:初始化引擎时(detectFaceScaleVal)参数多大比较合适?
A:用于数值化表示的最小人脸尺寸,该尺寸代表人脸尺寸相对于图片长边的占比。video
模式有效值范围[2,16], Image 模式有效值范围[2,32],多数情况下推荐值为 16,特殊情
况下可根据具体场景下进行设置。

Q:初始化引擎之后调用其他接口返回错误码 86018,该怎么解决?
A:86018 即需要检测的属性未初始化,需要查看调用接口的宏有没有在初始化引擎时
在 combinedMask 参数中加入。

Q:进行人脸比对时一般会调用 ASFDetectFaces 和 ASFFaceFeatureExtract 两次,可能会
导致比对的相似度一直为 1?
A:初始化引擎之后会提前分配好需要使用的内存,所以第二次调用 ASFDetectFaces 和
ASFFaceFeatureExtract 接口输出的结果会覆盖第一次输出的结果,此时应用层定义的指
针指向同一块内存,得到的数据是一样的,所以导致比对结果为 1。
方案一:ASFDetectFaces 和 ASFFaceFeatureExtract 接口可以在第一次调用时进行数据深
拷贝。
方 案 二 : ASFDetectFaces 调 用 之 后 进 行 特 征 提 取 ( ASFFaceFeatureExtract ), 如 果
ASFDetectFaces 输 出 结 果 没 用 其 他 用 途 , 则 不 需 要 进 行 深 拷 贝 , 但 是
ASFFaceFeatureExtract 输出结果需要进行深拷贝用于比对。

Q:调用 ASFDetectFaces、ASFFaceFeatureExtract 和 ASFProcess 接口返回 90127 错误码,
该怎么解决?
A:
ArcSoft SDK 对图像尺寸做了限制,
宽高大于 0,宽度为 4 的倍数,
YUYV/I420/NV21/NV12
格式的图片高度为 2 的倍数,BGR24 格式的图片高度不限制;如果遇到 90127 请检查传
入的图片尺寸是否符合要求,若不符合可对图片进行适当的裁剪。

Q: 人脸检测结果的人脸框 Rect 为何有时会溢出传入图像的边界?
A: Rect 溢出边界可能是人脸只有一部分在图像中,算法会对人脸的位置进行估计。

Q: 为何调用引擎有时会出现 crash?
A:若在引擎调用过程中进行销毁引擎则可能会导致 crash。在使用过程中应避免在销毁
引擎时还在使用引擎,尤其是做特征提取或活体检测等耗时操作时销毁引擎,如加锁解
决。

Q: 如何将人脸识别 1:1 进行开发改为 1:n?
A: 先将人脸特征数据用本地文件、数据库或者其他的方式存储下来,若检测出结果需
要显示图像可以保存对应的图像。之后循环对特征值进行对比,相似度最高者若超过您
设置的阈值则输出相关信息。

Q: Android 人脸检测结果的人脸框绘制到 View 上为何位置不对?
A: 人脸检测结果的人脸框位置是基于输入图像的,例如在竖屏模式下,假设 View 的宽
高是 1080x1920,相机是后置相机,并且预览数据宽高为 1920x1080,有一个被检测到
的 人 脸 位 置 是 ( left,top,right,bottom ), 那 么 需 要 绘 制 到 View 上 的 Rect 就 是
(bottom,left,1080-top,right)
,
相当于顺时针旋转 90 度,其他角度可用类似的方法计算。

Q: MERR_FSDK_FACEFEATURE_LOW_CONFIDENCE_LEVEL,人脸检测结果置信度低是什么
情况导致的?
A: 图片模糊或者传入的人脸框不正确。

Q:哪些因素会影响人脸检测、人脸跟踪、人脸特征提取等 SDK 调用所用时间?
A:硬件性能、图片质量等。

4.2 其他帮助
SDK 交流论坛:http://ai.arcsoft.com.cn/bbs/



Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.5
Linearized                      : No
Page Count                      : 26
Language                        : zh-CN
Tagged PDF                      : Yes
Author                          : Windows 用户
Creator                         : Microsoft® Word 2010
Create Date                     : 2018:11:08 10:17:57+08:00
Modify Date                     : 2018:11:08 10:17:57+08:00
Producer                        : Microsoft® Word 2010
EXIF Metadata provided by EXIF.tools

Navigation menu