hzt_asc 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ArcFace64.dat +1 -0
- package/CMakeLists.txt +46 -0
- package/ask.cc +543 -0
- package/ask.h +40 -0
- package/askface.cc +8 -0
- package/images/20200829105722.jpg +0 -0
- package/images/demo.png +0 -0
- package/images/demo2.png +0 -0
- package/images/test.png +0 -0
- package/inc/amcomdef.h +98 -0
- package/inc/arcsoft_face_sdk.h +378 -0
- package/inc/asvloffscreen.h +183 -0
- package/inc/merror.h +141 -0
- package/index.js +2 -0
- package/package.json +22 -0
- package/sample/ArcFace64.dat +1 -0
- package/sample/demo.js +74 -0
- package/so/libarcsoft_face.so +0 -0
- package/so/libarcsoft_face_engine.so +0 -0
package/inc/amcomdef.h
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#ifndef __AMCOMDEF_H__
|
|
2
|
+
#define __AMCOMDEF_H__
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
#if defined(WINCE) || defined(WIN32)
|
|
6
|
+
|
|
7
|
+
#ifndef _WCHAR_T_DEFINED
|
|
8
|
+
typedef unsigned short wchar_t;
|
|
9
|
+
#define _WCHAR_T_DEFINED
|
|
10
|
+
#endif//#ifndef _WCHAR_T_DEFINED
|
|
11
|
+
|
|
12
|
+
#elif (defined(EKA2) && defined(__GCCE__))
|
|
13
|
+
#ifndef _STDDEF_H_
|
|
14
|
+
#ifndef __cplusplus
|
|
15
|
+
typedef unsigned short wchar_t;
|
|
16
|
+
#define __wchar_t_defined
|
|
17
|
+
#endif
|
|
18
|
+
#endif
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
#elif defined(__GCCE__) || defined(__GCC32__)
|
|
22
|
+
#ifndef _STDDEF_H_
|
|
23
|
+
typedef unsigned short wchar_t;
|
|
24
|
+
#endif
|
|
25
|
+
|
|
26
|
+
#endif//#if defined(WINCE)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
#if defined(__GCC32__) || defined(__GCCE__) || defined(WINCE) || defined(WIN32)
|
|
30
|
+
typedef wchar_t MWChar;
|
|
31
|
+
#else
|
|
32
|
+
typedef unsigned short MWChar;
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
typedef long MLong;
|
|
37
|
+
typedef float MFloat;
|
|
38
|
+
typedef double MDouble;
|
|
39
|
+
typedef unsigned char MByte;
|
|
40
|
+
typedef unsigned short MWord;
|
|
41
|
+
typedef unsigned int MDWord;
|
|
42
|
+
typedef void* MHandle;
|
|
43
|
+
typedef char MChar;
|
|
44
|
+
typedef long MBool;
|
|
45
|
+
typedef void MVoid;
|
|
46
|
+
typedef void* MPVoid;
|
|
47
|
+
typedef char* MPChar;
|
|
48
|
+
typedef short MShort;
|
|
49
|
+
typedef const char* MPCChar;
|
|
50
|
+
typedef MLong MRESULT;
|
|
51
|
+
typedef MDWord MCOLORREF;
|
|
52
|
+
typedef signed char MInt8;
|
|
53
|
+
typedef unsigned char MUInt8;
|
|
54
|
+
typedef signed short MInt16;
|
|
55
|
+
typedef unsigned short MUInt16;
|
|
56
|
+
typedef signed int MInt32;
|
|
57
|
+
typedef unsigned int MUInt32;
|
|
58
|
+
|
|
59
|
+
#if !defined(M_UNSUPPORT64)
|
|
60
|
+
#if defined(_MSC_VER)
|
|
61
|
+
typedef signed __int64 MInt64;
|
|
62
|
+
typedef unsigned __int64 MUInt64;
|
|
63
|
+
#else
|
|
64
|
+
typedef signed long long MInt64;
|
|
65
|
+
typedef unsigned long long MUInt64;
|
|
66
|
+
#endif
|
|
67
|
+
#endif
|
|
68
|
+
|
|
69
|
+
typedef struct __tag_rect
|
|
70
|
+
{
|
|
71
|
+
MInt32 left;
|
|
72
|
+
MInt32 top;
|
|
73
|
+
MInt32 right;
|
|
74
|
+
MInt32 bottom;
|
|
75
|
+
} MRECT, *PMRECT;
|
|
76
|
+
|
|
77
|
+
typedef struct __tag_point
|
|
78
|
+
{
|
|
79
|
+
MInt32 x;
|
|
80
|
+
MInt32 y;
|
|
81
|
+
} MPOINT, *PMPOINT;
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
#define MNull 0
|
|
85
|
+
#define MFalse 0
|
|
86
|
+
#define MTrue 1
|
|
87
|
+
|
|
88
|
+
#ifndef MAX_PATH
|
|
89
|
+
#define MAX_PATH 256
|
|
90
|
+
#endif
|
|
91
|
+
|
|
92
|
+
#ifdef M_WIDE_CHAR
|
|
93
|
+
#define MTChar MWChar
|
|
94
|
+
#else
|
|
95
|
+
#define MTChar MChar
|
|
96
|
+
#endif
|
|
97
|
+
|
|
98
|
+
#endif
|
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
/*******************************************************************************
|
|
2
|
+
* Copyright(c) ArcSoft, All right reserved.
|
|
3
|
+
*
|
|
4
|
+
* This file is ArcSoft's property. It contains ArcSoft's trade secret, proprietary
|
|
5
|
+
* and confidential information.
|
|
6
|
+
*
|
|
7
|
+
* DO NOT DISTRIBUTE, DO NOT DUPLICATE OR TRANSMIT IN ANY FORM WITHOUT PROPER
|
|
8
|
+
* AUTHORIZATION.
|
|
9
|
+
*
|
|
10
|
+
* If you are not an intended recipient of this file, you must not copy,
|
|
11
|
+
* distribute, modify, or take any action in reliance on it.
|
|
12
|
+
*
|
|
13
|
+
* If you have received this file in error, please immediately notify ArcSoft and
|
|
14
|
+
* permanently delete the original and any copy of any file and any printout
|
|
15
|
+
* thereof.
|
|
16
|
+
*********************************************************************************/
|
|
17
|
+
|
|
18
|
+
#ifndef _ARCSOFT_SDK_ASF_H_
|
|
19
|
+
#define _ARCSOFT_SDK_ASF_H_
|
|
20
|
+
|
|
21
|
+
#include "amcomdef.h"
|
|
22
|
+
#include "asvloffscreen.h"
|
|
23
|
+
|
|
24
|
+
#ifdef __cplusplus
|
|
25
|
+
extern "C" {
|
|
26
|
+
#endif
|
|
27
|
+
|
|
28
|
+
#define ASF_NONE 0x00000000 //无属性
|
|
29
|
+
#define ASF_FACE_DETECT 0x00000001 //此处detect可以是tracking或者detection两个引擎之一,具体的选择由detect mode 确定
|
|
30
|
+
#define ASF_FACERECOGNITION 0x00000004 //人脸特征
|
|
31
|
+
#define ASF_AGE 0x00000008 //年龄
|
|
32
|
+
#define ASF_GENDER 0x00000010 //性别
|
|
33
|
+
#define ASF_FACE3DANGLE 0x00000020 //3D角度
|
|
34
|
+
#define ASF_LIVENESS 0x00000080 //RGB活体
|
|
35
|
+
#define ASF_IR_LIVENESS 0x00000400 //IR活体
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
//检测模式
|
|
40
|
+
enum ASF_DetectMode{
|
|
41
|
+
ASF_DETECT_MODE_VIDEO = 0x00000000, //Video模式,一般用于多帧连续检测
|
|
42
|
+
ASF_DETECT_MODE_IMAGE = 0xFFFFFFFF //Image模式,一般用于静态图的单次检测
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
//检测时候人脸角度的优先级,在文档中初始化接口中有图示说明,请参考
|
|
47
|
+
enum ASF_OrientPriority {
|
|
48
|
+
ASF_OP_0_ONLY = 0x1, // 常规预览下正方向
|
|
49
|
+
ASF_OP_90_ONLY = 0x2, // 基于0°逆时针旋转90°的方向
|
|
50
|
+
ASF_OP_270_ONLY = 0x3, // 基于0°逆时针旋转270°的方向
|
|
51
|
+
ASF_OP_180_ONLY = 0x4, // 基于0°旋转180°的方向(逆时针、顺时针效果一样)
|
|
52
|
+
ASF_OP_ALL_OUT = 0x5 // 全角度
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
//orientation 角度,逆时针方向
|
|
56
|
+
enum ASF_OrientCode {
|
|
57
|
+
ASF_OC_0 = 0x1, // 0 degree
|
|
58
|
+
ASF_OC_90 = 0x2, // 90 degree
|
|
59
|
+
ASF_OC_270 = 0x3, // 270 degree
|
|
60
|
+
ASF_OC_180 = 0x4, // 180 degree
|
|
61
|
+
ASF_OC_30 = 0x5, // 30 degree
|
|
62
|
+
ASF_OC_60 = 0x6, // 60 degree
|
|
63
|
+
ASF_OC_120 = 0x7, // 120 degree
|
|
64
|
+
ASF_OC_150 = 0x8, // 150 degree
|
|
65
|
+
ASF_OC_210 = 0x9, // 210 degree
|
|
66
|
+
ASF_OC_240 = 0xa, // 240 degree
|
|
67
|
+
ASF_OC_300 = 0xb, // 300 degree
|
|
68
|
+
ASF_OC_330 = 0xc // 330 degree
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
//检测模型
|
|
72
|
+
enum ASF_DetectModel {
|
|
73
|
+
ASF_DETECT_MODEL_RGB = 0x1 //RGB图像检测模型
|
|
74
|
+
//预留扩展其他检测模型
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
//人脸比对可选的模型
|
|
78
|
+
enum ASF_CompareModel{
|
|
79
|
+
ASF_LIFE_PHOTO = 0x1, //用于生活照之间的特征比对,推荐阈值0.80
|
|
80
|
+
ASF_ID_PHOTO = 0x2 //用于证件照或生活照与证件照之间的特征比对,推荐阈值0.82
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
//版本信息
|
|
84
|
+
typedef struct {
|
|
85
|
+
MPChar Version; // 版本号
|
|
86
|
+
MPChar BuildDate; // 构建日期
|
|
87
|
+
MPChar CopyRight; // Copyright
|
|
88
|
+
}ASF_VERSION, *LPASF_VERSION;
|
|
89
|
+
|
|
90
|
+
//图像数据
|
|
91
|
+
typedef LPASVLOFFSCREEN LPASF_ImageData;
|
|
92
|
+
|
|
93
|
+
//单人脸信息
|
|
94
|
+
typedef struct {
|
|
95
|
+
MRECT faceRect; // 人脸框信息
|
|
96
|
+
MInt32 faceOrient; // 输入图像的角度,可以参考 ArcFaceCompare_OrientCode
|
|
97
|
+
} ASF_SingleFaceInfo, *LPASF_SingleFaceInfo;
|
|
98
|
+
|
|
99
|
+
//多人脸信息
|
|
100
|
+
typedef struct {
|
|
101
|
+
MRECT* faceRect; // 人脸框信息
|
|
102
|
+
MInt32* faceOrient; // 输入图像的角度,可以参考 ArcFaceCompare_OrientCode .
|
|
103
|
+
MInt32 faceNum; // 检测到的人脸个数
|
|
104
|
+
MInt32* faceID; // face ID,IMAGE模式下不返回FaceID
|
|
105
|
+
}ASF_MultiFaceInfo, *LPASF_MultiFaceInfo;
|
|
106
|
+
|
|
107
|
+
// 激活文件信息
|
|
108
|
+
typedef struct {
|
|
109
|
+
MPChar startTime; //开始时间
|
|
110
|
+
MPChar endTime; //截止时间
|
|
111
|
+
MPChar platform; //平台
|
|
112
|
+
MPChar sdkType; //sdk类型
|
|
113
|
+
MPChar appId; //APPID
|
|
114
|
+
MPChar sdkKey; //SDKKEY
|
|
115
|
+
MPChar sdkVersion; //SDK版本号
|
|
116
|
+
MPChar fileVersion; //激活文件版本号
|
|
117
|
+
}ASF_ActiveFileInfo, *LPASF_ActiveFileInfo;
|
|
118
|
+
|
|
119
|
+
/*******************************************************************************************
|
|
120
|
+
* 获取激活文件信息接口
|
|
121
|
+
*******************************************************************************************/
|
|
122
|
+
MRESULT ASFGetActiveFileInfo(
|
|
123
|
+
LPASF_ActiveFileInfo activeFileInfo // [out] 激活文件信息
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
/*******************************************************************************************
|
|
127
|
+
* 在线激活接口
|
|
128
|
+
*******************************************************************************************/
|
|
129
|
+
MRESULT ASFOnlineActivation(
|
|
130
|
+
MPChar AppId, // [in] APPID 官网下载
|
|
131
|
+
MPChar SDKKey // [in] SDKKEY 官网下载
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
/*******************************************************************************************
|
|
135
|
+
* 在线激活接口,该接口与ASFOnlineActivation接口功能一致,推荐使用该接口
|
|
136
|
+
*******************************************************************************************/
|
|
137
|
+
MRESULT ASFActivation(
|
|
138
|
+
MPChar AppId, // [in] APPID 官网下载
|
|
139
|
+
MPChar SDKKey // [in] SDKKEY 官网下载
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
/************************************************************************
|
|
143
|
+
* 初始化引擎
|
|
144
|
+
************************************************************************/
|
|
145
|
+
MRESULT ASFInitEngine(
|
|
146
|
+
ASF_DetectMode detectMode, // [in] AF_DETECT_MODE_VIDEO 视频模式:适用于摄像头预览,视频文件识别
|
|
147
|
+
// AF_DETECT_MODE_IMAGE 图片模式:适用于静态图片的识别
|
|
148
|
+
ASF_OrientPriority detectFaceOrientPriority, // [in] 检测脸部的角度优先值,参考 ArcFaceCompare_OrientPriority
|
|
149
|
+
MInt32 detectFaceScaleVal, // [in] 用于数值化表示的最小人脸尺寸,该尺寸代表人脸尺寸相对于图片长边的占比
|
|
150
|
+
// video 模式有效值范围[2, 32], 推荐值为 16
|
|
151
|
+
// image 模式有效值范围[2, 32], 推荐值为 32
|
|
152
|
+
MInt32 detectFaceMaxNum, // [in] 最大需要检测的人脸个数
|
|
153
|
+
MInt32 combinedMask, // [in] 用户选择需要检测的功能组合,可单个或多个
|
|
154
|
+
MHandle* hEngine // [out] 初始化返回的引擎handle
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
/******************************************************
|
|
158
|
+
* VIDEO模式:人脸追踪 IMAGE模式:人脸检测
|
|
159
|
+
******************************************************/
|
|
160
|
+
MRESULT ASFDetectFaces(
|
|
161
|
+
MHandle hEngine, // [in] 引擎handle
|
|
162
|
+
MInt32 width, // [in] 图片宽度
|
|
163
|
+
MInt32 height, // [in] 图片高度
|
|
164
|
+
MInt32 format, // [in] 颜色空间格式
|
|
165
|
+
MUInt8* imgData, // [in] 图片数据
|
|
166
|
+
LPASF_MultiFaceInfo detectedFaces, // [out]检测到的人脸信息
|
|
167
|
+
ASF_DetectModel detectModel = ASF_DETECT_MODEL_RGB // [in] 预留字段,当前版本使用默认参数即可
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
/******************************************************
|
|
171
|
+
* VIDEO模式:人脸追踪 IMAGE模式:人脸检测
|
|
172
|
+
* 图像数据以结构体形式传入,对采用更高字节对齐方式的图像兼容性更好
|
|
173
|
+
******************************************************/
|
|
174
|
+
MRESULT ASFDetectFacesEx(
|
|
175
|
+
MHandle hEngine, // [in] 引擎handle
|
|
176
|
+
LPASF_ImageData imgData, // [in] 图片数据
|
|
177
|
+
LPASF_MultiFaceInfo detectedFaces, // [out] 检测到的人脸信息
|
|
178
|
+
ASF_DetectModel detectModel = ASF_DETECT_MODEL_RGB // [in] 预留字段,当前版本使用默认参数即可
|
|
179
|
+
);
|
|
180
|
+
|
|
181
|
+
//******************************** 活体阈值设置 **********************************************
|
|
182
|
+
typedef struct {
|
|
183
|
+
MFloat thresholdmodel_BGR;
|
|
184
|
+
MFloat thresholdmodel_IR;
|
|
185
|
+
}ASF_LivenessThreshold, *LPASF_LivenessThreshold;
|
|
186
|
+
|
|
187
|
+
/************************************************************************
|
|
188
|
+
* 取值范围[0-1],默认值 BGR:0.5 IR:0.7, 用户可以根据实际需求,设置不同的阈值
|
|
189
|
+
************************************************************************/
|
|
190
|
+
MRESULT ASFSetLivenessParam(
|
|
191
|
+
MHandle hEngine, // [in] 引擎handle
|
|
192
|
+
LPASF_LivenessThreshold threshold // [in] 活体置信度
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
/************************************************************************
|
|
196
|
+
* 年龄/性别/人脸3D角度(该接口仅支持RGB图像),最多支持4张人脸信息检测,超过部分返回未知
|
|
197
|
+
* RGB活体仅支持单人脸检测,该接口不支持检测IR活体
|
|
198
|
+
************************************************************************/
|
|
199
|
+
MRESULT ASFProcess(
|
|
200
|
+
MHandle hEngine, // [in] 引擎handle
|
|
201
|
+
MInt32 width, // [in] 图片宽度
|
|
202
|
+
MInt32 height, // [in] 图片高度
|
|
203
|
+
MInt32 format, // [in] 颜色空间格式
|
|
204
|
+
MUInt8* imgData, // [in] 图片数据
|
|
205
|
+
LPASF_MultiFaceInfo detectedFaces, // [in] 人脸信息,用户根据待检测的功能选择需要使用的人脸。
|
|
206
|
+
MInt32 combinedMask // [in] 只支持初始化时候指定需要检测的功能,在process时进一步在这个已经指定的功能集中继续筛选
|
|
207
|
+
// 例如初始化的时候指定检测年龄和性别,在process的时候可以只检测年龄,但是不能检测除年龄和性别之外的功能
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
/************************************************************************
|
|
211
|
+
* 年龄/性别/人脸3D角度(该接口仅支持RGB图像),最多支持4张人脸信息检测,超过部分返回未知
|
|
212
|
+
* RGB活体仅支持单人脸检测,该接口不支持检测IR活体
|
|
213
|
+
* 图像数据以结构体形式传入,对采用更高字节对齐方式的图像兼容性更好
|
|
214
|
+
************************************************************************/
|
|
215
|
+
MRESULT ASFProcessEx(
|
|
216
|
+
MHandle hEngine, // [in] 引擎handle
|
|
217
|
+
LPASF_ImageData imgData, // [in] 图片数据
|
|
218
|
+
LPASF_MultiFaceInfo detectedFaces, // [in] 人脸信息,用户根据待检测的功能选择需要使用的人脸。
|
|
219
|
+
MInt32 combinedMask // [in] 只支持初始化时候指定需要检测的功能,在process时进一步在这个已经指定的功能集中继续筛选
|
|
220
|
+
// 例如初始化的时候指定检测年龄和性别,在process的时候可以只检测年龄,但是不能检测除年龄和性别之外的功能
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
/************************************************************************
|
|
224
|
+
* 该接口目前仅支持单人脸IR活体检测(不支持年龄、性别、3D角度的检测),默认取第一张人脸
|
|
225
|
+
************************************************************************/
|
|
226
|
+
MRESULT ASFProcess_IR(
|
|
227
|
+
MHandle hEngine, // [in] 引擎handle
|
|
228
|
+
MInt32 width, // [in] 图片宽度
|
|
229
|
+
MInt32 height, // [in] 图片高度
|
|
230
|
+
MInt32 format, // [in] 颜色空间格式
|
|
231
|
+
MUInt8* imgData, // [in] 图片数据
|
|
232
|
+
LPASF_MultiFaceInfo detectedFaces, // [in] 人脸信息,用户根据待检测的功能选择需要使用的人脸。
|
|
233
|
+
MInt32 combinedMask // [in] 目前只支持传入ASF_IR_LIVENESS属性的传入,且初始化接口需要传入
|
|
234
|
+
);
|
|
235
|
+
|
|
236
|
+
/************************************************************************
|
|
237
|
+
* 该接口目前仅支持单人脸IR活体检测(不支持年龄、性别、3D角度的检测),默认取第一张人脸
|
|
238
|
+
* 图像数据以结构体形式传入,对采用更高字节对齐方式的图像兼容性更好
|
|
239
|
+
************************************************************************/
|
|
240
|
+
MRESULT ASFProcessEx_IR(
|
|
241
|
+
MHandle hEngine, // [in] 引擎handle
|
|
242
|
+
LPASF_ImageData imgData, // [in] 图片数据
|
|
243
|
+
LPASF_MultiFaceInfo detectedFaces, // [in] 人脸信息,用户根据待检测的功能选择需要使用的人脸。
|
|
244
|
+
MInt32 combinedMask // [in] 目前只支持传入ASF_IR_LIVENESS属性的传入,且初始化接口需要传入
|
|
245
|
+
);
|
|
246
|
+
|
|
247
|
+
/************************************************************************
|
|
248
|
+
* 销毁引擎
|
|
249
|
+
************************************************************************/
|
|
250
|
+
MRESULT ASFUninitEngine(
|
|
251
|
+
MHandle hEngine
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
/************************************************************************
|
|
255
|
+
* 获取版本信息
|
|
256
|
+
************************************************************************/
|
|
257
|
+
const ASF_VERSION ASFGetVersion();
|
|
258
|
+
|
|
259
|
+
//******************************** 人脸识别相关 *********************************************
|
|
260
|
+
typedef struct {
|
|
261
|
+
MByte* feature; // 人脸特征信息
|
|
262
|
+
MInt32 featureSize; // 人脸特征信息长度
|
|
263
|
+
}ASF_FaceFeature, *LPASF_FaceFeature;
|
|
264
|
+
|
|
265
|
+
/************************************************************************
|
|
266
|
+
* 单人脸特征提取
|
|
267
|
+
************************************************************************/
|
|
268
|
+
MRESULT ASFFaceFeatureExtract(
|
|
269
|
+
MHandle hEngine, // [in] 引擎handle
|
|
270
|
+
MInt32 width, // [in] 图片宽度
|
|
271
|
+
MInt32 height, // [in] 图片高度
|
|
272
|
+
MInt32 format, // [in] 颜色空间格式
|
|
273
|
+
MUInt8* imgData, // [in] 图片数据
|
|
274
|
+
LPASF_SingleFaceInfo faceInfo, // [in] 单张人脸位置和角度信息
|
|
275
|
+
LPASF_FaceFeature feature // [out] 人脸特征
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
/************************************************************************
|
|
279
|
+
* 单人脸特征提取
|
|
280
|
+
* 图像数据以结构体形式传入,对采用更高字节对齐方式的图像兼容性更好
|
|
281
|
+
************************************************************************/
|
|
282
|
+
MRESULT ASFFaceFeatureExtractEx(
|
|
283
|
+
MHandle hEngine, // [in] 引擎handle
|
|
284
|
+
LPASF_ImageData imgData, // [in] 图像数据
|
|
285
|
+
LPASF_SingleFaceInfo faceInfo, // [in] 单张人脸位置和角度信息
|
|
286
|
+
LPASF_FaceFeature feature // [out] 人脸特征
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
/************************************************************************
|
|
290
|
+
* 人脸特征比对,推荐阈值 ASF_LIFE_PHOTO:0.80 ASF_ID_PHOTO:0.82
|
|
291
|
+
************************************************************************/
|
|
292
|
+
MRESULT ASFFaceFeatureCompare(
|
|
293
|
+
MHandle hEngine, // [in] 引擎handle
|
|
294
|
+
LPASF_FaceFeature feature1, // [in] 待比较人脸特征1
|
|
295
|
+
LPASF_FaceFeature feature2, // [in] 待比较人脸特征2
|
|
296
|
+
MFloat* confidenceLevel, // [out] 比较结果,置信度数值
|
|
297
|
+
ASF_CompareModel compareModel = ASF_LIFE_PHOTO // [in] ASF_LIFE_PHOTO:用于生活照之间的特征比对
|
|
298
|
+
// ASF_ID_PHOTO:用于证件照或证件照和生活照之间的特征比对
|
|
299
|
+
);
|
|
300
|
+
|
|
301
|
+
//******************************** 年龄相关 **********************************************
|
|
302
|
+
typedef struct {
|
|
303
|
+
MInt32* ageArray; // "0" 代表不确定,大于0的数值代表检测出来的年龄结果
|
|
304
|
+
MInt32 num; // 检测的人脸个数
|
|
305
|
+
}ASF_AgeInfo, *LPASF_AgeInfo;
|
|
306
|
+
|
|
307
|
+
/************************************************************************
|
|
308
|
+
* 获取年龄信息
|
|
309
|
+
************************************************************************/
|
|
310
|
+
MRESULT ASFGetAge(
|
|
311
|
+
MHandle hEngine, // [in] 引擎handle
|
|
312
|
+
LPASF_AgeInfo ageInfo // [out] 检测到的年龄信息
|
|
313
|
+
);
|
|
314
|
+
|
|
315
|
+
//******************************** 性别相关 **********************************************
|
|
316
|
+
typedef struct {
|
|
317
|
+
MInt32* genderArray; // "0" 表示 男性, "1" 表示 女性, "-1" 表示不确定
|
|
318
|
+
MInt32 num; // 检测的人脸个数
|
|
319
|
+
}ASF_GenderInfo, *LPASF_GenderInfo;
|
|
320
|
+
|
|
321
|
+
/************************************************************************
|
|
322
|
+
* 获取性别信息
|
|
323
|
+
************************************************************************/
|
|
324
|
+
MRESULT ASFGetGender(
|
|
325
|
+
MHandle hEngine, // [in] 引擎handle
|
|
326
|
+
LPASF_GenderInfo genderInfo // [out] 检测到的性别信息
|
|
327
|
+
);
|
|
328
|
+
|
|
329
|
+
//******************************** 人脸3D 角度信息 ***********************************
|
|
330
|
+
typedef struct {
|
|
331
|
+
MFloat* roll;
|
|
332
|
+
MFloat* yaw;
|
|
333
|
+
MFloat* pitch;
|
|
334
|
+
MInt32* status; //0: 正常,其他数值:出错
|
|
335
|
+
MInt32 num;
|
|
336
|
+
}ASF_Face3DAngle, *LPASF_Face3DAngle;
|
|
337
|
+
|
|
338
|
+
/************************************************************************
|
|
339
|
+
* 获取3D角度信息
|
|
340
|
+
************************************************************************/
|
|
341
|
+
MRESULT ASFGetFace3DAngle(
|
|
342
|
+
MHandle hEngine, // [in] 引擎handle
|
|
343
|
+
LPASF_Face3DAngle p3DAngleInfo // [out] 检测到脸部3D 角度信息
|
|
344
|
+
);
|
|
345
|
+
|
|
346
|
+
//******************************** 活体信息 ***********************************
|
|
347
|
+
typedef struct {
|
|
348
|
+
MInt32* isLive; // [out] 判断是否真人, 0:非真人;
|
|
349
|
+
// 1:真人;
|
|
350
|
+
// -1:不确定;
|
|
351
|
+
// -2:传入人脸数>1;
|
|
352
|
+
// -3: 人脸过小
|
|
353
|
+
// -4: 角度过大
|
|
354
|
+
// -5: 人脸超出边界
|
|
355
|
+
MInt32 num;
|
|
356
|
+
}ASF_LivenessInfo, *LPASF_LivenessInfo;
|
|
357
|
+
|
|
358
|
+
/************************************************************************
|
|
359
|
+
* 获取RGB活体结果
|
|
360
|
+
************************************************************************/
|
|
361
|
+
MRESULT ASFGetLivenessScore(
|
|
362
|
+
MHandle hEngine, // [in] 引擎handle
|
|
363
|
+
LPASF_LivenessInfo livenessInfo // [out] 检测RGB活体结果
|
|
364
|
+
);
|
|
365
|
+
|
|
366
|
+
/************************************************************************
|
|
367
|
+
* 获取IR活体结果
|
|
368
|
+
************************************************************************/
|
|
369
|
+
MRESULT ASFGetLivenessScore_IR(
|
|
370
|
+
MHandle hEngine, // [in] 引擎handle
|
|
371
|
+
LPASF_LivenessInfo irLivenessInfo // [out] 检测到IR活体结果
|
|
372
|
+
);
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
#ifdef __cplusplus
|
|
376
|
+
}
|
|
377
|
+
#endif
|
|
378
|
+
#endif
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
#ifndef __ASVL_OFFSCREEN_H__
|
|
2
|
+
#define __ASVL_OFFSCREEN_H__
|
|
3
|
+
|
|
4
|
+
#include "amcomdef.h"
|
|
5
|
+
|
|
6
|
+
#ifdef __cplusplus
|
|
7
|
+
extern "C" {
|
|
8
|
+
#endif
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
/*31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 */
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
/* R R R R R G G G G G G B B B B B */
|
|
15
|
+
#define ASVL_PAF_RGB16_B5G6R5 0x101
|
|
16
|
+
/* X R R R R R G G G G G B B B B B */
|
|
17
|
+
#define ASVL_PAF_RGB16_B5G5R5 0x102
|
|
18
|
+
/* X X X X R R R R G G G G B B B B */
|
|
19
|
+
#define ASVL_PAF_RGB16_B4G4R4 0x103
|
|
20
|
+
/* T R R R R R G G G G G B B B B B */
|
|
21
|
+
#define ASVL_PAF_RGB16_B5G5R5T 0x104
|
|
22
|
+
/* B B B B B G G G G G G R R R R R */
|
|
23
|
+
#define ASVL_PAF_RGB16_R5G6B5 0x105
|
|
24
|
+
/* X B B B B B G G G G G R R R R R */
|
|
25
|
+
#define ASVL_PAF_RGB16_R5G5B5 0x106
|
|
26
|
+
/* X X X X B B B B G G G G R R R R */
|
|
27
|
+
#define ASVL_PAF_RGB16_R4G4B4 0x107
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
/* R R R R R R R R G G G G G G G G B B B B B B B B */
|
|
31
|
+
#define ASVL_PAF_RGB24_B8G8R8 0x201
|
|
32
|
+
/* X X X X X X R R R R R R G G G G G G B B B B B B */
|
|
33
|
+
#define ASVL_PAF_RGB24_B6G6R6 0x202
|
|
34
|
+
/* X X X X X T R R R R R R G G G G G G B B B B B B */
|
|
35
|
+
#define ASVL_PAF_RGB24_B6G6R6T 0x203
|
|
36
|
+
/* B B B B B B B B G G G G G G G G R R R R R R R R */
|
|
37
|
+
#define ASVL_PAF_RGB24_R8G8B8 0x204
|
|
38
|
+
/* X X X X X X B B B B B B G G G G G G R R R R R R */
|
|
39
|
+
#define ASVL_PAF_RGB24_R6G6B6 0x205
|
|
40
|
+
|
|
41
|
+
/* X X X X X X X X R R R R R R R R G G G G G G G G B B B B B B B B */
|
|
42
|
+
#define ASVL_PAF_RGB32_B8G8R8 0x301
|
|
43
|
+
/* A A A A A A A A R R R R R R R R G G G G G G G G B B B B B B B B */
|
|
44
|
+
#define ASVL_PAF_RGB32_B8G8R8A8 0x302
|
|
45
|
+
/* X X X X X X X X B B B B B B B B G G G G G G G G R R R R R R R R */
|
|
46
|
+
#define ASVL_PAF_RGB32_R8G8B8 0x303
|
|
47
|
+
/* B B B B B B B B G G G G G G G G R R R R R R R R A A A A A A A A */
|
|
48
|
+
#define ASVL_PAF_RGB32_A8R8G8B8 0x304
|
|
49
|
+
/* A A A A A A A A B B B B B B B B G G G G G G G G R R R R R R R R */
|
|
50
|
+
#define ASVL_PAF_RGB32_R8G8B8A8 0x305
|
|
51
|
+
|
|
52
|
+
/*Y0, U0, V0*/
|
|
53
|
+
#define ASVL_PAF_YUV 0x401
|
|
54
|
+
/*Y0, V0, U0*/
|
|
55
|
+
#define ASVL_PAF_YVU 0x402
|
|
56
|
+
/*U0, V0, Y0*/
|
|
57
|
+
#define ASVL_PAF_UVY 0x403
|
|
58
|
+
/*V0, U0, Y0*/
|
|
59
|
+
#define ASVL_PAF_VUY 0x404
|
|
60
|
+
|
|
61
|
+
/*Y0, U0, Y1, V0*/
|
|
62
|
+
#define ASVL_PAF_YUYV 0x501
|
|
63
|
+
/*Y0, V0, Y1, U0*/
|
|
64
|
+
#define ASVL_PAF_YVYU 0x502
|
|
65
|
+
/*U0, Y0, V0, Y1*/
|
|
66
|
+
#define ASVL_PAF_UYVY 0x503
|
|
67
|
+
/*V0, Y0, U0, Y1*/
|
|
68
|
+
#define ASVL_PAF_VYUY 0x504
|
|
69
|
+
/*Y1, U0, Y0, V0*/
|
|
70
|
+
#define ASVL_PAF_YUYV2 0x505
|
|
71
|
+
/*Y1, V0, Y0, U0*/
|
|
72
|
+
#define ASVL_PAF_YVYU2 0x506
|
|
73
|
+
/*U0, Y1, V0, Y0*/
|
|
74
|
+
#define ASVL_PAF_UYVY2 0x507
|
|
75
|
+
/*V0, Y1, U0, Y0*/
|
|
76
|
+
#define ASVL_PAF_VYUY2 0x508
|
|
77
|
+
/*Y0, Y1, U0, V0*/
|
|
78
|
+
#define ASVL_PAF_YYUV 0x509
|
|
79
|
+
|
|
80
|
+
/*8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes*/
|
|
81
|
+
#define ASVL_PAF_I420 0x601
|
|
82
|
+
/*8 bit Y plane followed by 8 bit 1x2 subsampled U and V planes*/
|
|
83
|
+
#define ASVL_PAF_I422V 0x602
|
|
84
|
+
/*8 bit Y plane followed by 8 bit 2x1 subsampled U and V planes*/
|
|
85
|
+
#define ASVL_PAF_I422H 0x603
|
|
86
|
+
/*8 bit Y plane followed by 8 bit U and V planes*/
|
|
87
|
+
#define ASVL_PAF_I444 0x604
|
|
88
|
+
/*8 bit Y plane followed by 8 bit 2x2 subsampled V and U planes*/
|
|
89
|
+
#define ASVL_PAF_YV12 0x605
|
|
90
|
+
/*8 bit Y plane followed by 8 bit 1x2 subsampled V and U planes*/
|
|
91
|
+
#define ASVL_PAF_YV16V 0x606
|
|
92
|
+
/*8 bit Y plane followed by 8 bit 2x1 subsampled V and U planes*/
|
|
93
|
+
#define ASVL_PAF_YV16H 0x607
|
|
94
|
+
/*8 bit Y plane followed by 8 bit V and U planes*/
|
|
95
|
+
#define ASVL_PAF_YV24 0x608
|
|
96
|
+
/*8 bit Y plane only*/
|
|
97
|
+
#define ASVL_PAF_GRAY 0x701
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
/*8 bit Y plane followed by 8 bit 2x2 subsampled UV planes*/
|
|
101
|
+
#define ASVL_PAF_NV12 0x801
|
|
102
|
+
/*8 bit Y plane followed by 8 bit 2x2 subsampled VU planes*/
|
|
103
|
+
#define ASVL_PAF_NV21 0x802
|
|
104
|
+
/*8 bit Y plane followed by 8 bit 2x1 subsampled UV planes*/
|
|
105
|
+
#define ASVL_PAF_LPI422H 0x803
|
|
106
|
+
/*8 bit Y plane followed by 8 bit 2x1 subsampled VU planes*/
|
|
107
|
+
#define ASVL_PAF_LPI422H2 0x804
|
|
108
|
+
|
|
109
|
+
/*8 bit Y plane followed by 8 bit 4x4 subsampled VU planes*/
|
|
110
|
+
#define ASVL_PAF_NV41 0x805
|
|
111
|
+
|
|
112
|
+
/*Negative UYVY, U0, Y0, V0, Y1*/
|
|
113
|
+
#define ASVL_PAF_NEG_UYVY 0x901
|
|
114
|
+
/*Negative I420, 8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes*/
|
|
115
|
+
#define ASVL_PAF_NEG_I420 0x902
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
/*Mono UYVY, UV values are fixed, gray image in U0, Y0, V0, Y1*/
|
|
119
|
+
#define ASVL_PAF_MONO_UYVY 0xa01
|
|
120
|
+
/*Mono I420, UV values are fixed, 8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes*/
|
|
121
|
+
#define ASVL_PAF_MONO_I420 0xa02
|
|
122
|
+
|
|
123
|
+
/*P8_YUYV, 8 pixels a group, Y0Y1Y2Y3Y4Y5Y6Y7U0U1U2U3V0V1V2V3*/
|
|
124
|
+
#define ASVL_PAF_P8_YUYV 0xb03
|
|
125
|
+
|
|
126
|
+
/*P16_YUYV, 16*16 pixels a group, Y0Y1Y2Y3...U0U1...V0V1...*/
|
|
127
|
+
#define ASVL_PAF_SP16UNIT 0xc01
|
|
128
|
+
|
|
129
|
+
#define ASVL_PAF_DEPTH_U16 0xc02
|
|
130
|
+
|
|
131
|
+
/*10 bits RGGB CFA raw data, each data has 2 bytes*/
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
#define ASVL_PAF_RAW10_RGGB_10B 0xd01
|
|
135
|
+
#define ASVL_PAF_RAW10_GRBG_10B 0xd02
|
|
136
|
+
#define ASVL_PAF_RAW10_GBRG_10B 0xd03
|
|
137
|
+
#define ASVL_PAF_RAW10_BGGR_10B 0xd04
|
|
138
|
+
|
|
139
|
+
#define ASVL_PAF_RAW12_RGGB_12B 0xd05
|
|
140
|
+
#define ASVL_PAF_RAW12_GRBG_12B 0xd06
|
|
141
|
+
#define ASVL_PAF_RAW12_GBRG_12B 0xd07
|
|
142
|
+
#define ASVL_PAF_RAW12_BGGR_12B 0xd08
|
|
143
|
+
|
|
144
|
+
#define ASVL_PAF_RAW10_RGGB_16B 0xd09
|
|
145
|
+
#define ASVL_PAF_RAW10_GRBG_16B 0xd0A
|
|
146
|
+
#define ASVL_PAF_RAW10_GBRG_16B 0xd0B
|
|
147
|
+
#define ASVL_PAF_RAW10_BGGR_16B 0xd0C
|
|
148
|
+
|
|
149
|
+
/*10 bits gray raw data*/
|
|
150
|
+
#define ASVL_PAF_RAW10_GRAY_10B 0xe01
|
|
151
|
+
|
|
152
|
+
/*10 bits gray raw data, each data has 2 bytes*/
|
|
153
|
+
#define ASVL_PAF_RAW10_GRAY_16B 0xe81
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
/*Define the image format space*/
|
|
157
|
+
typedef struct __tag_ASVL_OFFSCREEN
|
|
158
|
+
{
|
|
159
|
+
MUInt32 u32PixelArrayFormat;
|
|
160
|
+
MInt32 i32Width;
|
|
161
|
+
MInt32 i32Height;
|
|
162
|
+
MUInt8* ppu8Plane[4];
|
|
163
|
+
MInt32 pi32Pitch[4];
|
|
164
|
+
}ASVLOFFSCREEN, *LPASVLOFFSCREEN;
|
|
165
|
+
|
|
166
|
+
/*Define the SDK Version infos. This is the template!!!*/
|
|
167
|
+
typedef struct __tag_ASVL_VERSION
|
|
168
|
+
{
|
|
169
|
+
MLong lCodebase; // Codebase version number
|
|
170
|
+
MLong lMajor; // major version number
|
|
171
|
+
MLong lMinor; // minor version number
|
|
172
|
+
MLong lBuild; // Build version number, increasable only
|
|
173
|
+
const MChar *Version; // version in string form
|
|
174
|
+
const MChar *BuildDate; // latest build Date
|
|
175
|
+
const MChar *CopyRight; // copyright
|
|
176
|
+
}ASVL_VERSION;
|
|
177
|
+
const ASVL_VERSION *ASVL_GetVersion();
|
|
178
|
+
|
|
179
|
+
#ifdef __cplusplus
|
|
180
|
+
}
|
|
181
|
+
#endif
|
|
182
|
+
|
|
183
|
+
#endif /*__ASVL_OFFSCREEN_H__*/
|