【安卓学习之第三方库】 人脸识别SDK

█ 【安卓学习之第三方库】 人脸识别

█ 相关文章:

- 
 ● 【安卓学习之第三方库】库的使用2-jar类库的使用(以dom4j为例)和升级(以极光推送为例)
 ● 【安卓学习之第三方库】 消息推送之极光推送
 ● 【安卓学习之第三方库】 消息推送之阿里云推送
 

█ 读前说明:

- 
 ● 本文通过学习别人写demo,学习一些课件,参考一些博客,’学习相关知识,如果涉及侵权请告知
 ● 本文只简单罗列相关的代码实现过程
 ● 涉及到的逻辑以及说明也只是简单介绍,主要当做笔记,了解过程而已

█ 可信认证:人脸识别SDK集成:

- 
 ● 添加依赖库,添加so库

dependencies {
    implementation 'com.sdk.IDCard:XXXCuptia:1.1.0.1'
}

● 获取银联token,并初始化引擎,获取秘钥

    private void initOCREngine(String token) {
		Bundle bundle = new Bundle();
	   	bundle.putString("token", token);
	    XXX_SDKManager.init(this, bundle, new XXX_Callback() {
	        @Override
	        public void onError(String s, String s1) {
	            Log.e("TAG", "init error:" + s + "/" + s1);
	            token= "";
	            if (!s.equals("-1")) {
	            	// 初始化失败:s1
	            } else {
	                // 初始化失败:未知错误
	            }
	        }
	
	        @Override
	        public void onSuccess(String s) {
	            Log.e("TAG", "success :" + s);
	            // 初始化成功, 保存 RES秘钥,人脸比对ID
	            XXX_IDCardBean bean = JSON.parseObject(msg.obj.toString(), XXX_IDCardBean.class);
                mEncryptAesKey = rsaDecrypt(bean.getEncryptAesKey());// 解密 秘钥
	        }
	    });
    }

● 人脸比对,启动摄像头,获取到身份证信息(含照片、有限期)

	 Bundle bundle = new Bundle();
     bundle.putString("token", token);
     XXX_SDKManager.Compare(aty, bundle, new XXX_Callback() {
         @Override
         public void onError(String s, String s1) {
             Log.e("TAG", "compare error:" + s + "/" + s1);
             String errStr ="";
             if (TextUtils.isEmpty(s1)) {
                 errStr  = "人脸校验不通过,请按照提示再试一次[" + s + "]";
             } else {
                 errStr  = s1 + ",人脸校验不通过,请按照提示再试一次";
             }
			// 提示错误
         }

         @Override
         public void onSuccess(String s) {
             Log.e("TAG", "success :" + s);
             // 人脸识别成功,进行解密
			 XXX_IDCardBean cardBean = JSON.parseObject(msg.obj.toString(), XXX_IDCardBean.class);
             String face = cardBean.getCardInfo();
             String card = desIDcard(mEncryptAesKey, face);// 解密
             if (!TextUtils.isEmpty(card)) {
                 XXX_IDCardBean.CardInfoBean cardInfo = JSON.parseObject(card, XXX_IDCardBean.CardInfoBean.class);
                 if (cardInfo != null) {
                     // cardInfo 包含:姓名、出生、性别、民族、身份证信息、有效期、base64照片等等
                 } else {
                 	// 实名认证未通过,请重新认证
                 }
             } else {
                 Toast.show(aty, "身份证信息不存在!");
             }
         }
     });

● 费用说明

不管是否成功,调用一次三四毛。

█ 活体检测:人脸识别SDK集成:

- 
 ● 添加依赖库,添加so库

dependencies {
    implementation files('libs/XXXlive.jar')
}

● AndroidManifest.xml中注册Activity

        <activity
            android:name="com.live.XXX_LiveActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>

● 启动活体检测

     Intent intent = new Intent(aty, XXX_LiveActivity.class);
     Bundle bundle = new Bundle();
     bundle.putBoolean("xxx_isRandomable", true);
     bundle.putString("xxx_actions", "12345");
     bundle.putString("xxx_selectActionsNum", "3");
     bundle.putString("xxx_singleActionDectTime", "8");
     bundle.putBoolean("xxx_isWaterable", false);
     bundle.putBoolean("xxx_openSound", true);
     intent.putExtra("xxx_comprehensive_set", bundle);
     startActivityForResult(intent, 111);

● 活体检测结果返回:

xxx_mMove:失败动作 l代表静止凝视动作 s代表摇头动作,n代表点头动作
xxx_mRezion: 失败的原因 0代表默认失败提示,1代表无人脸,2代表多人脸,3代表活检动作失败,4代表错误动作的攻击,5代表超时,6代表图片加密失败,7代表3D检测失败,8代表肤色检测失败
xxx_check_pass: 活检是否通过 true代表检测通过,false代表检测失败
xxx_pic_result:图片的byte[]的形式,格式为jpg。失败时返回值为null

	@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 111&&resultCode == RESULT_OK&&null != data) {
           Bundle result = data.getBundleExtra("xxx_result");
           if (null != result) {
               //只有失败时返回  失败动作
               String mMove = result.getString("xxx_mMove");
               //只有失败时返回  失败的原因
               String mRezion = result.getString("xxx_mRezion");
               //活检是否通过
               boolean isLivePassed = result.getBoolean("xxx_check_pass");
               //图片的byte[]的形式,格式为jpg。失败时返回值为null
               byte[] picbyte = result.getByteArray("xxx_pic_result");
               if (isLivePassed) {// 活检通过
                   if (picbyte != null) {
                   		// 显示活体检测到的照片
                        Bitmap picFromBytes =BitmapFactory.decodeByteArray(picbyte, 0, picbyte.length);
                        imgFace.setImageBitmap(picFromBytes);
                        // 照片转Base64,和身份证信息 等一起 提交到线上服务器人脸比对
                        mBase64 = Base64.encodeToString(picbyte, Base64.DEFAULT);
                        ...
                   }
                   ...
               } else {
                   if (!TextUtils.isEmpty(mRezion)) {//10为 初始化 失败 ,11为授权过期
                        if("10".equals(mRezion)){
                            Toast.makeText(this, "人脸初始化失败!", Toast.LENGTH_SHORT).show();
                        }else if("11".equals(mRezion)){
                            Toast.makeText(this, "人脸授权过期!", Toast.LENGTH_SHORT).show();
                        }else{
                            Toast.makeText(this, "人脸识别失败!", Toast.LENGTH_SHORT).show();
                        }
                   }else{
                       Toast.makeText(this, "人脸识别失败!", Toast.LENGTH_SHORT).show();
                   }
               }
           }
        } 
    }

● 费用说明

免费

█ 相关资料:

- 
 ● 1.IdCardOCR: 身份证正反面识别,身份证扫描识别,二代身份证OCR识别,OCR极速识别身份证所有信息正反面均可。离线无需联网,极速秒扫。
 ● 2.百度文字识别: CR_identify: 身份证自动识别,银行卡识别,驾驶证识别,行驶证识别,根据百度文字识别 api 封装,能快速识别身份证信息,银行卡信息,驾驶证信息,行驶证信息,使用非常方便
 ● 3.AndroidOcrLibs: Android离线识别身份证、驾驶证、银行卡

转载请注明出处:
https://blog.csdn.net/ljb568838953/article/details/109855510

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值