虹软的虹软人脸识别sdk是免费期限是一年的吗?

?虹软人力资源
?实习生招聘
虹软人脸认知引擎
(支持离线)
免费下载开发
拥抱人工智能,虹软让“刷脸”无处不在!
最高识别率
人工智能热潮下,AI技术在各行各业的应用面临前所未有的机遇。从行业用户、商业用户、到个人用户,在门禁、考勤、通道、卡口、智能家居、机器人、医疗、制造、金融、安防监控……以及更多领域有着迫切的应用需求,拥有巨大的市场前景。
然而,从基础技术到真正的产品,中间需要历经较长的周期,从算法实现到产品化的成本非常高,构筑了中小企业进入AI领域的技术门槛。虹软作为一家技术创新型公司,拥有全球最领先,最前沿的视觉人工智能技术。一直坚信,任何先进的算法和技术,只有被大量应用于各个领域,真正成为解决实际问题的产品和方案,才能发挥出价值,真正为行业附能,为社会造福。
为了帮助巨量的中小企业打破技术壁垒,快速运用人脸技术,尽快转化为真正有价值的产品,虹软将20年来经行业检验积累并已广泛应用于各种设备上的人脸认知引擎,开放供免费使用。
可自组网、自建云,不用担心数据安全,只要发挥您的创造力,虹软助您的产品即刻拥抱人工智能,尽快抢占商机!
更多场景,更多能力
刷脸无处不在,创意点亮智慧生活
识别本人与证件是否为同一人
人脸识别实现个性化设置
智能辅助,带来最贴心的服务
智能门禁,刷脸开门
识别居民身份,保障社区安全
辅助行业创新,创造不一样的服务方式
识别人物属性,提供最贴心的服务
人脸属性,提供个性化产品推荐
根据不同的应用场景,提供最适配的引擎包
离线下载,快速集成
人脸比对(1:1) 免费
人脸比对(1:1)主要用来分析两张脸的相似度,多用于用户认证及身份验证。您会得到一个相似度的分数以及相应的阈值。
用户验证:
将实拍照片与底图对比
身份验证:
将人脸照片与证件照片进行对比
机场/火车站/地铁/出入境
人脸检索(1:N)
针对一张输入的人脸,在已建立的人脸数据库中检索相似的人脸。
小型网络:免费
人脸集合100范围内达到最优
适用于识别家庭成员的智能家居、机器人、人脸考勤等应用。
中型网络:免费
人脸集合1000范围内达到最优(>1000人未设限,请根据场景需求进行效果自测)
适用于身份识别、人脸门禁、人脸关卡等应用, 如医院、学校、社区、商铺、商场等各种场景。
大型网络:联系我们
适用应用场景更为复杂,需要更多的数据处理,诸如公共安全、大型组织或机构。
若有此类需求,请联系
ArcFaceTM 虹软人脸认知引擎功能
集合人脸检测、人脸跟踪、人脸识别、年龄与性别识别等功能
我们专注于人脸技术,在大角度或不同角度下,低光背光环境下,人脸移动或不同表情、年龄,遮挡,设备移动等情况下,以高成功率、低误检率,持续在全球保持业界领先水平。虹软在人脸相关领域里的研究成果及技术应用不论是其深度和广度,都是全球领先者。
目前虹软ArcFace(人脸认知引擎)开放人脸检测、人脸跟踪、人脸识别、年龄与性别识别等功能,供开发者下载使用。
人脸检测 (Face Detection)
人脸检测是人脸技术的基础,使用虹软人脸引擎,能够帮助您检测并且定位到影像(图片或者视频)中的人脸。
特点 :虹软的人脸检测技术支持强光、弱光、黑夜、背光等多种复杂环境。并且可检测出正脸,侧脸等多种角度人脸的位置。
人脸跟踪 (Face Tracking)
精确定位并追踪面部区域位置,随着人物脸部位置的变化能够快速定位人脸位置,并且适用于不同表情、性别、年龄、姿态、光照等条件。
特点 :虹软人脸跟踪技术耗能低,追踪丢失率极低。引擎支持多人脸实时跟踪,具有精度高,适配角度广,速度快,引擎小等特点。
人脸识别 (Face Recognition)
引擎可独立运行在终端设备或者独立服务器中,应用端可独立完成算法运行,能保证用户数据的私密性,自主运营与保护用户敏感信息。
特点 :具有高识别率,高性能,低功耗等特性。
性别与年龄识别(Age & Gender)new
利用虹软人脸认知引擎的性别与年龄模块,您可以从图片或者视频流中精确快速获取到人物的性别与大致年龄。
特点 :模型小,快速实时性好,低功耗等特性。
业内领先的高识别、
低误识经过行业检验
便于进行二次开发,更易于开发者系统性的集成应用
高性能低功耗,支持如暗光环境、侧脸、遮挡等复杂情况
不断推陈出新
我们始终保持更新优化引擎,脚步不曾停歇
ArcFaceTM 1.1 for Windows & Linux
年龄与性别识别
引擎提供性别与年龄模块,借助它开发者可以从图片或者视频流中精确快速获取到人物的性别与大致年龄。
ArcFaceTM 1.1 for iOS & Android
年龄与性别识别
引擎提供性别与年龄模块,借助它开发者可以从图片或者视频流中精确快速获取到人物的性别与大致年龄。
ArcFaceTM 1.0
人脸认知引擎
根据不同应用场景设计,针对性强。包括人脸检测、人脸跟踪、人脸识别,即使在离线环境下也可正常运行。
运行环境与指标
最低硬件配置
(可运行算法)
Intel(R) CoreTM i5-GHz
或者同级别芯片
Intel(R) CoreTM i3-4330 Processor
高通MSM 8937
或者同级别芯片
推荐硬件配置
(具有良好的体验)
Intel(R) CoreTM i7-GHz
或者同级别芯片
Intel(R) CoreTM i7-5775R Processor
高通MSM8953
或者同级别芯片
系统版本要求
Windows 7 及以上
Ubuntu 14.04及以上
Android 5.0 及以上
iOS 8.0 及以上
引擎使用其他说明
为了能够保持持续竞争力,引擎需要在一年内升级,请您务必及时更新。
Intel(R) CoreTM
@2.80GHz或者
同级别芯片
Intel(R) CoreTMi3-4330Processor
高通MSM8937或者同级别芯片
Intel(R) CoreTM
@2.1GHz或者
同级别芯片
Intel(R) CoreTMi7-5775RProcessor
高通MSM 8953或者同级别芯片
Windows 7 及以上
Ubuntu 14.04及以上
Android5.0及以上
iOS 8.0 及以上
为了能够保持持续竞争力,引擎需要在一年内升级,请您务必及时更新。
为了能够保持持续竞争力,引擎需要在一年内升级,请您务必及时更新。
API接入说明
如何将ArcFace装进应用
Android API
FR 人脸识别
FD 人脸检测
FT 人脸跟踪
从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id, SDK_key)
将获取到的开发包导入到您的应用中
App_id与SDK_key是在初始化的时候需要使用
所有基本类型在平台库中有定义。 定义规则是在ANSIC 中的基本类型前加上字母“M”同时将类型的第一个字母改成大写。例如“long” 被定义成“MLong”
数据结构与枚举
AFR_FSDK_FACEINPUT
描述: 脸部信息
typedef struct{
AFR_FSDK_OrientCode
} AFR_FSDK_FACEINPUT, *LPAFR_FSDK_FACEINPUT;
脸部矩形框信息
脸部旋转角度
AFR_FSDK_FACEMODEL
描述: 脸部特征信息
typedef struct{
} AFR_FSDK_FACEMODEL, *LPAFR_FSDK_FACEMODEL;
提取到的脸部特征
lFeatureSize
特征信息长度
AFR_FSDK_VERSION
描述: 引擎版本信息
typedef struct{
} AFR_FSDK_VERSION, *LPAFR_FSDK_VERSION;
代码库版本号
编译版本号,递增
lFeatureLevel
特征库版本号
字符串形式的版本号
AFR_FSDK_ORIENTCODE
描述: 基于逆时针的脸部方向枚举值
enum AFR_FSDK_ORIENTCODE{
AFR_FSDK_FOC_0
AFR_FSDK_FOC_90
AFR_FSDK_FOC_270
AFR_FSDK_FOC_180 = 0x4,
AFR_FSDK_FOC_30
AFR_FSDK_FOC_60
AFR_FSDK_FOC_120
AFR_FSDK_FOC_150
AFR_FSDK_FOC_210
AFR_FSDK_FOC_240
AFR_FSDK_FOC_300
AFR_FSDK_FOC_330
AFR_FSDK_FOC_0
AFR_FSDK_FOC_90
AFR_FSDK_FOC_270
AFR_FSDK_FOC_180
AFR_FSDK_FOC_30
AFR_FSDK_FOC_60
AFR_FSDK_FOC_120
AFR_FSDK_FOC_150
AFR_FSDK_FOC_210
AFR_FSDK_FOC_240
AFR_FSDK_FOC_300
AFR_FSDK_FOC_330
支持的颜色格式
描述: 颜色格式及其对齐规则
ASVL_PAF_I420
8-bit Y层,之后是8-bit的2x2 采样的U层和V层
ASVL_PAF_YUYV
Y0, U0, Y1, V0
ASVL_PAF_RGB24_B8G8R8
BGR24, B8G8R8
API Reference
AFR_FSDK_InitialEngine
初始化引擎参数
MRESULT AFR_FSDK_InitialEngine(
[in] 用户申请SDK时获取的App Id
[in] 用户申请SDK时获取的SDK Key
[in] 分配给引擎使用的内存地址
[in] 分配给引擎使用的内存大小
[out] 引擎handle
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
AFR_FSDK_ExtractFRFeature
获取脸部特征参数
MRESULT AFR_FSDK_ExtractFRFeature (
LPASVLOFFSCREEN
pInputImage,
LPAFR_FSDK_FACEINPUT pFaceRes,
LPAFR_FSDK_FACEMODEL pFaceModels
[in] 引擎handle
pInputImage
[in] 输入的图像数据
[in] 已检测到的脸部信息
pFaceModels
[out] 提取的脸部特征信息
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
AFR_FSDK_FacePairMatching
脸部特征比较
MRESULT AFR_FSDK_FacePairMatching(
AFR_FSDK_FACEMODEL
*reffeature,
AFR_FSDK_FACEMODEL
*probefeature,
*pfSimilScore
[in] 引擎handle
reffeature
[in] 已有脸部特征信息
probefeature
[in] 被比较的脸部特征信息
pfSimilScore
[out] 脸部特征相似程度数值
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
AFR_FSDK_UninitialEngine
销毁引擎,释放相应资源
MRESULT AFR_FSDK_UninitialEngine(
[in] 引擎handle
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
AFR_FSDK_GetVersion
获取SDK版本信息参数
const AFR_FSDK_VERSION *
AFR_FSDK_GetVersion(
[in] 引擎handle
其他说明:
此版本为免费开放的标准版本(为保证最优体验,建议注册人脸数小于1000),若有定制升级需求,请联系我们。
C语言示例代码
注意,使用时请替换申请的 APPID 和 SDKKEY,并设置好文件路径和图像尺寸
#include "stdafx.h"
#include &stdlib.h&
#include &stdint.h&
#include &Windows.h&
#include "arcsoft_fsdk_face_recognition.h"
#include "merror.h"
#pragma comment(lib,"libarcsoft_fsdk_face_recognition.lib")
#define WORKBUF_SIZE
#define INPUT_IMAGE1_PATH "sample1.bmp"
#define INPUT_IMAGE2_PATH "sample2.bmp"
bool readBmp(const char* path, uint8_t **imageData, int *pWidth, int *pHeight)
if (path == NULL || imageData == NULL || pWidth == NULL || pHeight == NULL)
fprintf(stderr, "ReadBmp para error\r\n");
FILE *fp = fopen(path, "rb");
if (fp == 0)
fprintf(stderr, "Bmp file open failed\r\n");
fseek(fp, sizeof(BITMAPFILEHEADER), 0);
BITMAPINFOHEADER
fread(&head, sizeof(BITMAPINFOHEADER), 1, fp);
*pWidth = head.biW
*pHeight = head.biH
int biBitCount = head.biBitC
int lineByte = ((*pWidth) * biBitCount / 8 + 3) / 4 * 4;
*imageData = (uint8_t *)malloc(lineByte * (*pHeight));
for (int i = 0; i & *pH i++)
fseek(fp, (*pHeight - 1 - i) * lineByte + 54, SEEK_SET);
fread(*imageData + i * (*pWidth) * 3, 1, (*pWidth) * 3, fp);
fclose(fp);
} int _tmain(int argc, _TCHAR* argv[])
MRESULT nRet = MERR_UNKNOWN;
MHandle hEngine =
char APPID[256] = "APPID";
char SDKKey[256] = "SDKKey";
MInt32 nScale = 16;
MInt32 nMaxFace = 10;
MByte *pWorkMem = (MByte *)malloc(WORKBUF_SIZE);
if (pWorkMem == nullptr)
fprintf(stderr, "fail to malloc workbuf\r\n");
return -1;
nRet = AFR_FSDK_InitialEngine(APPID, SDKKey, pWorkMem, WORKBUF_SIZE,
&hEngine);
if (nRet != MOK || hEngine == nullptr)
fprintf(stderr, "InitialFaceEngine failed , errorcode is %d \r\n", nRet);
return -1;
//获取版本信息
const AFR_FSDK_Version * pVersionInfo =
pVersionInfo = AFR_FSDK_GetVersion(hEngine);
fprintf(stdout, "%d %d %d %d %d\r\n", pVersionInfo-&lCodebase, pVersionInfo-&lMajor, pVersionInfo-&lMinor, pVersionInfo-&lBuild, pVersionInfo-
&lFeatureLevel);
fprintf(stdout, "%s\r\n", pVersionInfo-&Version);
fprintf(stdout, "%s\r\n", pVersionInfo-&BuildDate);
fprintf(stdout, "%s\r\n", pVersionInfo-&CopyRight);
//读取第一张bmp图片数据
ASVLOFFSCREEN offInput1 = { 0 };
offInput1.u32PixelArrayFormat = ASVL_PAF_RGB24_B8G8R8;
offInput1.ppu8Plane[0] =
readBmp(INPUT_IMAGE1_PATH, (uint8_t**)&offInput1.ppu8Plane[0],
&offInput1.i32Width, &offInput1.i32Height);
if (!offInput1.ppu8Plane[0])
fprintf(stderr, "fail to ReadBmp(%s)\r\n", INPUT_IMAGE1_PATH);
AFR_FSDK_UninitialEngine(hEngine);
free(pWorkMem);
return -1;
offInput1.pi32Pitch[0] = offInput1.i32Width * 3;
AFR_FSDK_FACEMODEL faceModels1 = { 0 };
AFR_FSDK_FACEINPUT faceR
//第一张人脸信息通过face detection\face tracking获得
faceResult.lOrient = AFR_FSDK_FOC_0;//人脸方向
faceResult.rcFace.left = 346;//人脸框位置
faceResult.rcFace.top = 58;
faceResult.rcFace.right = 440;
faceResult.rcFace.bottom = 151;
//提取第一张人脸特征
AFR_FSDK_FACEMODEL LocalFaceModels = { 0 };
nRet = AFR_FSDK_ExtractFRFeature(hEngine, &offInput1, &faceResult,
&LocalFaceModels);
if (nRet != MOK)
fprintf(stderr, "fail to Extract 1st FR Feature, error
code: %d\r\n", nRet);
faceModels1.lFeatureSize = LocalFaceModels.lFeatureS
faceModels1.pbFeature = (MByte*)malloc(faceModels1.lFeatureSize);
memcpy(faceModels1.pbFeature, LocalFaceModels.pbFeature, faceModels1.lFeatureSize);
//读取第二张bmp图片数据
ASVLOFFSCREEN offInput2 = { 0 };
offInput2.u32PixelArrayFormat = ASVL_PAF_RGB24_B8G8R8;
offInput2.ppu8Plane[0] =
readBmp(INPUT_IMAGE2_PATH, (uint8_t**)&offInput2.ppu8Plane[0],
&offInput2.i32Width, &offInput2.i32Height);
if (!offInput2.ppu8Plane[0])
fprintf(stderr, "fail to ReadBmp(%s)\r\n", INPUT_IMAGE2_PATH);
free(offInput1.ppu8Plane[0]);
AFR_FSDK_UninitialEngine(hEngine);
free(pWorkMem);
return -1;
offInput2.pi32Pitch[0] = offInput2.i32Width * 3;
AFR_FSDK_FACEMODEL faceModels2 = { 0 };
AFR_FSDK_FACEINPUT faceR
//第二张人脸信息通过face detection\face tracking获得
faceResult.lOrient = AFR_FSDK_FOC_0;//人脸方向
faceResult.rcFace.left = 122;//人脸框位置
faceResult.rcFace.top = 76;
faceResult.rcFace.right = 478;
faceResult.rcFace.bottom = 432;
//提取第二张人脸特征
AFR_FSDK_FACEMODEL LocalFaceModels = { 0 };
nRet = AFR_FSDK_ExtractFRFeature(hEngine, &offInput2, &faceResult,
&LocalFaceModels);
if (nRet != MOK)
fprintf(stderr, "fail to Extract 2nd FR Feature, error code: %d\r\n", nRet);
faceModels2.lFeatureSize = LocalFaceModels.lFeatureS
faceModels2.pbFeature = (MByte*)malloc(faceModels2.lFeatureSize);
memcpy(faceModels2.pbFeature, LocalFaceModels.pbFeature, faceModels2.lFeatureSize);
//对比两张人脸特征,获得比对结果
fSimilScore = 0.0f;
nRet = AFR_FSDK_FacePairMatching(hEngine, &faceModels1, &faceModels2,
&fSimilScore);
if (nRet == MOK)
fprintf(stdout, "fSimilScore =
%f\r\n", fSimilScore);
fprintf(stderr, "FacePairMatching failed , errorcode is %d \r\n", nRet);
//反初始化
free(offInput1.ppu8Plane[0]);
free(offInput2.ppu8Plane[0]);
nRet = AFR_FSDK_UninitialEngine(hEngine);
if (nRet != MOK)
fprintf(stderr, "UninitialFaceEngine failed , errorcode is %d \r\n", nRet);
free(pWorkMem);
free(faceModels1.pbFeature);
free(faceModels2.pbFeature);
从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id, SDK_key)
将获取到的开发包导入到您的应用中
App_id与SDK_key是在初始化的时候需要使用
typedef MInt32 AFD_FSDK_OrientP
typedef MInt32 AFD_FSDK_OrientC
所有基本类型在平台库中有定义。 定义规则是在ANSIC 中的基本类型前加上字母“M”同时将类型的第一个字母改成大写。例如“long” 被定义成“MLong”
数据结构与枚举
AFD_FSDK_FACERES
描述: 检测到的脸部信息
typedef struct{
AFD_FSDK_OrientCode
} AFD_FSDK_FACERES, * LPAFD_FSDK_FACERES;
人脸矩形框信息
lfaceOrient
人脸角度信息
AFD_FSDK_VERSION
描述: SDK版本信息
typedef struct
MPChar BuildD
MPChar CopyR
} ArcSoft_Face_Detection_V
代码库版本号
编译版本号,递增
字符串形式的版本号
AFD_FSDK_OrientPriority
描述: 定义脸部角度的检测范围
enum _AFD_FSDK_OrientPriority{
AFD_FSDK_OPF_0_ONLY
AFD_FSDK_OPF_90_ONLY
AFD_FSDK_OPF_270_ONLY
AFD_FSDK_OPF_180_ONLY
AFD_FSDK_OPF_0_HIGHER_EXT = 0x5
AFD_FSDK_OPF_0_ONLY
检测0度(±45度)方向
AFD_FSDK_OPF_90_ONLY
检测90度(±45度)方向
AFD_FSDK_OPF_270_ONLY
检测270度(±45度)方向
AFD_FSDK_OPF_180_ONLY
检测180度(±45度) 方向
AFD_FSDK_OPF_0_HIGHER_EXT
检测0度,90度,180度,270度四个方向,其中0度更优先
AFD_FSDK_OrientCode
描述: 定义人脸检测结果中的人脸角度
enum _AFD_FSDK_OrientCode{
AFD_FSDK_FOC_0 = 0x1,
AFD_FSDK_FOC_90 = 0x2,
AFD_FSDK_FOC_270 = 0x3,
AFD_FSDK_FOC_180 = 0x4,
AFD_FSDK_FOC_30 = 0x5,
AFD_FSDK_FOC_60 = 0x6,
AFD_FSDK_FOC_120 = 0x7,
AFD_FSDK_FOC_150 = 0x8,
AFD_FSDK_FOC_210 = 0x9,
AFD_FSDK_FOC_240 = 0xa,
AFD_FSDK_FOC_300 = 0xb,
AFD_FSDK_FOC_330 = 0xc
AFD_FSDK_FOC_0
AFD_FSDK_FOC_90
AFD_FSDK_FOC_270
AFD_FSDK_FOC_180
AFD_FSDK_FOC_30
AFD_FSDK_FOC_60
AFD_FSDK_FOC_120
AFD_FSDK_FOC_150
AFD_FSDK_FOC_210
AFD_FSDK_FOC_240
AFD_FSDK_FOC_300
AFD_FSDK_FOC_330
支持的颜色格式
描述: 颜色格式及其对齐规则
ASVL_PAF_I420
8-bit Y层,之后是8-bit的2x2 采样的U层和V层
ASVL_PAF_YUYV
Y0, U0, Y1, V0
ASVL_PAF_RGB24_B8G8R8
BGR24, B8G8R8
AFD_FSDK_InitialFaceEngine
初始化脸部检测引擎
MRESULT AFD_FSDK_InitialFaceEngine(
AFD_FSDK_OrientPriority
iOrientPriority,
nMaxFaceNum
[in] 用户申请SDK时获取的App Id
[in] 用户申请SDK时获取的SDK Key
[in] 分配给引擎使用的内存地址
[in] 分配给引擎使用的内存大小
[out] 引擎handle
iOrientPriority
[in] 期望的脸部检测角度范围
[in] 用于数值表示的最小人脸尺寸 有效值范围[2,50] 推荐值
16。该尺寸是人脸相对于所在图片的长边的占比。例如,如果用户想检测到的最小人脸尺寸是图片长度的1/8,那么这个nScale就应该设置为8
nMaxFaceNum
[in] 用户期望引擎最多能检测出的人脸数 有效值范围[1,50]
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
AFD_FSDK_StillImageFaceDetection
根据输入的图像检测出人脸位置,一般用于静态图像检测
MRESULT AFD_FSDK_StillImageFaceDetection(
LPASVLOFFSCREEN pImgData,
LPAFD_FSDK_FACERES *pFaceRes
[in] 引擎handle
[in] 待检测的图像信息
[out] 人脸检测结果
成功返回MOK,否则返回失败code
AFD_FSDK_UninitialFaceEngine
销毁引擎,释放相应资源
MRESULT AFD_FSDK_UninitialFaceEngine(
[in] 引擎handle
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
AFD_FSDK_GetVersion
获取SDK版本信息
const AFD_FSDK_Version * AFD_FSDK_GetVersion(
[in] 引擎handle
C语言示例代码
注意,使用时请替换申请的APPID SDKKEY,并设置好文件路径和图像尺寸
#include "stdafx.h"
#include &stdlib.h&
#include &stdint.h&
#include &Windows.h&
#include "arcsoft_fsdk_face_detection.h"
#include "merror.h"
#pragma comment(lib,"libarcsoft_fsdk_face_detection.lib")
#define WORKBUF_SIZE
#define INPUT_IMAGE_PATH "sample.bmp"
bool readBmp(const char* path, uint8_t **imageData, int *pWidth, int *pHeight)
if (path == NULL || imageData == NULL || pWidth == NULL || pHeight == NULL)
fprintf(stderr, "ReadBmp para error\r\n");
FILE *fp = fopen(path, "rb");
if (fp == 0)
fprintf(stderr, "Bmp file open failed\r\n");
fseek(fp, sizeof(BITMAPFILEHEADER), 0);
BITMAPINFOHEADER
fread(&head, sizeof(BITMAPINFOHEADER), 1, fp);
*pWidth = head.biW
*pHeight = head.biH
int biBitCount = head.biBitC
int lineByte = ((*pWidth) * biBitCount / 8 + 3) / 4 * 4;
*imageData = (uint8_t *)malloc(lineByte * (*pHeight));
for (int i = 0; i & *pH i++)
fseek(fp, (*pHeight - 1 - i) * lineByte + 54, SEEK_SET);
fread(*imageData + i * (*pWidth) * 3, 1, (*pWidth) * 3, fp);
fclose(fp);
} int _tmain(int argc, _TCHAR* argv[])
MRESULT nRet = MERR_UNKNOWN;
MHandle hEngine =
char APPID[256] = "APPID";
char SDKKey[256] = "SDKKey";
MInt32 nScale = 16;
MInt32 nMaxFace = 10;
MByte *pWorkMem = (MByte *)malloc(WORKBUF_SIZE);
if (pWorkMem == nullptr)
fprintf(stderr, "Fail to malloc workbuf\r\n");
return -1;
nRet = AFD_FSDK_InitialFaceEngine(APPID, SDKKey, pWorkMem, WORKBUF_SIZE,
&hEngine, AFD_FSDK_OPF_0_HIGHER_EXT, nScale, nMaxFace);
if (nRet != MOK || hEngine == nullptr)
fprintf(stderr, "InitialFaceEngine failed , errorcode is %d \r\n", nRet);
return -1;
//获取版本信息
const AFD_FSDK_Version * pVersionInfo =
pVersionInfo = AFD_FSDK_GetVersion(hEngine);
fprintf(stdout, "%d %d %d %d\r\n", pVersionInfo-&lCodebase, pVersionInfo-
&lMajor, pVersionInfo-&lMinor, pVersionInfo-&lBuild);
fprintf(stdout, "%s\r\n", pVersionInfo-&Version);
fprintf(stdout, "%s\r\n", pVersionInfo-&BuildDate);
fprintf(stdout, "%s\r\n", pVersionInfo-&CopyRight);
//读取bmp图片数据
ASVLOFFSCREEN offInput = { 0 };
offInput.u32PixelArrayFormat = ASVL_PAF_RGB24_B8G8R8;
offInput.ppu8Plane[0] =
readBmp(INPUT_IMAGE_PATH, (uint8_t**)&offInput.ppu8Plane[0],
&offInput.i32Width, &offInput.i32Height);
if (!offInput.ppu8Plane[0])
fprintf(stderr, "Fail to ReadBmp(%s)\r\n", INPUT_IMAGE_PATH);
AFD_FSDK_UninitialFaceEngine(hEngine);
free(pWorkMem);
return -1;
fprintf(stdout, "Picture width : %d , height : %d \r\n", offInput.i32Width, offInput.i32Height);
offInput.pi32Pitch[0] = offInput.i32Width * 3;
//人脸检测
LPAFD_FSDK_FACERES FaceRes =
for (int loop = 0; loop & 10; ++loop)
nRet = AFD_FSDK_StillImageFaceDetection(hEngine, &offInput,
&FaceRes);
if (nRet == MOK)
fprintf(stdout, "The number of face: %d\r\n", FaceRes-&nFace);
for (int i = 0; i & FaceRes-&nF ++i)
fprintf(stdout, "Face[%d]: rect[%d,%d,%d,%d], Face orient: %d\r\n", i, FaceRes-&rcFace[i].left, FaceRes-&rcFace[i].top, FaceRes&rcFace[i].right, FaceRes-&rcFace[i].bottom, *FaceRes-&lfaceOrient);
fprintf(stderr, "Face Detection failed, error code: %d\r\n",
//反初始化
free(offInput.ppu8Plane[0]);
nRet = AFD_FSDK_UninitialFaceEngine(hEngine);
if (nRet != MOK)
fprintf(stderr, "UninitialFaceEngine failed , errorcode is %d \r\n", nRet);
free(pWorkMem);
从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id, SDK_key)
将获取到的开发包导入到您的应用中
App_id与SDK_key是在初始化的时候需要使用
typedef MInt32 AFT_FSDK_OrientP
typedef MInt32 AFT_FSDK_OrientC
所有基本类型在平台库中有定义。 定义规则是在ANSIC 中的基本类型前加上字母“M”同时将类型的第一个字母改成大写。例如“long” 被定义成“MLong”
数据结构与枚举
AFT_FSDK_FACERES
描述: 检测到的脸部信息
typedef struct{
AFT_FSDK_OrientCode lfaceO
} AFT_FSDK_FACERES, *LPAFT_FSDK_FACERES;
人脸矩形框信息
lfaceOrient
人脸角度信息
AFT_FSDK_Version
描述: SDK版本信息
typedef struct{
MPChar BuildD
MPChar CopyRight ;
} AFT_FSDK_V
代码库版本号
编译版本号,递增
字符串形式的版本号
AFT_FSDK_OrientPriority
描述: 定义脸部检测角度的优先级
enum _AFT_FSDK_OrientPriority{
AFT_FSDK_OPF_0_ONLY
AFT_FSDK_OPF_90_ONLY = 0x2,
AFT_FSDK_OPF_270_ONLY = 0x3,
AFT_FSDK_OPF_180_ONLY = 0x4,
AFT_FSDK_OPF_0_HIGHER_EXT = 0x5,
AFT_FSDK_OPF_0_ONLY
检测0度方向
AFT_FSDK_OPF_90_ONLY
检测90度方向
AFT_FSDK_OPF_270_ONLY
检测270度方向
AFT_FSDK_OPF_180_ONLY
检测180度方向
AFT_FSDK_OPF_0_HIGHER_EXT
检测0度,90度,180度,270度四个方向,其中0度更优先
AFT_FSDK_OrientCode
描述: 定义检测返回的人脸角度
enum _AFT_FSDK_OrientCode {
AFT_FSDK_FOC_0
AFT_FSDK_FOC_90
AFT_FSDK_FOC_270
AFT_FSDK_FOC_180
AFT_FSDK_FOC_0
AFT_FSDK_FOC_90
AFT_FSDK_FOC_270
AFT_FSDK_FOC_180
支持的颜色格式
描述: 颜色格式及其对齐规则
ASVL_PAF_I420
8-bit Y层,之后是8-bit的2x2 采样的U层和V层
ASVL_PAF_YUYV
Y0, U0, Y1, V0
ASVL_PAF_RGB24_B8G8R8
BGR24, B8G8R8
AFT_FSDK_InitialFaceEngine
初始化脸部检测引擎
MRESULT AFT_FSDK_InitialFaceEngine(
AFT_FSDK_OrientPriority iOrientPriority,
nMaxFaceNum
[in] 用户申请SDK时获取的App Id
[in] 用户申请SDK时获取的SDK Key
[in] 分配给引擎使用的内存地址
[in] 分配给引擎使用的内存大小
[out] 引擎handle
iOrientPriority
[in] 期望的脸部检测角度的优先级
[in] 用于数值表示的最小人脸尺寸 有效值范围[2,16] 推荐值 16
nMaxFaceNum
[in] 用户期望引擎最多能检测出的人脸数 有效值范围[1,20]
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
AFT_FSDK_FaceFeatureDetect
根据输入的图像检测人脸,一般用于视频检测,多帧方式
MRESULT AFT_FSDK_FaceFeatureDetect(
AFT_FSDK_ENGINE
LPASVLOFFSCREEN
LPAFT_FSDK_FACERES
*pFaceRes,
[in] 引擎handle
[in] 带检测图像信息
[out] 人脸检测结果
在一个init/unit 过程中, 只支持相同分辨率的图像数据
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_BAD_STATE 状态不正确
AFT_FSDK_UninitialFaceEngine
销毁引擎,释放相应资源
MRESULT AFT_FSDK_UninitialFaceEngine(
[in] 引擎handle
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
AFT_FSDK_GetVersion
获取SDK版本信息
const AFT_FSDK_Version * AFT_FSDK_GetVersion(
[in] 引擎句柄
C语言示例代码
注意,使用时请替换申请的APPID SDKKEY,并设置好文件路径和图像尺寸
#include "stdafx.h"
#include &stdlib.h&
#include &stdint.h&
#include &Windows.h&
#include "arcsoft_fsdk_face_tracking.h"
#include "merror.h"
#pragma comment(lib,"libarcsoft_fsdk_face_tracking.lib")
#define WORKBUF_SIZE
#define INPUT_IMAGE_PATH "sample.bmp"
bool readBmp(const char* path, uint8_t **imageData, int *pWidth, int *pHeight)
if (path == NULL || imageData == NULL || pWidth == NULL || pHeight == NULL)
fprintf(stderr, "ReadBmp para error\r\n");
FILE *fp = fopen(path, "rb");
if (fp == 0)
fprintf(stderr, "Bmp file open failed\r\n");
fseek(fp, sizeof(BITMAPFILEHEADER), 0);
BITMAPINFOHEADER
fread(&head, sizeof(BITMAPINFOHEADER), 1, fp);
*pWidth = head.biW
*pHeight = head.biH
int biBitCount = head.biBitC
int lineByte = ((*pWidth) * biBitCount / 8 + 3) / 4 * 4;
*imageData = (uint8_t *)malloc(lineByte * (*pHeight));
for (int i = 0; i & *pH i++)
fseek(fp, (*pHeight - 1 - i) * lineByte + 54, SEEK_SET);
fread(*imageData + i * (*pWidth) * 3, 1, (*pWidth) * 3, fp);
fclose(fp);
} int _tmain(int argc, _TCHAR* argv[])
MRESULT nRet = MERR_UNKNOWN;
MHandle hEngine =
char APPID[256] = "APPID";
char SDKKey[256] = "SDKKey";
MInt32 nScale = 16;
MInt32 nMaxFace = 10;
LPAFT_FSDK_FACERES FaceRes =
MByte *pWorkMem = (MByte *)malloc(WORKBUF_SIZE);
if (pWorkMem == nullptr)
fprintf(stderr, "fail to malloc workbuf\r\n");
return -1;
nRet = AFT_FSDK_InitialFaceEngine(APPID, SDKKey, pWorkMem, WORKBUF_SIZE,
&hEngine, AFT_FSDK_OPF_0_HIGHER_EXT, nScale, nMaxFace);
if (nRet != MOK || hEngine == nullptr)
fprintf(stderr, "InitialFaceEngine failed , errorcode is %d \r\n", nRet);
return -1;
//获取版本信息
const AFT_FSDK_Version * pVersionInfo =
pVersionInfo = AFT_FSDK_GetVersion(hEngine);
fprintf(stdout, "%d %d %d %d\r\n", pVersionInfo-&lCodebase, pVersionInfo-
&lMajor, pVersionInfo-&lMinor, pVersionInfo-&lBuild);
fprintf(stdout, "%s\r\n", pVersionInfo-&Version);
fprintf(stdout, "%s\r\n", pVersionInfo-&BuildDate);
fprintf(stdout, "%s\r\n", pVersionInfo-&CopyRight);
//读取bmp图片数据
ASVLOFFSCREEN offInput = { 0 };
offInput.u32PixelArrayFormat = ASVL_PAF_RGB24_B8G8R8;
offInput.ppu8Plane[0] =
readBmp(INPUT_IMAGE_PATH, (uint8_t**)&offInput.ppu8Plane[0],
&offInput.i32Width, &offInput.i32Height);
if (!offInput.ppu8Plane[0])
fprintf(stderr, "fail to ReadBmp(%s)\r\n", INPUT_IMAGE_PATH);
AFT_FSDK_UninitialFaceEngine(hEngine);
free(pWorkMem);
return -1;
fprintf(stdout, "Picture width : %d , height : %d \r\n", offInput.i32Width, offInput.i32Height);
offInput.pi32Pitch[0] = offInput.i32Width * 3;
//人脸跟踪
int nRepeat = 0;
while (nRepeat++ &10)
nRet = AFT_FSDK_FaceFeatureDetect(hEngine, &offInput, &FaceRes);
if (nRet == MOK)
fprintf(stdout, "The number of face: %d\r\n", FaceRes-&nFace);
for (int i = 0; i & FaceRes-&nF ++i)
fprintf(stdout, "Repeat [%d] ,Face[%d]:
rect[%d,%d,%d,%d]\r\n", nRepeat, i, FaceRes-&rcFace[i].left, FaceRes-
&rcFace[i].top, FaceRes-&rcFace[i].right, FaceRes-&rcFace[i].bottom);
fprintf(stderr, "Face Detection failed, error code: %d\r\n",
//反初始化
free(offInput.ppu8Plane[0]);
nRet = AFT_FSDK_UninitialFaceEngine(hEngine);
if (nRet != MOK)
fprintf(stderr, "UninitialFaceEngine failed , errorcode is %d \r\n", nRet);
free(pWorkMem);
Window API
FR 人脸识别
FD 人脸检测
FT 人脸跟踪
SAE 年龄检测
SGE 性别检测
Class AFR_FSDKFace
功能描述:
这个类用来保存人脸特征信息
构造函数:
AFR_FSDKFace(AFR_FSDKFace self)
类对象,创建的对象和传入的对象数据一致
AFR_FSDKFace()
AFR_FSDKFace(byte[] data)
人脸特征信息,一般由引擎检测得到,也可以保存在本地加载
成员函数:
byte[] getFeatureData()
返回值:特定长度的人脸特征信息
void setFeatureData(byte[] data)
特征数据长度
AFR_FSDKFace clone()
返回值:本对象的拷贝
FEATURE_SIZE
引擎定义的特征信息数据长度
Class AFR_FSDKError
功能描述:
这个类用来保存错误信息
构造函数:
AFD_FSDKError()
成员函数:
int getCode()
返回值:错误码值(MOK, MERR_INVALID_PARAM等)
引擎返回的错误值定义
MERR_BASIC_BASE
基础错误起始值
MERR_UNKNOWN
MERR_INVALID_PARAM
MERR_UNSUPPORTED
输入了引擎不支持的参数或者数据
MERR_NO_MEMORY
MERR_BAD_STATE
状态错误(未初始化就调用了接口)
MERR_BUFFER_OVERFLOW
MERR_BUFFER_UNDERFLOW
MERR_FSDK_BASE
校验错误起始值
MERR_FSDK_INVALID_APP_ID
MERR_FSDK_INVALID_SDK_ID
MERR_FSDK_INVALID_ID_PAIR
SDKKEY不是于当前APPID名下的
MERR_FSDK_MISMATCH_ID_AND_SDK
SDKKEY不是当前SDK所支持的
MERR_FSDK_SYSTEM_VERSION_UNSUPPORTED
不支持的系统版本
MERR_FSDK_LICENCE_EXPIRED
MERR_FSDK_FR_ERROR_BASE
FR错误起始值
MERR_FSDK_FR_INVALID_MEMORY_INFO
内存信息错误
MERR_FSDK_FR_INVALID_IMAGE_INFO
图像信息错误
MERR_FSDK_FR_INVALID_FACE_INFO
人脸信息错误
MERR_FSDK_FR_NO_GPU_AVAILABLE
MERR_FSDK_FR_MISMATCHED_FEATURE_LEVEL
特征信息版本不匹配
Class AFR_FSDKVersion
功能描述:
这个类用来保存版本信息
构造函数:
AFD_FSDKVersion()
成员函数:
String toString()
返回值:包含所有版本信息的字符串
Class AFR_FSDKMatching
功能描述:
这个类用来保存特征信息匹配度
构造函数:
AFR_FSDKMatching()
成员函数:
float getScore()
返回值:两份人脸特征信息的特征匹配分数 ,分数范围:[0,1.0]
Class AFR_FSDKEngine
功能描述:
这个类具体实现了人脸识别的功能
构造函数:
AFR_FSDKEngine()
成员函数:
AFR_FSDKError AFR_FSDK_InitialEngine(String appid, String sdkkey)
描述:这个函数功能为初始化引擎。创建对象后,必须先于其他成员函数调用,否则其他成员函数会返回MERR_BAD_STATE
返回值:返回AFR_FSDKError对象,具体错误信息参考 Class AFR_FSDKError
String appid
用户申请SDK时获取的App Id
String sdkkey
用户申请SDK时获取的SDK Key
AFR_FSDKError AFR_FSDK_ExtractFRFeature(
byte[]data,int width,int height, int format,Rect face,nt ori,AFR_FSDKFace feature)
说明:函数功能为检测输入图像中的人脸特征信息,输出结果保存在AFR_FSDKFace feature
返回值:回AFR_FSDKError对象,具体错误信息参考 Class AFR_FSDKError
byte[] data
输入的图像数据
int height
int format
已检测到的脸框
已检测到的脸角度
AFR_FSDKFace feature
AFR_FSDKFace feature 检测到的人脸特征信息
AFR_FSDKError AFR_FSDK_FacePairMatching(AFR_FSDKFace ref, AFR_FSDKFace input, AFR_FSDKMatching score)
说明: 函数功能为比较两份人脸特征信息的匹配度
返回值:返回AFR_FSDKError对象,具体错误信息参考 Class AFR_FSDKError
脸部特征信息对象
脸部特征信息对象
匹配度对象
AFR_FSDKError AFR_FSDK_GetVersion(AFR_FSDKVersion version)
说明: 函数功能为获取引擎版本信息
返回值:返回AFR_FSDKError对象,具体错误信息参考 Class AFR_FSDKError
保存版本信息对象
AFR_FSDKError AFR_FSDK_UninitialEngine()
说明: 销毁引擎,释放内存资源
返回值:返回AFR_FSDKError对象,具体错误信息参考 Class AFR_FSDKError
引擎支持的颜色格式
CP_PAF_NV21
0x802 8-bit Y层,之后是8-bit的2x2 采样的U,V交织层
人脸角度:检测结果中的人脸角度
AFR_FOC_90
AFR_FOC_270
AFR_FOC_180
AFR_FOC_30
AFR_FOC_60
AFR_FOC_120
AFR_FOC_150
AFR_FOC_210
AFR_FOC_240
AFR_FOC_300
AFR_FOC_330
“此版本为免费开放的标准版本(为保证最优体验,建议注册人脸数小于1000),若有定制升级需求,请联系我们。”
AFR_FSDKInterface engine = new AFR_FSDKEngine();
//用来存放提取到的人脸信息, face_1 是注册的人脸,face_2 是要识别的人脸
AFR_FSDKFace face1 = new AFR_FSDKFace();
AFR_FSDKFace face2 = new AFR_FSDKFace();
//初始化人脸识别引擎,使用时请替换申请的 APPID 和 SDKKEY
AFR_FSDKError error = engine.AFR_FSDK_InitialEngine("APPID", "SDKKEY");
Log.d("com.arcsoft", "AFR_FSDK_InitialEngine = " + error.getCode());
//输入的 data 数据为 NV21 格式(如 Camera 里 NV21 格式的 preview 数据);人脸坐标一般使用人脸检测返回的 Rect 传入;人脸角度请按照人脸检测引擎返回的值传入。
error = engine.AFR_FSDK_ExtractFRFeature(data1, width, height, AFR_FSDKEngine.CP_PAF_NV21, new Rect(210, 178, 478, 446), AFR_FSDKEngine.AFR_FOC_0, face1);
Log.d("com.arcsoft", "Face=" + face1.getFeatureData()[0]+ "," + face1.getFeatureData()[1] + "," + face1.getFeatureData()[2] + "," + error.getCode());
error = engine.AFR_FSDK_ExtractFRFeature(data1, width, height, AFR_FSDKEngine.CP_PAF_NV21, new Rect(210, 170, 470, 440), AFR_FSDKEngine.AFR_FOC_0, face2);
Log.d("com.arcsoft", "Face=" + face2.getFeatureData()[0]+ "," + face2.getFeatureData()[1] + "," + face2.getFeatureData()[2] + "," + error.getCode());
//score 用于存放人脸对比的相似度值
AFR_FSDKMatching score = new AFR_FSDKMatching(); error = engine.AFR_FSDK_FacePairMatching(face1, face2, score); Log.d("com.arcsoft", "AFR_FSDK_FacePairMatching=" + error.getCode()); Log.d("com.arcsoft", "Score:" + score.getScore());
//销毁人脸识别引擎
error = engine.AFR_FSDK_UninitialEngine();
Log.d("com.arcsoft", "AFR_FSDK_UninitialEngine : " + error.getCode());
Class AFD_FSDKFace
功能描述:
用来保存检测到的人脸信息
构造函数:
AFD_FSDKFace(AFD_FSDKFace self)
AFD_FSDKFace self
类对象,创建的对象和传入的对象数据一致
AFD_FSDKFace()
成员函数:
Rect getRect()
返回值:保存的人脸框(Rect(left, top, right, bottom))
int getDegree()
返回值: 保存的人脸角度(AFD_FOC_0, AFD_FOC_90等)
String toString()
返回值:格式化人脸信息的字符串(String(”Rect(left, top – right, bottom), Degree”))
AFD_FSDKFace clone()
返回值:本对象的拷贝
Class AFD_FSDKError
功能描述:
这个类用来保存函数执行的错误信息
构造函数:
AFD_FSDKError()
成员函数:
int getCode()
返回值:错误码值(MOK, MERR_INVALID_PARAM等)
引擎返回的错误值定义
MERR_BASIC_BASE
基础错误起始值
MERR_UNKNOWN
MERR_INVALID_PARAM
MERR_UNSUPPORTED
输入了引擎不支持的参数或者数据
MERR_NO_MEMORY
MERR_BAD_STATE
状态错误(未初始化就调用了接口)
MERR_BUFFER_OVERFLOW
MERR_BUFFER_UNDERFLOW
MERR_FSDK_BASE
校验错误起始值
MERR_FSDK_INVALID_APP_ID
MERR_FSDK_INVALID_SDK_ID
MERR_FSDK_INVALID_ID_PAIR
SDKKEY不是于当前APPID名下的
MERR_FSDK_MISMATCH_ID_AND_SDK
SDKKEY不是当前SDK所支持的
MERR_FSDK_SYSTEM_VERSION_UNSUPPORTED
不支持的系统版本
MERR_FSDK_LICENCE_EXPIRED
Class AFD_FSDKVersion
功能描述:
这个类用来保存版本信息
构造函数:
AFD_FSDKVersion()
成员函数:
String toString()
返回值:包含所有版本信息的字符串
Class AFD_FSDKEngine
功能描述:
这个类具体实现了人脸检测的功能
构造函数:
AFD_FSDKEngine()
成员函数:
AFD_FSDKError AFD_FSDK_InitialFaceEngine(String appid, String sdkkey, int orientsPriority, int scale, int maxFaceNum)
说明:这个为初始化引擎,设置检测角度、范围,数量。创建对象后,必须先于其他成员函数调用,否则其他成员函数会返回MERR_BAD_STATE
返回值: 返回AFD_FSDKError 对象,具体错误信息参考Class AFD_FSDKError
String appid
用户申请SDK时获取的App Id
String sdkkey
用户申请SDK时获取的SDK Key
int orientsPriority
指定检测的角度(AFD_OPF_0_ONLY, AFD_OPF_90_ONLY等)
指定支持检测的最小人脸尺寸,有效值范围[2,32],推荐值16
int maxFaceNum
最多能检测到的人脸个数,有效值范围[1,50],推荐值25
AFD_FSDKErrorAFD_FSDK_StillImageFaceDetection(byte[] data, int width, int height, int format, List&AFD_FSDKFace& list)
说明: 为检测输入的图像中存在的人脸,输出结果和初始化时设置的参数有密切关系
返回值:返回AFD_FSDKError 对象,具体错误信息参考Class AFD_FSDKError
byte[] data
输入的图像数据
int height
int format
List&AFD_FSDKFace& List&/div>
检测到的人脸会放到到该列表里。注意AFD_FSDKFace对象引擎内部重复使用,如需保存,请clone一份AFD_FSDKFace对象或另外保存
AFD_FSDKError AFD_FSDK_UninitialFaceEngine()
说明:这个函数为销毁引擎,释放占用的内存资源
返回值:返回AFD_FSDKError 对象,具体错误信息参考Class AFD_FSDKError
AFD_FSDKError AFD_FSDK_GetVersion(AFD_FSDKVersion version)
说明: 这个为获取SDK版本信息
返回值:返回AFR_FSDKError对象,具体错误信息参考 Class AFR_FSDKError
AFD_FSDKVersion version
版本信息对象 参考Class AFD_FSDKVersion
颜色格式引擎支持的颜色
CP_PAF_NV21
0x802 8-bit Y层,之后是8-bit的2x2 采样的U,V交织层
检测角度:
引擎初始化时输入的目标检测角度
AFD_OPF_0_ONLY
检测0度方向
AFD_OPF_90_ONLY
检测90度方向
AFD_OPF_270_ONLY
检测270度方向度
AFD_OPF_180_ONLY
检测180度方向度
AFD_OPF_0_HIGHER_EXT
检测0, 90, 180, 270四个方向,0度更优先度
人脸角度:
检测结果中的人脸角度
AFR_FOC_90
AFR_FOC_270
AFR_FOC_180
AFR_FOC_30
AFR_FOC_60
AFR_FOC_120
AFR_FOC_150
AFR_FOC_210
AFR_FOC_240
AFR_FOC_300
AFR_FOC_330
AFD_FSDKInterface engine = new AFD_FSDKEngine();
// 用来存放检测到的人脸信息列表
List&AFD_FSDKFace& result = new ArrayList&AFD_FSDKFace&();
//初始化人脸检测引擎,使用时请替换申请的 APPID 和 SDKKEY
AFD_FSDKError err = engine.AFD_FSDK_InitialFaceEngine("APPID","SDKKEY",
AFD_FSDKEngine.AFD_OPF_0_HIGHER_EXT, 16, 5);
Log.d("com.arcsoft", "AFD_FSDK_InitialFaceEngine = " + err.getCode());
//输入的 data 数据为 NV21 格式(如 Camera 里 NV21 格式的 preview 数据),其中 height 不能为奇数,人脸检测返回结果保存在 result。
err = engine.AFD_FSDK_StillImageFaceDetection(data, width, height, AFD_FSDKEngine.CP_PAF_NV21, result);
Log.d("com.arcsoft", "AFD_FSDK_StillImageFaceDetection =" + err.getCode());
Log.d("com.arcsoft", "Face=" + result.size()); for (AFD_FSDKFace face : result) {
Log.d("com.arcsoft", "Face:" + face.toString());
//销毁人脸检测引擎
err = engine.AFD_FSDK_UninitialFaceEngine();
Log.d("com.arcsoft", "AFD_FSDK_UninitialFaceEngine =" + err.getCode());
Class AFT_FSDKFace
功能描述:
这个类用来保存检测到的人脸信息
构造函数:
AFT_FSDKFace(AFT_FSDKFace self)
说明:在一个init/unit 过程中, 只支持相同分辨率的图像数据
AFT_FSDKFace self
类对象,创建的对象和传入的对象数据一致
AFT_FSDKFace()
成员函数:
Rect getRect()
返回值:保存的人脸框(Rect(left, top, right, bottom))
int getDegree()
返回值:保存的人脸角度(AFT_FOC_0, AFT_FOC_90等)
String toString()
返回值:格式化人脸信息的字符串(String(”Rect(left, top – right, bottom), Degree”))
AFT_FSDKFace clone()
返回值: 本对象的拷贝
Class AFT_FSDKError
功能描述:
保存函数执行的错误信息
构造函数:
AFD_FSDKError()
成员函数:
int getCode()
返回值:错误码值(MOK, MERR_INVALID_PARAM等)
引擎返回的错误值定义
MERR_BASIC_BASE
基础错误起始值
MERR_UNKNOWN
MERR_INVALID_PARAM
MERR_UNSUPPORTED
输入了引擎不支持的参数或者数据
MERR_NO_MEMORY
MERR_BAD_STATE
状态错误(未初始化就调用了接口)
MERR_BUFFER_OVERFLOW
MERR_BUFFER_UNDERFLOW
MERR_FSDK_BASE
校验错误起始值
MERR_FSDK_INVALID_APP_ID
MERR_FSDK_INVALID_SDK_ID
MERR_FSDK_INVALID_ID_PAIR
SDKKEY不是于当前APPID名下的
MERR_FSDK_MISMATCH_ID_AND_SDK
SDKKEY不是当前SDK所支持的
MERR_FSDK_SYSTEM_VERSION_UNSUPPORTED
不支持的系统版本
MERR_FSDK_LICENCE_EXPIRED
Class AFT_FSDKVersion
功能描述:
这个类用来保存版本信息
构造函数:
AFT_FSDKVersion ()
成员函数:
String toString ()
返回值:包含所有版本信息的字符串
Class AFD_FSDKEngine
功能描述:
这个类具体实现了人脸跟踪的功能
构造函数:
AFT_FSDKEngine()
成员函数:
AFT_FSDKError AFT_FSDK_InitialFaceEngine(String appid, String sdkkey, int orientsPriority, int scale, int maxFaceNum)
说明:这个函数功能为初始化引擎,设置检测角度、范围,数量。创建对象后,必须先于其他成员函数调用,否则其他成员函数会返回MERR_BAD_STATE
返回值:返回AFT_FSDKError 对象,具体错误信息参考Class AFT_FSDKError
String appid
用户申请SDK时获取的App Id
String sdkkey
用户申请SDK时获取的SDK Key
int orientsPriority
指定检测的角度(AFT_OPF_0_ONLY, AFT_OPF_90_ONLY等)
指定支持检测的最小人脸尺寸,有效值范围[2,32],推荐值16
int maxFaceNum
最多能检测到的人脸个数,有效值范围[1,50],推荐值25
AFT_FSDKError AFT_FSDK_FaceFeatureDetect(byte[] data, int width, int height, int format, List&AFT_FSDKFace& list)
函数功能为检测输入的图像中存在的人脸,输出结果和初始化时设置的参数有密切关系
返回值:返回AFT_FSDKError 对象,具体错误信息参考Class AFT_FSDKError
byte[] data
输入的图像数据
int height
int format
List&AFD_FSDKFace& List&/div>
检测到的人脸会add到此list.注意AFD_FSDKFace对象引擎内部重复使用,如需保存,请clone一份AFD_FSDKFace对象或另外保存
AFT_FSDKError AFT_FSDK_UninitialFaceEngine()
说明:函数功能为销毁引擎,释放占用的内存资源
返回值:回AFT_FSDKError 对象,具体错误信息参考Class AFT_FSDKError
AFT_FSDKError AFT_FSDK_GetVersion(AFT_FSDKVersion version)
返回值:函数功能为获取版本信息
AFT_FSDKVersion verion
版本信息对象 参考Class AFT_FSDKVersion
支持的颜色格式及其对齐规则
CP_PAF_NV21
0x802 8-bit Y层,之后是8-bit的2x2 采样的U,V交织层
检测角度:
引擎初始化时输入的目标检测角度
AFT_OPF_0_ONLY
检测0度方向
AFT_OPF_90_ONLY
检测90度方向
AFT_OPF_270_ONLY
检测270度方向 度
AFT_OPF_180_ONLY
检测180度方向 度
AFT_OPF_0_HIGHER_EXT
检测0, 90, 180, 270四个方向,0度更优先 度
人脸角度:
检测结果中的人脸角度
AFR_FOC_90
AFR_FOC_270
AFR_FOC_180
AFT_FSDKInterface engine = new AFT_FSDKEngine();
// 用来存放检测到的人脸信息列表
List&AFT_FSDKFace& result = new ArrayList&&();
//初始化人脸跟踪引擎,使用时请替换申请的APPID和SDKKEY
AFT_FSDKError err = engine.AFT_FSDK_InitialFaceEngine("APPID", "SDKKEY", AFT_FSDKEngine.AFT_OPF_0_HIGHER_EXT, 16, 5);
Log.d("com.arcsoft", "AFT_FSDK_InitialFaceEngine =" + err.getCode());
//输入的data数据为NV21格式(如Camera里NV21格式的preview数据),其中height不能为奇数,人脸跟踪返回结果保存在result。
err = engine.AFT_FSDK_FaceFeatureDetect(data, width, height, AFT_FSDKEngine.CP_PAF_NV21, result);
Log.d("com.arcsoft", "AFT_FSDK_FaceFeatureDetect =" + err.getCode());
Log.d("com.arcsoft", "Face=" + result.size());
for (AFT_FSDKFace face : result) {
Log.d("com.arcsoft", "Face:" + face.toString());
//销毁人脸跟踪引擎
err = engine.AFT_FSDK_UninitialFaceEngine();
Log.d("com.arcsoft", "AFT_FSDK_UninitialFaceEngine =" + err.getCode());
Class ASAE_FSDKFace
功能描述:
用来保存传入引擎检测的人脸信息
构造函数:
ASAE_FSDKFace(ASAE_FSDKFace self)
ASAE_FSDKFace self
类对象,创建的对象和传入的对象数据一致
ASAE_FSDKFace()
ASAE_FSDKFace(Rect rect, int degree)
int degree
成员函数:
Rect getRect()
返回值:保存的人脸框(Rect(left, top, right, bottom))
int getDegree()
返回值:保存的人脸角度(ASAE_FOC_0, ASAE_FOC_90等)
String toString()
返回值:格式化人脸信息的字符串(String(”Rect(left, top – right, bottom), Degree”))
ASAE_FSDKFace clone()
返回值: 本对象的拷贝
void setRect(Rect rect)
void setDegree(int degree)
int degree
Class ASAE_FSDKError
功能描述:
这个类用来保存函数执行的错误信息。
构造函数:
ASAE_FSDKError()
成员函数:
int getCode()
返回值:错误码值(MOK, MERR_INVALID_PARAM等)
引擎返回的错误值定义
MERR_BASIC_BASE
基础错误起始值
MERR_UNKNOWN
MERR_INVALID_PARAM
MERR_UNSUPPORTED
输入了引擎不支持的参数或者数据
MERR_NO_MEMORY
MERR_BAD_STATE
状态错误(未初始化就调用了接口)
MERR_BUFFER_OVERFLOW
MERR_BUFFER_UNDERFLOW
MERR_FSDK_BASE
校验错误起始值
MERR_FSDK_INVALID_APP_ID
MERR_FSDK_INVALID_SDK_ID
MERR_FSDK_INVALID_ID_PAIR
SDKKEY不是于当前APPID名下的
MERR_FSDK_MISMATCH_ID_AND_SDK
SDKKEY不是当前SDK所支持的
MERR_FSDK_SYSTEM_VERSION_UNSUPPORTED
不支持的系统版本
MERR_FSDK_LICENCE_EXPIRED
Class ASAE_FSDKVersion
功能描述:
这个类用来保存版本信息
构造函数:
ASAE_FSDKVersion ()
成员函数:
String toString ()
返回值:包含所有版本信息的字符串
Class ASAE_FSDKAge
功能描述:
这个类用来保存性别信息
构造函数:
ASAE_FSDKAge(ASAE_FSDKAge obj)
ASAE_FSDKAge obj
复制对象本身
ASAE_FSDKAge()
成员函数:
int getAge()
返回值:0为无法识别,大于0为正常年龄
ASAE_FSDKAge clone()
返回值:本身的拷贝
引擎返回的检测年龄结果
UNKNOWN_AGE
Class ASAE_FSDKEngine
功能描述:
这个类具体实现了年龄检测的功能
ASAE_FSDKEngine()
ASAE_FSDKError ASAE_FSDK_InitAgeEngine(String appid, String sdkkey)
说明:这个函数功能为初始化引擎。创建对象后,必须先于其他成员函数调用,否则其他成员函数会返回MERR_BAD_STATE。
返回值:返回ASAE_FSDKError 对象,具体错误信息参考Class ASAE_FSDKError
String appid
用户申请SDK时获取的App Id
String sdkkey
用户申请SDK时获取的SDK Key
ASAE_FSDKError ASAE_FSDK_AgeEstimation_Video(byte[] data, int width, int height, int format, List&ASAE_FSDKFace& faces, List&ASAE_FSDKAge& ages)
说明:这个函数功能为检测输入的视频帧中对应人脸的年龄,输出结果和人脸框以及角度参数有较大关系。
返回值:返回ASAE_FSDKError 对象,具体错误信息参考Class ASAE_FSDKError
byte[] data
输入的图像数据
int height
int format
List&ASAE_FSDKFace& faces
输入的人脸信息需要放到该列表里。
List&ASAE_FSDKAge& ages
输出对应faces列表顺序的年龄信息,注意ASAE_FSDKAge对象引擎内部重复使用,如需保存,请clone一份ASAE_FSDKAge对象或另外保存
ASAE_FSDKError ASAE_FSDK_AgeEstimation_Image(byte[] data, int width, int height, int format, List&ASAE_FSDKFace& faces, List&ASAE_FSDKAge& ages)
说明:这个函数功能为检测输入的图片中对应人脸的年龄,输出结果和人脸框以及角度参数有较大关系。
返回值:返回ASAE_FSDKError 对象,具体错误信息参考Class ASAE_FSDKError
byte[] data
输入的图像数据
int height
int format
List&ASAE_FSDKFace& faces
输入的人脸信息需要放到该列表里。
List&ASAE_FSDKAge& ages
输出对应faces列表顺序的年龄信息,注意ASAE_FSDKAge对象引擎内部重复使用,如需保存,请clone一份ASAE_FSDKAge对象或另外保存
ASAE_FSDKError ASAE_FSDK_UninitAgeEngine()
这个函数功能为销毁引擎,释放占用的内存资源。
返回值:返回ASAE_FSDKError 对象,具体错误信息参考Class ASAE_FSDKError
ASAE_FSDKError ASAE_FSDK_GetVersion(ASAE_FSDKVersion version)
这个函数功能为获取SDK版本信息
返回值:返回ASAE_FSDKError 对象,具体错误信息参考Class ASAE_FSDKError
ASAE_FSDKVersion version
版本信息对象 参考Class ASAE_FSDKVersion
颜色格式:
引擎支持的颜色格式
CP_PAF_NV21
0x802 8-bit Y层,之后是8-bit的2x2 采样的U,V交织层
人脸角度:
检测结果中的人脸角度
ASAE_FOC_0
ASAE_FOC_90
ASAE_FOC_270
ASAE_FOC_180
ASAE_FOC_30
ASAE_FOC_60
ASAE_FOC_120
ASAE_FOC_150
ASAE_FOC_210
ASGE_FOC_240
ASGE_FOC_300
ASGE_FOC_330
ASAE_FSDKEngine engine = new ASAE_FSDKEngine();
// 用来存放检测到的人脸信息列表
List&ASAE_FSDKAge& result = new ArrayList&ASAE_FSDKAge&();
List&ASAE_FSDKFace& input = new ArrayList&ASAE_FSDKFace&();
//这里人脸框和角度,请根据实际对应图片中的人脸框和角度填写
input.add(new ASAE_FSDKFace(new Rect(210, 178, 478, 446), ASAE_FSDKEngine.ASAE_FOC_0));
//初始化人脸检测引擎,使用时请替换申请的APPID和SDKKEY
ASAE_FSDKError err = engine.ASAE_FSDK_InitAgeEngine("APPID","SDKKEY");
Log.d("com.arcsoft", "ASAE_FSDK_InitAgeEngine = " + err.getCode());
//输入的data数据为NV21格式(如Camera里NV21格式的preview数据),其中height不能为奇数,人脸检测返回结果保存在result。
err = engine.ASAE_FSDK_AgeEstimation_Image(data, width, height, ASAE_FSDKEngine.CP_PAF_NV21, input, result);
Log.d("com.arcsoft", "ASAE_FSDK_AgeEstimation_Image =" + err.getCode());
Log.d("com.arcsoft", "Face=" + result.size());
for (ASAE_FSDKAge age : result) {
Log.d("com.arcsoft", "Age:" + age.getAge());
//销毁人脸检测引擎
err = engine.ASAE_FSDK_UninitAgeEngine();
Log.d("com.arcsoft", "ASAE_FSDK_UninitAgeEngine =" + err.getCode());
Class ASGE_FSDKFace
功能描述:
用来保存传入引擎检测的人脸信息
构造函数:
ASGE_FSDKFace(ASGE_FSDKFace self)
ASGE_FSDKFace self
类对象,创建的对象和传入的对象数据一致
ASGE_FSDKFace()
ASGE_FSDKFace(Rect rect, int degree)
int degree
成员函数:
Rect getRect()
返回值:保存的人脸框(Rect(left, top, right, bottom))
int getDegree()
返回值:保存的人脸角度(ASGE_FOC_0, ASGE_FOC_90等)
String toString()
返回值:格式化人脸信息的字符串(String(”Rect(left, top – right, bottom), Degree”))
ASGE_FSDKFace clone()
返回值: 本对象的拷贝
void setRect(Rect rect)
void setDegree(int degree)
int degree
Class ASGE_FSDKError
功能描述:
这个类用来保存函数执行的错误信息。
构造函数:
ASGE_FSDKError()
成员函数:
int getCode()
返回值:错误码值(MOK, MERR_INVALID_PARAM等)
引擎返回的错误值定义
MERR_BASIC_BASE
基础错误起始值
MERR_UNKNOWN
MERR_INVALID_PARAM
MERR_UNSUPPORTED
输入了引擎不支持的参数或者数据
MERR_NO_MEMORY
MERR_BAD_STATE
状态错误(未初始化就调用了接口)
MERR_BUFFER_OVERFLOW
MERR_BUFFER_UNDERFLOW
MERR_FSDK_BASE
校验错误起始值
MERR_FSDK_INVALID_APP_ID
MERR_FSDK_INVALID_SDK_ID
MERR_FSDK_INVALID_ID_PAIR
SDKKEY不是于当前APPID名下的
MERR_FSDK_MISMATCH_ID_AND_SDK
SDKKEY不是当前SDK所支持的
MERR_FSDK_SYSTEM_VERSION_UNSUPPORTED
不支持的系统版本
MERR_FSDK_LICENCE_EXPIRED
Class ASGE_FSDKVersion
功能描述:
这个类用来保存版本信息
构造函数:
ASGE_FSDKVersion ()
成员函数:
String toString ()
返回值:包含所有版本信息的字符串
Class ASGE_FSDKGender
功能描述:
这个类用来保存性别信息
构造函数:
ASGE_FSDKGender()
ASGE_FSDKGender(ASGE_FSDKGender obj)
ASGE_FSDKGender obj
对象本身的复制
成员函数:
int getGender()
返回值:0为男性,1为女性,-1为未识别
ASGE_FSDKGender clone()
返回值:本身的拷贝
引擎返回的检测年龄结果
Class ASGE_FSDKEngine
功能描述:
这个类具体实现了性别检测的功能
ASGE_FSDKEngine()
ASGE_FSDKError ASGE_FSDK_InitGenderEngine(String appid, String sdkkey)
这个函数功能为初始化引擎。创建对象后,必须先于其他成员函数调用,否则其他成员函数会返回MERR_BAD_STATE。
返回值:返回ASGE_FSDKError 对象,具体错误信息参考Class ASGE_FSDKError
String appid
用户申请SDK时获取的App Id
String sdkkey
用户申请SDK时获取的SDK Key
ASGE_FSDKError ASGE_FSDK_GenderEstimation_Video(byte[] data, int width, int height, int format, List&ASGE_FSDKFace& faces, List&ASGE_FSDKGender& genders)
这个函数功能为检测输入的视频帧中对应人脸的性别,输出结果和人脸框以及角度参数有较大关系。
返回值:返回ASGE_FSDKError 对象,具体错误信息参考Class ASGE_FSDKError
byte[] data
输入的图像数据
int height
int format
List&ASGE_FSDKFace& faces
输入的人脸信息需要放到该列表里。
List&ASGE_FSDKGender& genders
输出对应faces列表顺序的年龄信息,注意ASGE_FSDKGender对象引擎内部重复使用,如需保存,请clone一份ASGE_FSDKGender对象或另外保存
ASGE_FSDKError ASGE_FSDK_GenderEstimation_Image(byte[] data, int width, int height, int format, List&ASGE_FSDKFace& faces, List&ASGE_FSDKGender& genders)
这个函数功能为检测输入的图片中对应人脸的性别,输出结果和人脸框以及角度参数有较大关系。
返回值:返回ASGE_FSDKError 对象,具体错误信息参考Class ASGE_FSDKError
byte[] data
输入的图像数据
int height
int format
List&ASGE_FSDKFace& faces
输入的人脸信息需要放到该列表里。
List&ASGE_FSDKGender& genders
输出对应faces列表顺序的年龄信息,注意ASGE_FSDKGender对象引擎内部重复使用,如需保存,请clone一份ASGE_FSDKGender对象或另外保存
ASGE_FSDKError ASGE_FSDK_UninitGenderEngine()
这个函数功能为销毁引擎,释放占用的内存资源。
返回值:返回ASGE_FSDKError 对象,具体错误信息参考Class ASGE_FSDKError
ASGE_FSDKError ASGE_FSDK_GetVersion(ASGE_FSDKVersion version)
这个函数功能为获取SDK版本信息
返回值:返回ASGE_FSDKError 对象,具体错误信息参考Class ASGE_FSDKError
ASGE_FSDKVersion version
版本信息对象 参考Class ASGE_FSDKVersion
颜色格式:
引擎支持的颜色格式
CP_PAF_NV21
0x802 8-bit Y层,之后是8-bit的2x2 采样的U,V交织层
人脸角度:
检测结果中的人脸角度
ASGE_FOC_0
ASGE_FOC_90
ASGE_FOC_270
ASGE_FOC_180
ASGE_FOC_30
ASGE_FOC_60
ASGE_FOC_120
ASGE_FOC_150
ASGE_FOC_210
ASGE_FOC_240
ASGE_FOC_300
ASGE_FOC_330
FSDKEngine engine = new ASGE_FSDKEngine();
// 用来存放检测到的人脸信息列表
List&ASGE_FSDKGenderList& result = new ArrayList&ASGE_FSDKGenderList&();
List&ASGE_FSDKFaceList& input = new ArrayList&ASGE_FSDKFaceList&();
//这里人脸框和角度,请根据实际对应图片中的人脸框和角度填写
input.add(new ASGE_FSDKFace(new Rect(210, 178, 478, 446), ASGE_FSDKEngine.ASGE_FOC_0));
//初始化人脸检测引擎,使用时请替换申请的APPID和SDKKEY
ASGE_FSDKError err = engine.ASGE_FSDK_InitgGenderEngine("APPID","SDKKEY");
Log.d("com.arcsoft", "ASGE_FSDK_InitgGenderEngine = " + err.getCode());
//输入的data数据为NV21格式(如Camera里NV21格式的preview数据),其中height不能为奇数,人脸检测返回结果保存在result。
err = engine.ASGE_FSDK_GenderEstimation_Image(data, width, height, ASGE_FSDKEngine.CP_PAF_NV21, input, result);
Log.d("com.arcsoft", "ASGE_FSDK_GenderEstimation_Image =" + err.getCode());
Log.d("com.arcsoft", "Face=" + result.size());
for (ASGE_FSDKGender gender : result) {
switch(gender.getGender()) {
case ASGE_FSDKGender.FEMALE : Log.d("com.arcsoft", "gender: FEMALE" );
case ASGE_FSDKGender.MALE: Log.d("com.arcsoft", "gender: MALE" );
case ASGE_FSDKGender.UNKNOWN: Log.d("com.arcsoft", "gender: UNKNOWN" );
//销毁人脸检测引擎
err = engine.ASGE_FSDK_UninitGenderEngine();
Log.d("com.arcsoft", "ASGE_FSDK_UninitGenderEngine =" + err.getCode());
Window API
Android API
FR 人脸识别
FD 人脸检测
FT 人脸跟踪
SAE 年龄检测
SGE 性别检测
从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id, SDK_key)
将获取到的开发包导入到您的应用中
App_id与SDK_key是在初始化的时候需要使用
所有基本类型在平台库中有定义。 定义规则是在ANSIC 中的基本类型前加上字母“M”同时将类型的第一个字母改成大写。例如“long” 被定义成“MLong”
数据结构与枚举
AFR_FSDK_FACEINPUT
描述: 通过人脸检测引擎获得的脸部信息
typedef struct{
AFR_FSDK_OrientCode
} AFR_FSDK_FACEINPUT, *LPAFR_FSDK_FACEINPUT;
人脸矩形框信息
脸部旋转角度
AFR_FSDK_FACEMODEL
描述: 脸部特征信息
typedef struct{
} AFR_FSDK_FACEMODEL, *LPAFR_FSDK_FACEMODEL;
人脸特征信息
lFeatureSize
人脸特征信息长度
AFR_FSDK_Version
描述: SDK版本信息
typedef struct{
MInt32 lFeatureL
MPChar BuildD
MPChar CopyR
} AFR_FSDK_V
代码库版本号
编译版本号,递增
lFeatureLevel
人脸特征库版本号
字符串形式的版本号
AFR_FSDK_OrientCode
描述: 基于逆时针的脸部方向枚举值
enum _AFR_FSDK_OrientCode{
AFR_FSDK_FOC_0
AFR_FSDK_FOC_90
AFR_FSDK_FOC_270
AFR_FSDK_FOC_180
AFR_FSDK_FOC_30
AFR_FSDK_FOC_60
AFR_FSDK_FOC_120
AFR_FSDK_FOC_150
AFR_FSDK_FOC_210
AFR_FSDK_FOC_240
AFR_FSDK_FOC_300
AFR_FSDK_FOC_330
AFT_FSDK_FOC_0
AFT_FSDK_FOC_90
AFT_FSDK_FOC_270
AFT_FSDK_FOC_180
AFR_FSDK_FOC_60
AFR_FSDK_FOC_120
AFR_FSDK_FOC_150
AFR_FSDK_FOC_210
AFR_FSDK_FOC_240
AFR_FSDK_FOC_300
AFR_FSDK_FOC_330
支持的颜色格式
描述: 颜色格式及其对齐规则
ASVL_PAF_NV12 8-bit Y层,之后是8-bit的2x2 采样的U层和V层
AFR_FSDK_InitialEngine
初始化人脸识别引擎
MRESULT AFR_FSDK_InitialEngine(
[in] 用户申请SDK时获取的App Id
[in] 用户申请SDK时获取的SDK Key
[in] 分配给引擎使用的内存地址
[in] 分配给引擎使用的内存大小
[out] 引擎句柄
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
AFR_FSDK_ExtractFRFeature
取脸部特征
MRESULT AFR_FSDK_ExtractFRFeature (
LPASVLOFFSCREEN
pInputImage,
LPAFR_FACEINPUT
LPAFR_FACEMODEL
pFaceModels
[in] 引擎句柄
pInputImage
[in] 输入的图像数据
[in] 已检测到的脸部信息
pFaceModels
[out] 提取的脸部特征信息
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
AFR_FSDK_FacePairMatching
脸部特征比较
MRESULT AFR_FSDK_FacePairMatching(
AFR_FACEMODEL
*reffeature,
AFR_FACEMODEL
*probefeature,
*pfSimilScore
[in] 引擎句柄
reffeature
[in] 已有脸部特征信息
probefeature
[in] 被比较的脸部特征信息
pfSimilScore
[out] 脸部特征相似程度数值
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
AFR_FSDK_UninitialEngine
销毁引擎,释放相应资源
MRESULT AFR_FSDK_UninitialEngine(
[in] 引擎句柄
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
AFR_FSDK_GetVersion
获取SDK版本信息
const AFR_FSDK_Version *AFR_FSDK_GetVersion(
[in] 引擎handle
其他说明:
“此版本为免费开放的标准版本(为保证最优体验,建议注册人脸数小于1000),若有定制升级需求,请联系我们。”
C语言示例代码
#include "arcsoft_fsdk_face_recognition.h"
#include "ammem.h"
#include "merror.h"
#include &stdlib.h&
#include &string.h&
#include "arcsoft_fsdk_face_recognition.h"
#include "ammem.h"
#include "merror.h"
#include &stdlib.h&
#include &string.h&
#define ARC_APP_ID
"YOUR OWN APP ID"
#define ARC_FR_SDK_KEY
"YOUR OWN SDK KEY" #define ARC_FR_MEM_SIZE
#define ARC_FR_MAX_FEATURE_COUNT_PER_PERSON
5 #define ARC_FR_SCORE_THRESHOLD
typedef struct
MInt32 lFeatureS
MByte *pbF
}AFR_FSDK_FACEDATA, *LPAFR_FSDK_FACEDATA;
typedef struct
MLong lPersonID;
MChar szPersonName[128];
AFR_FSDK_FACEDATA* pFaceFeatureA
}AFR_FSDK_PERSON, *LPAFR_FSDK_PERSON;
//人脸检测实现
MRESULT detectFace(LPASVLOFFSCREEN pOff, AFR_FSDK_FACEINPUT* pFaceInput)
//使用人脸检测引擎检测人脸信息
return MOK;
MRESULT addPersonToDB(LPAFR_FSDK_PERSON person)
MRESULT loadPersonsFromDB(LPAFR_FSDK_PERSON* persons, MLong* pPersonCount)
return MOK;
//人脸注册实现
MRESULT doRegister()
MVoid* pMemBuffer = MMemAlloc(MNull, ARC_FR_MEM_SIZE);
MHandle hEngine = MN
//初始化人脸识别引擎
MRESULT mr = AFR_FSDK_InitialEngine((MPChar)ARC_APP_ID,
(MPChar)ARC_FR_SDK_KEY, (MByte*)pMemBuffer, ARC_FR_MEM_SIZE, &hEngine);
if (MOK != mr) {
//错误码检查
ASVLOFFSCREEN offScreenIn = {0};
offScreenIn.u32PixelArrayFormat = ASVL_PAF_NV12;
offScreenIn.i32Width = 1280;
offScreenIn.i32Height = 720;
offScreenIn.pi32Pitch[0] = offScreenIn.i32W
offScreenIn.pi32Pitch[1] = offScreenIn.i32W
offScreenIn.ppu8Plane[0] = MN
offScreenIn.ppu8Plane[1] = MN
AFR_FSDK_FACEINPUT faceInput = {0};
mr = detectFace(&offScreenIn, &faceInput);
if (MOK != mr)
AFR_FSDK_FACEMODEL faceModel = {0};
//提取人脸特性信息
mr = AFR_FSDK_ExtractFRFeature(hEngine, &offScreenIn, &faceInput,
&faceModel);
if (MOK != mr)
AFR_FSDK_FACEDATA featureData = {0};
featureData.lFeatureSize = faceModel.lFeatureS featureData.pbFeature = (MByte*)MMemAlloc(MNull, featureData.lFeatureSize);
MMemCpy(featureData.pbFeature, faceModel.pbFeature, featureData.lFeatureSize);
AFR_FSDK_PERSON person = {0};
person.lPersonID = 330;
strncpy(person.szPersonName , "Jack", strlen("Jack")); // input name
person.nFeatureCount = 1;
person.pFaceFeatureArray = (AFR_FSDK_FACEDATA*)MMemAlloc(MNull, sizeof(AFR_FSDK_FACEDATA) * person.nFeatureCount);
person.pFaceFeatureArray[0] = featureD
addPersonToDB(&person);
} while (MFalse);
//对人脸识别引擎做销毁
mr = AFR_FSDK_UninitialEngine(hEngine);
if(pMemBuffer != MNull)
MMemFree(MNull,pMemBuffer);
pMemBuffer = MN
//人脸识别实现
MRESULT doRecognition()
MVoid* pMemBuffer = MMemAlloc(MNull, ARC_FR_MEM_SIZE);
MHandle hEngine = MN
//初始化人脸识别引擎
MRESULT mr = AFR_FSDK_InitialEngine((MPChar)ARC_APP_ID,
(MPChar)ARC_FR_SDK_KEY, (MByte*)pMemBuffer, ARC_FR_MEM_SIZE, &hEngine);
if (MOK != mr) {
ASVLOFFSCREEN offScreenIn = {0};
offScreenIn.u32PixelArrayFormat = ASVL_PAF_NV12;
offScreenIn.i32Width = 1280;
offScreenIn.i32Height = 720;
offScreenIn.pi32Pitch[0] = offScreenIn.i32W
offScreenIn.pi32Pitch[1] = offScreenIn.i32W
offScreenIn.ppu8Plane[0] = MN
offScreenIn.ppu8Plane[1] = MN
AFR_FSDK_FACEINPUT faceInput = {0};
mr = detectFace(&offScreenIn, &faceInput);
if (MOK != mr)
AFR_FSDK_FACEMODEL faceModel = {0};
//提取人脸特性信息
mr = AFR_FSDK_ExtractFRFeature(hEngine, &offScreenIn, &faceInput,
&faceModel);
if (MOK != mr)
AFR_FSDK_FACEMODEL probeFaceModel = faceM
AFR_FSDK_PERSON personRecognized = {0};
MFloat fMaxScore = 0;
LPAFR_FSDK_PERSON persons = MN
MLong lPersonCount = 0;
loadPersonsFromDB(&persons, &lPersonCount);
for (int i = 0; i & lPersonC ++i)
AFR_FSDK_PERSON person = persons[i];
for (int j = 0; j & person.nFeatureC ++j)
AFR_FSDK_FACEMODEL refFaceModel = {0};
refFaceModel.lFeatureSize = person.pFaceFeatureArray[j].lFeatureS
refFaceModel.pbFeature = person.pFaceFeatureArray[j].pbF
MFloat fScore = 0.0;
//人脸特性信息比对,返回两个人脸特性的相似度
MRESULT mr = AFR_FSDK_FacePairMatching(hEngine, &refFaceModel,
&probeFaceModel, &fScore);
if (mr == MOK && fScore & fMaxScore) {
fMaxScore = fS
personRecognized =
if (fMaxScore & ARC_FR_SCORE_THRESHOLD) {
} while (MFalse);
//对人脸识别引擎做销毁
mr = AFR_FSDK_UninitialEngine(hEngine);
if(pMemBuffer != MNull)
MMemFree(MNull,pMemBuffer);
pMemBuffer = MN
从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id, SDK_key)
将获取到的开发包导入到您的应用中
App_id与SDK_key是在初始化的时候需要使用
typedef MInt32 AFD_FSDK_OrientP
typedef MInt32 AFD_FSDK_OrientC
所有基本类型在平台库中有定义。 定义规则是在ANSIC 中的基本类型前加上字母“M”同时将类型的第一个字母改成大写。例如“long” 被定义成“MLong”
数据结构与枚举
AFD_FSDK_FACERES
描述: 检测到的脸部信息
typedef struct {
AFD_OrientCodeAPI
} AFD_FSDK_FACERES, *LPAFD_FSDK_FACERES;
人脸矩形框信息
lfaceOrient
人脸角度信息
AFD_FSDK_Version
描述: SDK版本信息
typedef struct {
} AFD_FSDK_V
代码库版本号
编译版本号,递增
字符串形式的版本号
AFD_FSDK_OrientPriority
描述: 定义脸部角度检测的范围
enum AFD_OrientPriority{
AFD_FSDK_OPF_0_ONLY
AFD_FSDK_OPF_90_ONLY
AFD_FSDK_OPF_270_ONLY
AFD_FSDK_OPF_180_ONLY
AFD_FSDK_OPF_0_HIGHER_EXT
AFD_FSDK_OPF_0_ONLY
检测0度(±45度)方向
AFD_FSDK_OPF_90_ONLY
检测90度(±45度)方向
AFD_FSDK_OPF_270_ONLY
检测270度(±45度)方向
AFD_FSDK_OPF_180_ONLY
检测180度(±45度)方向
AFD_FSDK_OPF_0_HIGHER_EXT
检测0度,90度,180度,270度四个方向,其中0度更优先
AFD_FSDK_OrientCode
描述: 定义人脸检测结果中的人脸角度
enum AFD_FSDK_OrientCode{
AFD_FSDK_FOC_0
AFD_FSDK_FOC_90
AFD_FSDK_FOC_270
AFD_FSDK_FOC_180
AFD_FSDK_FOC_30
AFD_FSDK_FOC_60
AFD_FSDK_FOC_120
AFD_FSDK_FOC_150
AFD_FSDK_FOC_210
AFD_FSDK_FOC_240
AFD_FSDK_FOC_300
AFD_FSDK_FOC_330
AFT_FSDK_FOC_0
AFT_FSDK_FOC_90
AFT_FSDK_FOC_270
AFT_FSDK_FOC_180
AFR_FSDK_FOC_60
AFR_FSDK_FOC_120
AFR_FSDK_FOC_150
AFR_FSDK_FOC_210
AFR_FSDK_FOC_240
AFR_FSDK_FOC_300
AFR_FSDK_FOC_330
支持的颜色格式
描述: 颜色格式及其对齐规则
ASVL_PAF_NV12 8-bit Y层,之后是8-bit的2x2 采样的U层和V层
AFD_FSDK_InitialFaceEngine
初始化人脸检测引擎
MRESULT AFD_FSDK_InitialFaceEngine (
*phEngine,
AFD_FSDK_OrientPriority iOrientPriority,
nMaxFaceNum
[in] 用户申请SDK时获取的App Id
[in] 用户申请SDK时获取的SDK Key
[in] 分配给引擎使用的内存地址
[in] 分配给引擎使用的内存大小
[out] 引擎句柄
iOrientPriority
[in] 期望的脸部检测角度的范围
[in] 用于数值表示的最小人脸尺寸 有效值范围[2,50] 推荐值
16。该尺寸是人脸相对于所在图片的长边的占比。例如,如果用户想检测到的最小人脸尺寸是图片长度的1/8,那么这个nScale就应该设置为8
nMaxFaceNum
[in] 用户期望引擎最多能检测出的人脸数 有效值范围[1,50]
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
AFD_FSDK_StillImageFaceDetection
根据输入的图像检测出人脸位置,一般用于静态图像检测
MRESULT AFD_FSDK_StillImageFaceDetection(
LPASVLOFFSCREEN
LPAFD_FACERES
成功返回MOK,否则返回失败code
[in] 引擎句柄
[in] 输入的图像数据
[out] 人脸检测结果
AFD_FSDK_UninitialFaceEngine
销毁引擎,释放相应资源
MRESULT AFD_FSDK_UninitialFaceEngine(
[in] 引擎句柄
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
AFD_FSDK_GetVersion
获取SDK版本信息
const AFD_FSDK_Version *AFD_FSDK_GetVersion(
[in] 引擎句柄
C语言示例代码
#include "ammem.h"
#include "merror.h"
#include &stdlib.h&
#define ARC_APP_ID
#define ARC_FD_SDK_KEY
#define ARC_FD_MAX_FACE_NUM
#define ARC_FD_MEM_SIZE
MRESULT doFaceDetect()
MVoid* pMemBuffer = MMemAlloc(MNull, ARC_FD_MEM_SIZE);
MHandle hEngine = MN
//初始化人脸检测引擎
MRESULT mr = AFD_FSDK_InitialFaceEngine((MPChar)ARC_APP_ID,
(MPChar)ARC_FD_SDK_KEY,(MByte*) pMemBuffer, ARC_FD_MEM_SIZE, &hEngine,
AFD_FSDK_OPF_0_HIGHER_EXT, 16, ARC_FD_MAX_FACE_NUM);
if (MOK != mr) {
//错误码检查
//图像数据
ASVLOFFSCREEN offScreenIn = {0};
//指定图像数据格式
offScreenIn.u32PixelArrayFormat = ASVL_PAF_NV12;
offScreenIn.i32Width = 1280;
offScreenIn.i32Height = 720;
offScreenIn.pi32Pitch[0] = offScreenIn.i32W
offScreenIn.pi32Pitch[1] = offScreenIn.i32W
offScreenIn.ppu8Plane[0] = MN
offScreenIn.ppu8Plane[1] = MN
LPAFD_FSDK_FACERES pFaceRes = MN
//检测人脸,并把结果输出到pFaceRes
mr = AFD_FSDK_StillImageFaceDetection( hEngine, &offScreenIn, &pFaceRes);
//对人脸检测引擎做销毁
mr = AFD_FSDK_UninitialFaceEngine( hEngine);
if(pMemBuffer != MNull)
MMemFree(MNull,pMemBuffer);
pMemBuffer = MN
从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id, SDK_key)
将获取到的开发包导入到您的应用中
App_id与SDK_key是在初始化的时候需要使用
typedef MInt32 AFT_FSDK_OrientP
typedef MInt32 AFT_FSDK_OrientC
所有基本类型在平台库中有定义。 定义规则是在ANSIC 中的基本类型前加上字母“M”同时将类型的第一个字母改成大写。例如“long” 被定义成“MLong”
数据结构与枚举
AFT_FSDK_FACERES
描述: 检测到的脸部信息
typedef struct{
AFT_OrientCode lfaceO
} AFT_FSDK_FACERES, *LPAFT_FSDK_FACERES;
人脸矩形框信息
lfaceOrient
人脸角度信息
AFT_FSDK_Version
描述: SDK版本信息
typedef struct{
} AFT_FSDK_V
代码库版本号
编译版本号,递增
字符串形式的版本号
AFT_FSDK_OrientPriority
描述: 定义脸部检测角度的优先级
enum _AFT_FSDK_OrientPriority {
AFT_FSDK_OPF_0_ONLY
AFT_FSDK_OPF_90_ONLY
AFT_FSDK_OPF_270_ONLY
AFT_FSDK_OPF_180_ONLY
AFT_FSDK_OPF_0_HIGHER_EXT
AFD_FSDK_OPF_0_ONLY
检测0度方向
AFD_FSDK_OPF_90_ONLY
检测90度方向
AFD_FSDK_OPF_270_ONLY
检测270度方向
AFD_FSDK_OPF_180_ONLY
检测180度方向
AFD_FSDK_OPF_0_HIGHER_EXT
检测0度,90度,180度,270度四个方向,其中0度更优先
AFT_FSDK_OrientCode
描述: 定义检测返回的人脸角度
enum _AFT_FSDK_OrientCode {
AFT_FSDK_FOC_0
AFT_FSDK_FOC_90
AFT_FSDK_FOC_270
AFT_FSDK_FOC_180
AFT_FSDK_FOC_0
AFT_FSDK_FOC_90
AFT_FSDK_FOC_270
AFT_FSDK_FOC_180
支持的颜色格式
描述: 颜色格式及其对齐规则
ASVL_PAF_NV12 8-bit Y层,之后是8-bit的2x2 采样的U层和V层
AFT_FSDK_InitialFaceEngine
初始化人脸检测引擎
MRESULT AFT_FSDK_InitialFaceEngine(
*phEngine,
AFT_FSDK_OrientPriority iOrientPriority,
nMaxFaceNum
[in] 用户申请SDK时获取的App Id
[in] 用户申请SDK时获取的SDK Key
[in] 分配给引擎使用的内存地址
[in] 分配给引擎使用的内存大小
[out] 引擎句柄
iOrientPriority
[out] 期望的脸部检测角度的优先级
[in] 用于数值表示的最小人脸尺寸 有效值范围[2,16] 推荐值 16
nMaxFaceNum
[in] 用户期望引擎最多能检测出的人脸数 有效值范围[1,20]
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
AFT_FSDK_FaceFeatureDetect
根据输入的图像检测人脸,一般用于视频检测,多帧方式
MRESULT AFT_FSDK_FaceFeatureDetect(
LPASVLOFFSCREEN
LPAFT_FACERES
[in] 引擎句柄
[in] 输入的图像数据
[out] 人脸检测结果
在一个init/unit 过程中, 只支持相同分辨率的图像数据
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
MERR_BAD_STATE 状态不正确
AFT_FSDK_UninitialFaceEngine
销毁引擎,释放相应资源
MRESULT AFT_FSDK_UninitialFaceEngine(
[in] 引擎句柄
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
AFT_FSDK_GetVersion
获取SDK版本信息
const AFT_FSDK_Version * AFT_FSDK_GetVersion (
[in] 引擎句柄
C语言示例代码
#include "arcsoft_fsdk_face_tracking.h"
#include "ammem.h"
#include "merror.h"
#include &stdlib.h&
#define ARC_APP_ID
#define ARC_FT_SDK_KEY
#define ARC_FT_MAX_FACE_NUM
#define ARC_FT_MEM_SIZE
MRESULT doFaceTracking()
MVoid* pMemBuffer = MMemAlloc(MNull, ARC_FT_MEM_SIZE);
MHandle hEngine = MN
//初始化人脸检测跟踪引擎
MRESULT mr = AFT_FSDK_InitialFaceEngine((MPChar)ARC_APP_ID,
(MPChar)ARC_FT_SDK_KEY, (MByte*)pMemBuffer, ARC_FT_MEM_SIZE, &hEngine,
AFT_FSDK_OPF_0_HIGHER_EXT, 16, ARC_FT_MAX_FACE_NUM);
if (MOK != mr) {
//错误码检查
// 连续视频图像数据
ASVLOFFSCREEN offScreenIn = {0};
//指定图像数据格式
offScreenIn.u32PixelArrayFormat = ASVL_PAF_NV12;
offScreenIn.i32Width = 1280;
offScreenIn.i32Height = 720;
offScreenIn.pi32Pitch[0] = offScreenIn.i32W
offScreenIn.pi32Pitch[1] = offScreenIn.i32W
offScreenIn.ppu8Plane[0] = MN
offScreenIn.ppu8Plane[1] = MN
LPAFT_FSDK_FACERES pFaceRes = MN
//检测人脸,并把结果输出到pFaceRes
mr = AFT_FSDK_FaceFeatureDetect(hEngine, &offScreenIn, &pFaceRes);
} while (MFalse);
//对人脸检测跟踪引擎做销毁
mr = AFT_FSDK_UninitialFaceEngine(&hEngine);
if(pMemBuffer != MNull)
MMemFree(MNull,pMemBuffer);
pMemBuffer = MN
从虹软官网下载获取ArcFace引擎应用开发包,及其对应的激活码(App_id, SDK_key)将获取到的开发包导入到您的应用中
App_id与SDK_key是在初始化的时候需要使用
所有基本类型在平台库中有定义。 定义规则是在ANSIC 中的基本类型前加上字母“M”同时将类型的第一个字母改成大写。例如“long” 被定义成“MLong”
数据结构与枚举
ASAE_FSDK_Version
描述: SDK版本信息
typedef struct{
MPChar BuildD
MPChar CopyR
} ASAE_FSDK_V
代码库版本号
编译版本号,递增
字符串形式的版本号
ASAE_FSDK_AGERESULT
描述: 定义年龄检测结果信息
typedef struct{
MInt32 * pAgeResultA
MInt32 lFaceN
} ASAE_FSDK_AGERESULT, *LPASAE_FSDK_AGERESULT;
pAgeResultArray
检测出的年龄结果数组
lFaceNumber
检测出的年龄结果个数
ASAE _FSDK_AGEFACEINPUT
描述: 定义脸部信息
Typedef struct{
MRECT *pFaceRectA
MInt32 *pFaceOrientA
MInt32 lFaceN
} ASAE_FSDK_AGEFACEINPUT, *LPASAE_FSDK_AGEFACEINPUT;
ASAE_FSDK_AgeOrientCode
描述: 基于逆时针的脸部方向枚举值
enum _AFR_FSDK_OrientCode{
ASAE_FSDK_FOC_0
ASAE_FSDK_FOC_90
ASAE_FSDK_FOC_270
ASAE_FSDK_FOC_180
ASAE_FSDK_FOC_30
ASAE_FSDK_FOC_60
ASAE_FSDK_FOC_120
ASAE_FSDK_FOC_150
ASAE_FSDK_FOC_210
ASAE_FSDK_FOC_240
ASAE_FSDK_FOC_300
ASAE_FSDK_FOC_330
AFT_FSDK_FOC_0
AFT_FSDK_FOC_90
AFT_FSDK_FOC_270
AFT_FSDK_FOC_180
ASAE_FSDK_FOC_60
ASAE_FSDK_FOC_120
ASAE_FSDK_FOC_150
ASAE_FSDK_FOC_210
ASAE_FSDK_FOC_240
ASAE_FSDK_FOC_300
ASAE_FSDK_FOC_330
ASAE_FSDK_InitAgeEngine
初始化人脸识别引擎
MRESULT ASAE_FSDK_InitAgeEngine(
MByte *pMem,
[in] 用户申请SDK时获取的App Id
[in] 用户申请SDK时获取的SDK Key
[in] 分配给引擎使用的内存地址
[in] 分配给引擎使用的内存大小
[out] 年龄检测引擎
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
ASAE_FSDK_AgeEstimation_StaticImage
检测静态图片中人物的年龄
MRESULT ASAE_FSDK_AgeEstimation_StaticImage (
MHandle hEngine,
LPASVLOFFSCREEN pImginfo,
LPASAE_FSDK_AGEFACEINPUT pFaceRes,
LPASAE_FSDK_AGERESULT pAgeRes
[in] 年龄检测引擎
[in] 输入的图像数据
[in] 已检测到的脸部信息
[out] 年龄检测结果
成功返回MOK,否则返回失败code。失败codes如下所列:
MERR_INVALID_PARAM 参数输入非法
MERR_NO_MEMORY 内存不足
ASAE_FSDK_AgeEstimation_Preview
检测动态视频中人物的年龄
MRESULT ASAE_FSDK_AgeEstimation_Preview(
MHandle

我要回帖

更多关于 虹软公司人脸识别demo 的文章

 

随机推荐