首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >快速高效 | Android身份证识别

快速高效 | Android身份证识别

作者头像
网罗开发
发布2021-01-29 17:29:23
发布2021-01-29 17:29:23
2.9K00
代码可运行
举报
文章被收录于专栏:网罗开发网罗开发
运行总次数:0
代码可运行

一:简介

快捷支付涉及到方方面面,同时安全问题既是用户所关心的,也是制作者不容忽视的重要部分。 比如涉及到支付和金钱的app,商户端app等等,都需要进行实名认证,实名认证可以通过银行卡认证和身份证认证。 通常办法是通过上传照片,并且手动输入基本信息进行认证,这种方法不仅操作复杂,而且容易出错。 网上很多资源,识别率低,速度慢,用户体验很差。今天我就和大家介绍一下我使用的方法,可以快速、高效的识别中国身份证信息。

二:原理

在拍摄框中右上区域加了一个人像区域提示框,并将该区域设为扫描人脸的区域,只有该区域扫描到身份证上的人脸时(确保用户的确将身份证人像对准了拍摄框中的人像框),才执行读取身份证信息的操作。

三:项目展示

扫描身份证面截图

头像面扫描

国徽面扫描

信息展示页面

四: 使用流程介绍

4.1 身份验证

由于使用的是百度云的图像文字识别sdk,首先需要去百度云管理控制台 获得API Key / Secret Key。

管理控制台

管理控制台

4.2 下载demo

GitHub 源码链接

  1. 将下载的demo中libs目录下的ocr-sdk.jar文件拷贝到工程libs目录中,并加入工程依赖
  2. 将libs目录下armeabi,arm64-v8a,armeabi-v7a,x86文件夹按需添加到android studio工程src/main/jniLibs目录中, eclipse用户默认为libs目录。
  3. 在Android studio中以模块方式导入下载包中的identify文件夹,模块方式导入流程如下: 首先要在顶层工程目录下的settings.gradle文件中include模块名
代码语言:javascript
代码运行次数:0
运行
复制
include ':app',':identify'

然后直接复制粘贴identify文件导入到项目的文件夹中!!!然后Build>Rebuild Project,重新构建项目。

4.3 权限配置
  1. 在工程AndroidManifest.xml文件中添加如下权限:
代码语言:javascript
代码运行次数:0
运行
复制
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  1. 在Proguard配置文件中增加, 防止release发布时打包报错:
代码语言:javascript
代码运行次数:0
运行
复制
-keep class com.baidu.ocr.sdk.**{*;}
-dontwarn com.baidu.ocr.**
4.4 核心函数介绍
  1. 初始化函数
代码语言:javascript
代码运行次数:0
运行
复制
OCR.getInstance().initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {            @Override
           public void onResult(AccessToken result) {           }            @Override
           public void onError(OCRError error) {
               error.printStackTrace();
               Log.d("onError", "msg: " + error.getMessage());
           }
       }, getApplicationContext(), "你注册的appkey", "你注册的sk");
  1. 身份证拍照
代码语言:javascript
代码运行次数:0
运行
复制
Intent intent = new Intent(MainActivity.this, CameraActivity.class);
intent.putExtra(CameraActivity.KEY_OUTPUT_FILE_PATH,
   FileUtil.getSaveFile(getApplication()).getAbsolutePath());
intent.putExtra(CameraActivity.KEY_CONTENT_TYPE, CameraActivity.CONTENT_TYPE_ID_CARD_FRONT);
startActivityForResult(intent, REQUEST_CODE_CAMERA);
  1. 图像回调
代码语言:javascript
代码运行次数:0
运行
复制
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == REQUEST_CODE_CAMERA && resultCode == Activity.RESULT_OK) {        if (data != null) {
           String contentType = data.getStringExtra(CameraActivity.KEY_CONTENT_TYPE);
           String filePath = FileUtil.getSaveFile(getApplicationContext()).getAbsolutePath();            if (!TextUtils.isEmpty(contentType)) {                if (CameraActivity.CONTENT_TYPE_ID_CARD_FRONT.equals(contentType)) {
                   recIDCard(IDCardParams.ID_CARD_SIDE_FRONT, filePath);
               } else if (CameraActivity.CONTENT_TYPE_ID_CARD_BACK.equals(contentType)) {
                   recIDCard(IDCardParams.ID_CARD_SIDE_BACK, filePath);
               }
           }
       }
   }
}
  1. 数据解析
代码语言:javascript
代码运行次数:0
运行
复制
private void recIDCard(String idCardSide, String filePath) {
   IDCardParams param = new IDCardParams();
   param.setImageFile(new File(filePath));
   param.setIdCardSide(idCardSide);
   param.setDetectDirection(true);
   OCR.getInstance().recognizeIDCard(param, new OnResultListener<IDCardResult>() {        @Override
       public void onResult(IDCardResult result) {            if (result != null) {
               Log.d("onResult", "result: " + result.toString());
           }
       }        @Override
       public void onError(OCRError error) {
           Log.d("onError", "error: " + error.getMessage());
       }
   });
}

到此身份证识别接入就结束了!!!

相同方式均可实现银行卡识别、驾驶证识别、行驶证识别、车牌识别、营业执照识别等等,如有需要demo可联系我。

希望可以帮助大家, 如有问题可加QQ技术交流群: 591625129。 如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议。 如需转载请联系我,经过授权方可转载,谢谢

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网罗开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:简介
  • 二:原理
  • 三:项目展示
  • 四: 使用流程介绍
    • 4.1 身份验证
    • 4.2 下载demo
    • 4.3 权限配置
    • 4.4 核心函数介绍
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档