android 快速接入第三方(face++ 旷视)人脸识别 讲解!

        人脸识别是现在当下比较热门的也是应用场景比较多的技术,最近公司有一个项目中也需要用到人脸识别的人脸认证功能,开始摸索的时候是去各种官网找质料,却发现都无从下手。下面是告诉大家如何能在最短的时间内去使用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();

      3.调用 LivenessActivity进行活体检测

startActivityForResult(new Intent(WebViewActivity.this, LivenessActivity.class), PAGE_INTO_LIVENESS);

      4.在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);
        }
    }

    5.活体检测成功后在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.csdn.net/download/csdn131488/10647744

    最后祝大家撸码愉快!

猜你喜欢

转载自blog.csdn.net/csdn131488/article/details/82387137