人脸识别是现在当下比较热门的也是应用场景比较多的技术,最近公司有一个项目中也需要用到人脸识别的人脸认证功能,开始摸索的时候是去各种官网找质料,却发现都无从下手。下面是告诉大家如何能在最短的时间内去使用face++的人脸识别技术,少走弯路!
接入后的效果图(结尾有demo附上请把文章看完)
一. 如何获取SDK(首先声明不管使用哪家的人脸识别技术都需要在相应的平台进行 企业认证 API调用申请 等步骤)
1.进入face++的官网看看 有2个官网 https://www.faceplusplus.com.cn/ //这个是百度上找的的网址
https://faceid.com/ //这个是联系工作人员给的网址
2.在官网看个半天你会发现也看不出什么名堂,是的这时候应该去 https://faceid.com/ 里面找到 联系我们 模块留下电话号码然后等工作人员会联系你(这个过程肯能会需要点等待时间)
3.联系上工作人员后提交你公司的营业执照去进行 认证 申请API 什么的 (个人开发者去百度一个营业执照试试,别说是我说的)
4.申请成功后工作人员会给你开个 https://faceid.com/ 的账号 这个时候你就可以去 如下操作
二.SDK功能接入(到这里应该都拿到SDK了没拿到的记得联系face++的工作人员)
1.跑通demo(我拿到的SDK包是v2版本的)
SDK解压后会有如下两个demo,一个是身份证识别的,一个是活体检测的,我们想要的应该是Meglive(活体检测的那个demo)。
2.添加依赖
demo里面这么一个library,把这个接入到自己的工程里去。
3.获取face++的授权
String uuid = ConUtil.getUUIDString(this);
new Thread(new Runnable() {
@Override
public void run() {
Manager manager = new Manager(MainActivity.this);
LivenessLicenseManager licenseManager = new LivenessLicenseManager(MainActivity.this);
manager.registerLicenseManager(licenseManager);
manager.takeLicenseFromNetwork(uuid);
if (licenseManager.checkCachedLicense() > 0) {
//授权成功
mHandler.sendEmptyMessage(1);
}else {
//授权失败
mHandler.sendEmptyMessage(2);
}
}
}).start();
4.调用 LivenessActivity进行活体检测
startActivityForResult(new Intent(WebViewActivity.this, LivenessActivity.class), PAGE_INTO_LIVENESS);
5.在onActivityResult 回调里处理活体检测结果
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//人脸识别功能页面跳转
if (requestCode == PAGE_INTO_LIVENESS && resultCode == RESULT_OK) {
// String result = data.getStringExtra("result");
// String delta = data.getStringExtra("delta");
// Serializable images=data.getSerializableExtra("images");
Bundle bundle=data.getExtras();
ResultActivity.startActivity(this, bundle);
}
}
6.活体检测成功后在ResultActivity里面调用verify接口,进行身份验证
/**
* 如何调用Verify2.0方法 详细API字段请参考Verify文档描述
*/
public void imageVerify(Map<String, byte[]> images, String delta) {
String API_KEY = ""; //你的API_KEY
String API_SECRET = ""; //你的API_SECRET
RequestParams requestParams = new RequestParams();
requestParams.put("api_key", API_KEY);
requestParams.put("api_secret", API_SECRET);
requestParams.put("comparison_type", "1");
requestParams.put("face_image_type", "meglive");
requestParams.put("idcard_name", "姓名");
requestParams.put("idcard_number", "身份证号");
requestParams.put("delta", delta);
for (Map.Entry<String, byte[]> entry : images.entrySet()) {
requestParams.put(entry.getKey(),
new ByteArrayInputStream(entry.getValue()));
}
// try {
// requestParams.put("image_best", new File(bestPath));
// requestParams.put("image_env", new File(envPath));
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
String url = "https://api.megvii.com/faceid/v2/verify";
asyncHttpClient.post(url, requestParams,
new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int i, Header[] headers, byte[] bytes) {
//请求成功
if (bytes != null) {
String success = new String(bytes);
Log.e("TAG", "成功信息:" + success);
}
}
@Override
public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {
// 请求失败
if (bytes != null) {
String error = new String(bytes);
Log.e("TAG", "失败信息:" + error);
} else {
Log.e("TAG", "失败信息:" + throwable);
}
}
});
根据verify接口的返回值就就能知道对比的准确度了
附上demo地址 https://download.youkuaiyun.com/download/csdn131488/10647744
最后祝大家撸码愉快!