产品地址:http://ai.arcsoft.com.cn/product/arcface.html
虹软ArcFace功能简介
- 人脸检测
- 人脸跟踪
- 人脸属性检测(性别、年龄)
- 人脸三维角度检测
- 人脸对比
虹软arcface 2.0,相较于以前的版本,api有很大的变化
以前的版本,都是模块化分开的,如人脸检测是独立的、人脸对比识别是独立的、年龄识别、性别识别等都是独立的。
2.0版本,整体提供了一个完整的包,如果同时会用到各个功能,更利于使用!
官方提供了windows版本,linux版本,android版本,android版本其实就是java版本,但因为其是基于android平台,应该只有在android平台上才可以使用。为了满足java服务端(windows或Linux 如centos等 平台)的使用,本人对arcface 2.0的API使用JNA进行了封装。首先需要去虹软平台做开发者认证、下载虹软arcface 2.0 的sdk,参考官方提供的开发者指南进行封装
封装后的Engine代码
package com.arcsoft.face;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.FloatByReference;
import com.sun.jna.ptr.PointerByReference;
public interface FaceEngine extends Library{
public static final long MOK = 0;
public static final int ASF_NONE=0x00000000;
public static final int ASF_FACE_DETECT=0x00000001;
public static final int ASF_FACERECOGNITION=0x00000004;
public static final int ASF_AGE=0x00000008;
public static final int ASF_GENDER=0x00000010;
public static final int ASF_FACE3DANGLE=0x00000020;
public static final int ASF_DETECT_MODE_VIDEO=0x00000000;
public static final int ASF_DETECT_MODE_IMAGE=0xFFFFFFFF;
FaceEngine INSTANCE = (FaceEngine)Native.loadLibrary("libarcsoft_face_engine",FaceEngine.class);
// 激活
NativeLong ASFActivation(String appId, String sdkKey);
/**
*
* @param detectMode
* [in] VIDEO 模式/IMAGE 模式 VIDEO 模式:处理连续帧的图像数据,并返回检测结果,需要将所有图
* 像帧的数据都传入接口进行处理; IMAGE 模式:处理单帧的图像数据,并返回检测结果
* @param detectFaceOrientPriority
* [in] 检测脸部的角度优先值,推荐仅检测单一角度,效果更优
* @param detectFaceScaleVal[in]
* 用于数值化表示的最小人脸尺寸,该尺寸代表人脸尺寸相对于图片长 边的占比。 video 模式有效值范围[2,16], Image
* 模式有效值范围[2,32] 推荐值为 16
* @param detectFaceMaxNum
* [in] 最大需要检测的人脸个数[1-50]
* @param combinedMask
* [in] 用户选择需要检测的功能组合,可单个或多个
* @param phEngine
* [out] 初始化返回的引擎 handle
* @return
*/
NativeLong ASFInitEngine(long detectMode, int detectFaceOrientPriority, int detectFaceScaleVal,
int detectFaceMaxNum, int combinedMask, PointerByReference phEngine);
/**
*
* @param hEngine
* [in] 引擎 handle
* @param width
* [in] 图片宽度为 4 的倍数且大于 0
* @param height
* [in] YUYV/I420/NV21/NV12 格式的图片高度为 2 的倍数,BGR24 格式的图片高度不限制
* @param format
* [in] 颜色空间格式
* @param pImgData
* [in] 图片数据
* @param detectedFaces
* [out] 检测到的人脸信息
* @return
*/
NativeLong ASFDetectFaces(Pointer hEngine, int width, int height, int format, byte[] imgData,
MultiFaceInfo detectedFaces);
/**
*
* @param hEngine
* [in] 引擎 handle
* @param width
* [in] 图片宽度为 4 的倍数且大于 0
* @param height
* [in] YUYV/I420/NV21/NV12 格式的图片高度为 2 的倍数,BGR24 格式的图片高度不限制
* @param format
* [in] 颜色空间格式
* @param imgData
* [in] 图片数据
* @param faceInfo
* [in] 单张人脸位置和角度信息
* @param feature
* [out] 人脸特征
* @return
*/
NativeLong ASFFaceFeatureExtract(Pointer hEngine, int width, int height, int format, byte[] imgData,
SingleFaceInfo faceInfo, FaceFeature feature);
/**
*
* @param hEngine
* @param feature1
* @param feature2
* @param confidenceLevel [out] 比对结果,置信度数值
* @return
*/
NativeLong ASFFaceFeatureCompare(Pointer hEngine, FaceFeature feature1, FaceFeature feature2,
FloatByReference confidenceLevel);
/**
*
* @param hEngine [in]
* @param width [in]
* @param height [in]
* @param format [in]
* @param imgData [in]
* @param multiFaceInfo [in]
* @param combinedMask [in] 初始化中参数 combinedMask 与 ASF_AGE|
ASF_FACE3DANGLE 的交集的子集
* @return 成功返回 MOK,否则返回失败 codes。
*/
NativeLong ASFProcess(Pointer hEngine,int width, int height,int format, byte[] imgData,MultiFaceInfo multiFaceInfo,int combinedMask);
/**
* 获得年龄,需要先调用ASFProcess 进行预处理,最高支持4个人脸,多于4张人脸,结果不可靠(官方说法)
* @param hEngine
* @param ageInfo
* @return
*/
NativeLong ASFGetAge(Pointer hEngine,AgeInfo ageInfo);
/**
* 获得性别信息
* @param hEngine
* @param genderInfo
* @return
*/
NativeLong ASFGetGender(Pointer hEngine,GenderInfo genderInfo);
/**
* 获得人脸角度数据
* @param hEngine
* @param face3dAngle
* @return
*/
NativeLong ASFGetFace3DAngle(Pointer hEngine,Face3DAngle face3dAngle);
Version ASFGetVersion(Pointer hEngine);
NativeLong ASFUninitEngine(Pointer hEngine);
}
使用已经封装好的SDK进行人脸识别
https://www.jianshu.com/p/96636db03792
使用已经封装好的SDK进行人脸识别【人脸特征提取比对】
https://www.jianshu.com/p/ab64464571da
虹软ArcFace 2.0,java SDK使用、人脸信息识别(年龄、性别)
https://www.jianshu.com/p/cfe90f82be97
需要完整代码,加qq:79295735