写在前面
最近项目需求需要输入用户真实姓名 身份证号 再去调用人脸识别 效验是否是本人 所以就首先关注了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