android实现人脸识别技术的示例代码实现人脸识别技术的示例代码
本篇文章主要介绍了android人脸识别技术的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
1.前沿前沿
人工智能时代快速来临,其中人脸识别是当前比较热门的技术,在国内也越来越多的运用,例如刷脸打卡,刷脸APP,身份识别,人脸门禁等。当前的人脸识别技术
分为WEBAPI和SDK调用两种方式,WEBAPI需要实时联网,SDK调用可以离线使用。
本次使用的虹软提供的人脸识别的SDK,此SDK也可根据不同应用场景设计,针对性强。包括人脸检测、人脸跟踪、人脸识别,即使在离线环境下也可正常运行。
虹软公司是一家具有硅谷背景的图像处理公司,除了人脸技术以外,还有多项图像及视频处理技术。他们的双摄像头处理算法和人脸美化算法囊括了包括OPPO
VIVO,SUMAMNG一系列手机厂商。
2.项目的目标项目的目标
我们需要实现一个人脸识别功能。简单来说,就是机的后置摄像头,识别摄像头中实时拍到的人脸信息,如果人库注册过,则显示识别后的人脸信息,如登记的名
字;如果不在,提示未注册。
这个功能具有多个应用场景,比如,火车站或者打卡和门禁系统中。
3.人脸识别的过程人脸识别的过程
人脸识别包括两个必备的过程,人脸注册和实时识别。
人脸注册是指把人脸的特征信息注册到人脸信息库中。人脸注册的来源可以有很多种,比如
1. 国家身份证库
2. 企业自建人脸识别库
3. 互联网大数据库
人脸特征提取是一个不可逆的过程,你无法从人脸特征信息还原一个人的脸部照片。
在线库在使用时,需要传递照片信息,或者提取图像特征值,
离线的SDK相对安全,但是,在线的SDK通常提供更多的接入和调用方式,这个要结合实际情况来选择。
4.定义并实现人脸库的相关功能定义并实现人脸库的相关功能
如前面所述,我们希望定义自己 的人脸库,人脸库在程序中使用List存储,在系统中保存为txt文件。
通过查询引擎,可以知道人脸信息是保存在AFR_FSDKFace类中的。这的主要结构为
public static final int FEATURE_SIZE = 22020;
byte[] mFeatureData;
如果要进行人脸注册,我们需要定义另外一个类来把人脸信息和姓名关联起来。
class FaceRegist {
String mName;
List<AFR_FSDKFace> mFaceList;
public FaceRegist(String name) {
mName = name;
mFaceList = new ArrayList<>();
}
}
包含特征信息的长度和内容的byte数组。
我们把这些功能定义在类FaceDB中。FaceDB需要包含引擎定义,初始化,把人脸信息保存在版本库和从版本库中读出人脸信息这些功能
5.初始化引擎初始化引擎
为了程序结构性考虑,我们将人脸识别相关的代码独立出来一个类FaceDB,并定义必要的变量
public static String appid = "bCx99etK9Ns4Saou1EbFdC18xHdY9817EKw****";
public static String ft_key = "CopwZarSihp1VBu5AyGxfuLQdRMPyoGV2C2opc****";
public static String fd_key = "CopwZarSihp1VBu5AyGxfuLXnpccQbWAjd86S8****";
public static String fr_key = "CopwZarSihp1VBu5AyGxfuLexDsi8yyELdgsj4****";
String mDBPath;
List<FaceRegist> mRegister;
AFR_FSDKEngine mFREngine;
AFR_FSDKVersion mFRVersion;
定义有参数的构造函数来初始化引擎
public FaceDB(String path) {
mDBPath = path;
mRegister = new ArrayList<>();
mFRVersion = new AFR_FSDKVersion();
mUpgrade = false;
mFREngine = new AFR_FSDKEngine();
AFR_FSDKError error = mFREngine.AFR_FSDK_InitialEngine(FaceDB.appid, FaceDB.fr_key);
if (error.getCode() != AFR_FSDKError.MOK) {
Log.e(TAG, "AFR_FSDK_InitialEngine fail! error code :" + error.getCode());
} else {
mFREngine.AFR_FSDK_GetVersion(mFRVersion);
Log.d(TAG, "AFR_FSDK_GetVersion=" + mFRVersion.toString());
}
}
定义析构函数释放引擎占用的系统资源
public void destroy() {
if (mFREngine != null) {
mFREngine.AFR_FSDK_UninitialEngine();
}
}
评论0