█ 【安卓学习之第三方库】 人脸识别
█ 相关文章:
-
● 【安卓学习之第三方库】库的使用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