/*******************************************************************************
* Copyright(c) ArcSoft, All right reserved.
*
* This file is ArcSoft's property. It contains ArcSoft's trade secret, proprietary
* and confidential information.
*
* DO NOT DISTRIBUTE, DO NOT DUPLICATE OR TRANSMIT IN ANY FORM WITHOUT PROPER
* AUTHORIZATION.
*
* If you are not an intended recipient of this file, you must not copy,
* distribute, modify, or take any action in reliance on it.
*
* If you have received this file in error, please immediately notify ArcSoft and
* permanently delete the original and any copy of any file and any printout
* thereof.
*********************************************************************************/

#ifndef _ARCSOFT_SDK_ASF_H_
#define _ARCSOFT_SDK_ASF_H_

#include "amcomdef.h"
#include "asvloffscreen.h"

#ifdef __cplusplus
extern "C" {
#endif

#define ASF_NONE				0x00000000	//无属性
#define ASF_FACE_DETECT			0x00000001	//此处detect可以是tracking或者detection两个引擎之一，具体的选择由detect mode 确定
#define ASF_FACERECOGNITION		0x00000004	//人脸特征
#define ASF_AGE					0x00000008	//年龄
#define ASF_GENDER				0x00000010	//性别
#define ASF_LIVENESS			0x00000080	//RGB活体
#define ASF_IMAGEQUALITY		0x00000200	//图像质量检测
#define ASF_IR_LIVENESS			0x00000400	//IR活体
#define ASF_MASKDETECT			0x00001000	//口罩检测
#define ASF_UPDATE_FACEDATA	    0x00002000	//更新人脸数据


#define ASF_MAX_DETECTFACENUM   50          //该版本最大支持同时检测50张人脸

	//检测模式
	enum ASF_DetectMode{
		ASF_DETECT_MODE_VIDEO = 0x00000000,		//Video模式，一般用于多帧连续检测
		ASF_DETECT_MODE_IMAGE = 0xFFFFFFFF		//Image模式，一般用于静态图的单次检测
	};


	//检测时候人脸角度的优先级，在文档中初始化接口中有图示说明，请参考
	enum ASF_OrientPriority {
		ASF_OP_0_ONLY = 0x1,		// 常规预览下正方向
		ASF_OP_90_ONLY = 0x2,		// 基于0°逆时针旋转90°的方向
		ASF_OP_270_ONLY = 0x3,		// 基于0°逆时针旋转270°的方向
		ASF_OP_180_ONLY = 0x4,		// 基于0°旋转180°的方向（逆时针、顺时针效果一样）
		ASF_OP_ALL_OUT = 0x5		// 全角度
	};

	//orientation 角度，逆时针方向
	enum ASF_OrientCode {
		ASF_OC_0 = 0x1,			// 0 degree
		ASF_OC_90 = 0x2,		// 90 degree
		ASF_OC_270 = 0x3,		// 270 degree
		ASF_OC_180 = 0x4,   	// 180 degree
		ASF_OC_30 = 0x5,		// 30 degree
		ASF_OC_60 = 0x6,		// 60 degree
		ASF_OC_120 = 0x7,		// 120 degree
		ASF_OC_150 = 0x8,		// 150 degree
		ASF_OC_210 = 0x9,		// 210 degree
		ASF_OC_240 = 0xa,		// 240 degree
		ASF_OC_300 = 0xb,		// 300 degree
		ASF_OC_330 = 0xc		// 330 degree
	};

	//检测模型
	enum ASF_DetectModel {
		ASF_DETECT_MODEL_RGB = 0x1	//RGB图像检测模型
		//预留扩展其他检测模型
	};

	//人脸比对可选的模型
	enum ASF_CompareModel{
		ASF_LIFE_PHOTO = 0x1,	//用于生活照之间的特征比对，推荐阈值0.80
		ASF_ID_PHOTO = 0x2		//用于证件照或生活照与证件照之间的特征比对，推荐阈值0.82
	};

	enum ASF_RegisterOrNot{
		ASF_RECOGNITION = 0x0,  //用于识别照人脸特征提取
		ASF_REGISTER = 0x1      //用于注册照人脸特征提取
	};

	//版本信息
	typedef struct {
		MPChar Version;				// 版本号
		MPChar BuildDate;			// 构建日期
		MPChar CopyRight;			// Copyright
	}ASF_VERSION, *LPASF_VERSION;

	//图像数据
	typedef LPASVLOFFSCREEN LPASF_ImageData;

	//人脸属性信息
	typedef struct{
		MInt32*				wearGlasses;        // 戴眼镜状态, 0 未戴眼镜；1 戴眼镜；2 墨镜
		MInt32*				leftEyeOpen;        // 左眼状态 0 闭眼；1 睁眼
		MInt32*				rightEyeOpen;       // 右眼状态 0 闭眼；1 睁眼
		MInt32*				mouthClose;         // 张嘴状态 0 张嘴；1 合嘴
	} ASF_FaceAttributeInfo, *LPASF_FaceAttributeInfo;

	//3D角度信息
	typedef struct
	{
		MFloat* roll;
		MFloat* yaw;
		MFloat* pitch;
	}ASF_Face3DAngleInfo, *LPASF_Face3DAngleInfo;

	//人脸信息
	typedef struct{
		MPVoid		data;		// 人脸信息
		MInt32		dataSize;	// 人脸信息长度
	} ASF_FaceDataInfo, *LPASF_FaceDataInfo;

	//单人脸信息
	typedef struct {
		MRECT		faceRect;		        // 人脸框信息
		MInt32		faceOrient;		        // 输入图像的角度，可以参考 ArcFaceCompare_OrientCode
		ASF_FaceDataInfo faceDataInfo;      // 单张人脸信息
	} ASF_SingleFaceInfo, *LPASF_SingleFaceInfo;

	//多人脸框信息
	typedef struct{
		MInt32                  faceNum;                // 检测到的人脸个数
		MRECT*                  faceRect;               // 人脸框信息
		MInt32*                 faceOrient;             // 输入图像的角度，可以参考 ArcFace_OrientCode .
		MInt32*                 faceID;                 // face ID
		LPASF_FaceDataInfo      faceDataInfoList;	    // 人脸检测信息
		MInt32*                 faceIsWithinBoundary;   // 人脸是否在边界内 0 人脸溢出；1 人脸在图像边界内
		MRECT*                  foreheadRect;           // 人脸额头区域
		ASF_FaceAttributeInfo   faceAttributeInfo;      // 人脸属性信息
		ASF_Face3DAngleInfo     face3DAngleInfo;        // 人脸3D角度
	}ASF_MultiFaceInfo, *LPASF_MultiFaceInfo;

	// 激活文件信息
	typedef struct {
		MPChar startTime;		//开始时间
		MPChar endTime;			//截止时间
		MPChar activeKey;		//激活码
		MPChar platform;		//平台
		MPChar sdkType;			//sdk类型
		MPChar appId;			//APPID
		MPChar sdkKey;			//SDKKEY
		MPChar sdkVersion;		//SDK版本号
		MPChar fileVersion;		//激活文件版本号
	}ASF_ActiveFileInfo, *LPASF_ActiveFileInfo;

	/*******************************************************************************************
	* 获取激活文件信息接口
	*******************************************************************************************/
	MRESULT ASFGetActiveFileInfo(
		LPASF_ActiveFileInfo  activeFileInfo  // [out] 激活文件信息
		);

	/*******************************************************************************************
	* 在线激活接口
	*******************************************************************************************/
	MRESULT ASFOnlineActivation(
		MPChar				AppId,			// [in]  APPID	官网下载
		MPChar				SDKKey,			// [in]  SDKKEY	官网下载
		MPChar				ActiveKey		// [in]  ActiveKey	官网下载
		);

	/*******************************************************************************************
	* 获取设备信息接口
	*******************************************************************************************/
	MRESULT ASFGetActiveDeviceInfo(
		MPChar*				deviceInfo		// [out] 采集的设备信息，用于到开发者中心做离线激活，生成离线授权文件
		);

	/*******************************************************************************************
	* 离线激活接口
	*******************************************************************************************/
	MRESULT ASFOfflineActivation(
		MPChar				filePath		// [in]  许可文件路径(离线授权文件)，需要读写权限
		);

	/************************************************************************
	* 初始化引擎
	************************************************************************/
	MRESULT ASFInitEngine(
		ASF_DetectMode		detectMode,					// [in]	ASF_DETECT_MODE_VIDEO 视频模式：适用于摄像头预览，视频文件识别
														//		AF_DETECT_MODE_IMAGE 图片模式：适用于静态图片的识别
		ASF_OrientPriority	detectFaceOrientPriority,	// [in]	检测脸部的角度优先值，参考 ASF_OrientPriority
		MInt32				detectFaceMaxNum,			// [in] 最大需要检测的人脸个数
		MInt32				combinedMask,				// [in] 用户选择需要检测的功能组合，可单个或多个
		MHandle*			hEngine						// [out] 初始化返回的引擎handle
		);

	//******************************** 人脸 属性阈值 ***********************************
	typedef struct {
		MFloat  eyeOpenThreshold;			// [in] 睁眼幅度阈值，阈值越大睁眼幅度越大
		MFloat  mouthCloseThreshold;        // [in] 张嘴幅度阈值，阈值越大，张嘴幅度越小
		MFloat  wearGlassesThreshold;       // [in] 佩戴眼镜阈值
	}ASF_FaceAttributeThreshold, *LPASF_FaceAttributeThreshold;

	/************************************************************************
	* 取值范围[0-1]， 默认阈值均为:0.5， 用户可以根据实际需求，设置遮挡范围
	************************************************************************/
	MRESULT ASFSetFaceAttributeParam(
		MHandle hEngine,					                // [in] 引擎handle
		LPASF_FaceAttributeThreshold attributeThreshold       // [in] 人脸属性阈值
		);

	/******************************************************
	* VIDEO模式:人脸追踪 IMAGE模式:人脸检测
	******************************************************/
	MRESULT ASFDetectFaces(
		MHandle				hEngine,							// [in] 引擎handle
		MInt32				width,								// [in] 图片宽度
		MInt32				height,								// [in] 图片高度
		MInt32				format,								// [in] 颜色空间格式
		MUInt8*				imgData,							// [in] 图片数据
		LPASF_MultiFaceInfo	detectedFaces,						// [out]检测到的人脸信息 
		ASF_DetectModel		detectModel = ASF_DETECT_MODEL_RGB	// [in] 预留字段，当前版本使用默认参数即可
		);

	/******************************************************
	* VIDEO模式:人脸追踪 IMAGE模式:人脸检测
	* 图像数据以结构体形式传入，对采用更高字节对齐方式的图像兼容性更好
	******************************************************/
	MRESULT ASFDetectFacesEx(
		MHandle				hEngine,							// [in] 引擎handle
		LPASF_ImageData		imgData,							// [in] 图片数据
		LPASF_MultiFaceInfo	detectedFaces,						// [out] 检测到的人脸信息
		ASF_DetectModel		detectModel = ASF_DETECT_MODEL_RGB	// [in]	预留字段，当前版本使用默认参数即可
		);

	/******************************************************
	* 传入修改后的人脸框，更新人脸信息，用于做双目对齐或其他策略
	* 注意：LPASF_MultiFaceInfo在该接口中既是入参也是出参
	******************************************************/
	MRESULT ASFUpdateFaceData(
		MHandle				hEngine,				// [in] 引擎handle
		MInt32				width, 					// [in] 图片宽度
		MInt32				height, 				// [in] 图片高度
		MInt32				format,					// [in] 颜色空间格式
		MUInt8 *			imgData, 				// [in] 图片数据
		LPASF_MultiFaceInfo detectedFaces			// [in/out]检测到的人脸信息 
		);

	/******************************************************
	* 传入修改后的人脸框，更新人脸信息，用于做双目对齐或其他策略
	* 注意：LPASF_MultiFaceInfo在该接口中既是入参也是出参
	* 图像数据以结构体形式传入，对采用更高字节对齐方式的图像兼容性更好
	******************************************************/
	MRESULT ASFUpdateFaceDataEx(
		MHandle             hEngine,				// [in] 引擎handle
		LPASF_ImageData		imgData,				// [in] 图像数据
		LPASF_MultiFaceInfo detectedFaces			// [in/out] 检测到的人脸信息
		);

	/******************************************************
	* 图像质量检测，（RGB模式： 识别阈值：0.49 注册阈值：0.63  口罩模式：识别阈值：0.29）
	******************************************************/
	MRESULT ASFImageQualityDetect(
		MHandle					hEngine,							// [in] 引擎handle
		MInt32					width,								// [in] 图片宽度
		MInt32					height,								// [in] 图片高度
		MInt32					format,								// [in] 颜色空间格式
		MUInt8 *				imgData,							// [in] 图片数据
		LPASF_SingleFaceInfo	faceInfo,							// [in] 人脸位置信息 
		MInt32					isMask,								// [in] 仅支持传入1、0、-1，戴口罩 1，否则认为未戴口罩
		MFloat*					confidenceLevel,					// [out] 图像质量检测结果
		ASF_DetectModel			detectModel = ASF_DETECT_MODEL_RGB	// [in]	预留字段，当前版本使用默认参数即可
		);

	/******************************************************
	* 图像质量检测，（RGB模式： 识别阈值：0.49 注册阈值：0.63  口罩模式：识别阈值：0.29）
	* 图像数据以结构体形式传入，对采用更高字节对齐方式的图像兼容性更好
	******************************************************/
	MRESULT ASFImageQualityDetectEx(
		MHandle					hEngine,							// [in] 引擎handle
		LPASF_ImageData			imgData,							// [in] 图片数据
		LPASF_SingleFaceInfo	faceInfo,							// [in] 人脸位置信息 
		MInt32					isMask,                             // [in] 仅支持传入1、0、-1，戴口罩 1，否则认为未戴口罩
		MFloat*              	confidenceLevel,					// [out] 图像质量检测结果
		ASF_DetectModel			detectModel = ASF_DETECT_MODEL_RGB	// [in]	预留字段，当前版本使用默认参数即可
		);

	/************************************************************************
	* 年龄/性别/人脸3D角度/口罩/遮挡/额头区域（该接口仅支持RGB图像），最多支持4张人脸信息检测，超过部分返回未知
	* RGB活体仅支持单人脸检测，该接口不支持检测IR活体
	************************************************************************/
	MRESULT ASFProcess(
		MHandle				hEngine,			// [in] 引擎handle
		MInt32				width,				// [in] 图片宽度
		MInt32				height,				// [in] 图片高度
		MInt32				format,				// [in] 颜色空间格式
		MUInt8*				imgData,			// [in] 图片数据
		LPASF_MultiFaceInfo	detectedFaces,		// [in] 人脸信息，用户根据待检测的功能选择需要使用的人脸。
		MInt32				combinedMask		// [in] 只支持初始化时候指定需要检测的功能，在process时进一步在这个已经指定的功能集中继续筛选
												//      例如初始化的时候指定检测年龄和性别，在process的时候可以只检测年龄，但是不能检测除年龄和性别之外的功能    
		);

	/************************************************************************
	* 年龄/性别/人脸3D角度/口罩/遮挡/额头区域（该接口仅支持RGB图像），最多支持4张人脸信息检测，超过部分返回未知
	* RGB活体仅支持单人脸检测，该接口不支持检测IR活体
	* 图像数据以结构体形式传入，对采用更高字节对齐方式的图像兼容性更好
	************************************************************************/
	MRESULT ASFProcessEx(
		MHandle				hEngine,			// [in] 引擎handle
		LPASF_ImageData		imgData,			// [in] 图片数据
		LPASF_MultiFaceInfo detectedFaces,		// [in] 人脸信息，用户根据待检测的功能选择需要使用的人脸。
		MInt32				combinedMask		// [in] 只支持初始化时候指定需要检测的功能，在process时进一步在这个已经指定的功能集中继续筛选
												//      例如初始化的时候指定检测年龄和性别，在process的时候可以只检测年龄，但是不能检测除年龄和性别之外的功能 
		);

	/************************************************************************
	* 该接口目前仅支持单人脸IR活体检测，默认取第一张人脸
	************************************************************************/
	MRESULT ASFProcess_IR(
		MHandle				hEngine,			// [in] 引擎handle
		MInt32				width,				// [in] 图片宽度
		MInt32				height,				// [in] 图片高度
		MInt32				format,				// [in] 颜色空间格式
		MUInt8*				imgData,			// [in] 图片数据
		LPASF_MultiFaceInfo	detectedFaces,		// [in] 人脸信息，用户根据待检测的功能选择需要使用的人脸。
		MInt32				combinedMask		// [in] 目前只支持传入ASF_IR_LIVENESS属性的传入，且初始化接口需要传入 
		);

	/************************************************************************
	* 该接口目前仅支持单人脸IR活体检测，默认取第一张人脸
	* 图像数据以结构体形式传入，对采用更高字节对齐方式的图像兼容性更好
	************************************************************************/
	MRESULT ASFProcessEx_IR(
		MHandle				hEngine,			// [in] 引擎handle
		LPASF_ImageData		imgData,			// [in] 图片数据
		LPASF_MultiFaceInfo detectedFaces,		// [in] 人脸信息，用户根据待检测的功能选择需要使用的人脸。
		MInt32				combinedMask		// [in] 目前只支持传入ASF_IR_LIVENESS属性的传入，且初始化接口需要传入
		);

	//******************************** 人脸识别相关 *********************************************
	typedef struct {
		MByte*		feature;		// 人脸特征信息
		MInt32		featureSize;	// 人脸特征信息长度	
	}ASF_FaceFeature, *LPASF_FaceFeature;

    typedef struct{
        MInt32      searchId;       // 唯一标识符
        LPASF_FaceFeature feature;  // 人脸特征值
        MPCChar     tag;            // 备注
    }ASF_FaceFeatureInfo, *LPASF_FaceFeatureInfo;
	/************************************************************************
	* 单人脸特征提取
	************************************************************************/
	MRESULT ASFFaceFeatureExtract(
		MHandle					hEngine,							// [in]	引擎handle
		MInt32					width,								// [in] 图片宽度
		MInt32					height,								// [in] 图片高度
		MInt32					format,								// [in] 颜色空间格式
		MUInt8*					imgData,							// [in] 图片数据
		LPASF_SingleFaceInfo	faceInfo,							// [in] 单张人脸位置和角度信息
		ASF_RegisterOrNot		registerOrNot,						// [in] 注册 1 识别为 0
		MInt32					mask,								// [in] 带口罩 1，否则0
		LPASF_FaceFeature		feature								// [out] 人脸特征
		);

	/************************************************************************
	* 单人脸特征提取
	* 图像数据以结构体形式传入，对采用更高字节对齐方式的图像兼容性更好
	************************************************************************/
	MRESULT ASFFaceFeatureExtractEx(
		MHandle					hEngine,							// [in]	引擎handle
		LPASF_ImageData			imgData,							// [in] 图像数据
		LPASF_SingleFaceInfo	faceInfo,							// [in] 单张人脸位置和角度信息
		ASF_RegisterOrNot		registerOrNot,						// [in] 注册 1 识别为 0
		MInt32					mask,								// [in] 带口罩 1，否则0
		LPASF_FaceFeature		feature								// [out] 人脸特征
		);

	/************************************************************************
	* 人脸特征比对，推荐阈值 ASF_LIFE_PHOTO：0.80  ASF_ID_PHOTO：0.82
	************************************************************************/
	MRESULT ASFFaceFeatureCompare(
		MHandle					hEngine,						// [in] 引擎handle
		LPASF_FaceFeature		feature1,						// [in] 待比较人脸特征1
		LPASF_FaceFeature		feature2,						// [in] 待比较人脸特征2
		MFloat*					confidenceLevel,				// [out] 比较结果，置信度数值
		ASF_CompareModel		compareModel = ASF_LIFE_PHOTO	// [in] ASF_LIFE_PHOTO：用于生活照之间的特征比对
																//		ASF_ID_PHOTO：用于证件照或证件照和生活照之间的特征比对
		);

    /************************************************************************
    * 搜索人脸特征，推荐阈值 ASF_LIFE_PHOTO：0.80  ASF_ID_PHOTO：0.82
    ************************************************************************/
    MRESULT ASFFaceFeatureCompare_Search(
		MHandle					hEngine,		                // [in] 　引擎handle
		LPASF_FaceFeature    	feature,	                    // [in] 　待比较人脸特征
        MFloat*                 confidenceLevel,                // [out]　比较结果，最大置信度数值
        LPASF_FaceFeatureInfo   featureInfo,                    // [out]  最大置信度人脸信息
        ASF_CompareModel		compareModel = ASF_LIFE_PHOTO   // [in]   搜索模式
		);

	/************************************************************************
	* 注册人脸特征
	************************************************************************/
	MRESULT ASFRegisterFaceFeature(
		MHandle hEngine,							// [in] 　引擎handle
		LPASF_FaceFeatureInfo featureInfoList,		// [in]   注册列表
		MInt32 size									// [in]   列表数量
		);

	/************************************************************************
	* 删除人脸特征
	************************************************************************/
	MRESULT ASFRemoveFaceFeature(
		MHandle hEngine,								 // [in] 　引擎handle
		MInt32 searchId									 // [in] 　待删除人脸ID
		);

	/************************************************************************
	* 更新人脸特征
	************************************************************************/
	MRESULT ASFUpdateFaceFeature(
		MHandle hEngine,								// [in] 　引擎handle
		LPASF_FaceFeatureInfo featureInfo				// [in] 　待更新人脸特征
		);

	/************************************************************************
	* 获取人脸特征
	************************************************************************/
	MRESULT ASFGetFaceFeature(
		MHandle hEngine,								// [in] 　引擎handle
		MInt32 searchId,								// [in] 　查询人脸ID
		LPASF_FaceFeatureInfo featureInfo				// [out]  注册时信息
		);

	/************************************************************************
	* 获取人脸数量
	************************************************************************/
	MRESULT ASFGetFaceCount(
		MHandle hEngine,								// [in] 　引擎handle
		MInt32* num										// [out]  人脸数量
		);

	//******************************** 年龄相关 **********************************************
	typedef struct {
		MInt32*	ageArray;				// "0" 代表不确定，大于0的数值代表检测出来的年龄结果
		MInt32	num;					// 检测的人脸个数
	}ASF_AgeInfo, *LPASF_AgeInfo;

	/************************************************************************
	* 获取年龄信息
	************************************************************************/
	MRESULT ASFGetAge(
		MHandle hEngine,				// [in] 引擎handle
		LPASF_AgeInfo ageInfo			// [out] 检测到的年龄信息
		);

	//******************************** 性别相关 **********************************************
	typedef struct {
		MInt32*	genderArray;			// "0" 表示 男性, "1" 表示 女性, "-1" 表示不确定
		MInt32	num;					// 检测的人脸个数	
	}ASF_GenderInfo, *LPASF_GenderInfo;

	/************************************************************************
	* 获取性别信息
	************************************************************************/
	MRESULT ASFGetGender(
		MHandle hEngine,				// [in] 引擎handle
		LPASF_GenderInfo genderInfo		// [out] 检测到的性别信息
		);

	//******************************** 活体信息 ***********************************
	typedef struct {
		MFloat		thresholdmodel_BGR;
		MFloat		thresholdmodel_IR;
        MFloat		thresholdmodel_FQ;
	}ASF_LivenessThreshold, *LPASF_LivenessThreshold;

    /************************************************************************
    * 获取相关活体阈值
    ************************************************************************/
    MRESULT ASFGetLivenessParam(
        MHandle					hEngine,		// [in] 引擎handle
        LPASF_LivenessThreshold threshold		// [out] 活体置信度
    );

	/************************************************************************
	* 取值范围[0-1]，默认值 BGR:0.5 IR:0.5， FQ:0.65, 用户可以根据实际需求，设置不同的阈值
	************************************************************************/
	MRESULT ASFSetLivenessParam(
		MHandle					hEngine,		// [in] 引擎handle
		LPASF_LivenessThreshold threshold		// [in] 活体置信度
		);

	typedef struct {
		MInt32*	isLive;			// [out] 判断是否真人， 0：非真人；
								// 1：真人；
								// -1：不确定；
								// -2:传入人脸数>1；
								// -3: 人脸过小
								// -4: 角度过大
								// -5: 人脸超出边界
								// -6: 深度图错误
								// -7: 红外图太亮了
                                // -8: 红外图太暗了
                                // -100: 人脸质量错误
		MInt32 num;
	}ASF_LivenessInfo, *LPASF_LivenessInfo;

	/************************************************************************
	* 获取RGB活体结果
	************************************************************************/
	MRESULT ASFGetLivenessScore(
		MHandle hEngine,					// [in] 引擎handle
		LPASF_LivenessInfo livenessInfo		// [out] 检测RGB活体结果
		);

	/************************************************************************
	* 获取IR活体结果
	************************************************************************/
	MRESULT ASFGetLivenessScore_IR(
		MHandle				hEngine,			// [in] 引擎handle
		LPASF_LivenessInfo	 irLivenessInfo		// [out] 检测到IR活体结果
		);

	//******************************** 口罩检测相关 **********************************************
	typedef struct
	{
		MInt32*	maskArray;				// "0" 代表没有带口罩，"1"代表带口罩 ,"-1"表不确定
		MInt32	num;					// 检测的人脸个数
	}ASF_MaskInfo, *LPASF_MaskInfo;

	/************************************************************************
	* 获取口罩检测的结果
	************************************************************************/
	MRESULT ASFGetMask(
		MHandle hEngine,				// [in] 引擎handle
		LPASF_MaskInfo maskInfo			// [out] 检测到的口罩检测相关
		);

	/************************************************************************
	* 销毁引擎
	************************************************************************/
	MRESULT ASFUninitEngine(
		MHandle hEngine
		);

	/************************************************************************
	* 获取版本信息
	************************************************************************/
	const ASF_VERSION ASFGetVersion();

#ifdef __cplusplus
}
#endif
#endif
