Android 集成Face++ 人脸识别(3.0+SDK)

写在前面

                    最近项目需求需要输入用户真实姓名 身份证号 再去调用人脸识别 效验是否是本人 所以就首先关注了Face++(旷视)的人脸识别,听说是 正确率很高.....所以就集成了.

 

1.首先去官网去创建应用(其实听说创建应用是比较麻烦的)

 

创建好应用以后需要上传你项目的包名

 

2.下载Demo Demo中会有一个扫描身份证的SDK和人脸识别的SDK 我这个需求呢是人脸识别 所以只集成人脸识别(如下图)

 

 

您可以按照您项目的需求集成不同的SDK(这里只集成人脸识别SDK)

 

3.上面的俩个文件夹都有扫描身份证和人脸识别的Demo

建议您,先把申请应用完以后的AppKey 和secret 配置到Face++的Demo中 跑完这个流程

 

4.开始我们的步骤

 

5.Face++给的Demo中 就会有 我们今天需要集成的SDK(如下图)

 

点击sdk文件夹

 

 

6.我们需要把meglive_still.aar 导入到 lib文件夹中

 

并在app下 build.gradle文件下 dependencies中写入

implementation(name: 'meglive_still', ext: 'aar')

 

在repositories中写入

flatDir { dirs 'libs' }

7.上代码

 

(1)需要调用人脸识别的Activity

private static final int CAMERA_PERMISSION_REQUEST_CODE = 100;
private static final int EXTERNAL_STORAGE_REQ_WRITE_EXTERNAL_STORAGE_CODE = 101;
private ProgressDialog mProgressDialog;
private MegLiveManager megLiveManager;
private static final String GET_BIZTOKEN_URL = 
			"https://api.megvii.com/faceid/v3/sdk/get_biz_token"; //Face++获取BizToken的url
private static final String VERIFY_URL = "https://api.megvii.com/faceid/v3/sdk/verify";   //Face++人脸效验的url
private static final String API_KEY = "您的AppKey";
private static final String SECRET = "您的Secret";
private String sign = "";
private static final String SIGN_VERSION = "hmac_sha1";
private byte[] imageRef;//底库图片
private int buttonType;

 

private void init() {
    megLiveManager=MegLiveManager.getInstance();
    mProgressDialog = new ProgressDialog(this);
    mProgressDialog.setCancelable(false);

    long currtTime = System.currentTimeMillis() / 1000;
    long expireTime = (System.currentTimeMillis() + 60 * 60 * 100) / 1000;
    sign = GenerateSign.appSign(API_KEY, SECRET, currtTime, expireTime);

    requestCameraPerm();

}

 

 

 

//获取BizToken的请求

private void getBizToken(String livenessType, int comparisonType, String idcardName, String idcardNum, String uuid, byte[] image) {
    mProgressDialog.show();
    HttpRequestManager.getInstance().getBizToken(this, GET_BIZTOKEN_URL, sign, SIGN_VERSION, livenessType, comparisonType, idcardName, idcardNum, uuid, image, new HttpRequestCallBack() {

        @Override
        public void onSuccess(String responseBody) {
            try {
                JSONObject json = new JSONObject(responseBody);
                String bizToken = json.optString("biz_token");
                megLiveManager.preDetect(FaceIdActivity.this, bizToken,FaceIdActivity.this);
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onFailure(int statusCode, byte[] responseBody) {

        }
    });

}
@Override
public void onDetectFinish(String token, int errorCode, String errorMessage, String data) {
    if (errorCode == 1000) {
        verify(token, data.getBytes());
    }
}

 

@Override
public void onPreStart() {
    showDialogDismiss();
}

@Override
public void onPreFinish(String token, int errorCode, String errorMessage) {
    progressDialogDismiss();
    if (errorCode == 1000) {
        megLiveManager.startDetect(this);
    }
}

//人脸识别的url
private void verify(String token, byte[] data) {
    showDialogDismiss();
    HttpRequestManager.getInstance().verify(this, VERIFY_URL, sign, SIGN_VERSION, token, data, new HttpRequestCallBack() {
        @Override
        public void onSuccess(String responseBody) {
            Log.w("result", responseBody);
            progressDialogDismiss();

            gotoActivity(mContext,FaceIdVerifySuccessActivity.class,null);

        }

        @Override
        public void onFailure(int statusCode, byte[] responseBody) {
            Log.w("result", new String(responseBody));
            progressDialogDismiss();

            gotoActivity(mContext,FaceIdVerifyErrorActivity.class,null);

        }
    });
}

private void progressDialogDismiss() {
    runOnUiThread(new Runnable() {
        @Override
        pu
  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
RetinaFace ArcFace是一种常用于人脸识别的深度学习算法。RetinaFace是一种人脸检测算法,用于在图像中识别和定位人脸。它采用了全卷积神经网络结构,并利用了特征金字塔网络来多尺度地检测不同大小的人脸。RetinaFace使用了anchor-based方法,在不同尺度上生成候选框,并通过网络预测每个候选框的边界框和类别概率。 而ArcFace是一种人脸识别算法,用于在给定的人脸图像中提取具有高度可辨识性的人脸特征向量。ArcFace将人脸图像映射到一个高维特征空间,并通过特殊的角度余弦损失函数,在特征空间中将同一个人脸的特征向量拉近,并将不同人脸的特征向量推开。这样,在特征空间中,同一个人脸的特征向量之间的相似度会很高,而不同人脸的特征向量之间的相似度会很低。 结合RetinaFace和ArcFace,可以实现人脸检测和识别的整个流程。首先使用RetinaFace检测人脸,并获取人脸的位置和边界框。然后,将这些人脸区域图像输入ArcFace网络,提取每个人脸的特征向量。接下来,可以使用这些特征向量来比较和匹配不同人脸的相似度,以实现人脸的识别和验证。 RetinaFace ArcFace人脸识别领域具有较好的性能和广泛的应用。它可以应用于人脸识别门禁系统、人脸支付、人脸考勤、人脸身份验证等多个领域。通过这两种算法的组合,可以提高人脸识别的准确性和鲁棒性,实现更加安全和高效的人脸识别技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值