博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Study 玩转百度ocr身份证识别不是梦~
阅读量:5282 次
发布时间:2019-06-14

本文共 2442 字,大约阅读时间需要 8 分钟。

前言

Today,由于昨晚喝蒙了,今天晕乎乎的为大家带来如何快速集入ocr身份证识别。

关于ocr的前世今生这里不做过多的说明,百度一抓一大把。

前期准备

百度AI开放平台ocr地址:

说明文档地址:

下载SDK以及测试demo,解压后附上官方对此说明:

这里写图片描述

 

这里还需要大家注意一点,便是有关身份验证与安全。

百度AI开放平台使用OAuth2.0授权调用开放API,调用API时必须在URL中带上accesss_token参数。AccessToken可用AK/SK或者授权文件的方式获得。

OCR Android SDK提供了以下3种AccessToken管理方法.

1. API Key / Secret Key

此种身份验证方案使用AK/SK获得AccessToken。

虽然SDK对网络传输的敏感数据进行了二次加密,但由于AK/SK是明文填写在代码中,在移动设备中可能会存在AK/SK被盗取的风险。有安全考虑的开发者可使用第二种授权方案。

2. 授权文件(安全模式)

此种身份验证方案使用授权文件获得AccessToken,缓存在本地。建议有安全考虑的开发者使用此种身份验证方式。

在您的移动APP分发出去之后,APP存在被反编译的可能,所以直接将AK / SK 置于APP源码之中,存在被盗取的风险。采用授权文件的身份验证方法,可有效保护AK/SK在移动设备中的安全。攻击者即使拦截了流量,盗取了授权文件,也难以盗用您的配额。

3. 自助AccessToken管理

此种身份验证方案直接使用开发者提供的AccessToken,鉴于安全性考虑不推荐此方式,使用此模式将不能开启身份证本地质量控制能力。

若开发者的应用有自行搭建的服务端,也可在自己的服务端进行token的获取与管理,然后分配给移动客户端使用。token的获得可以参考API鉴权认证机制。此种授权方案在移动客户端上没有任何AK/SK信息,风险系数低,但需要开发者自行管理token的获取与分配,适合有条件的开发者使用。

运行demo查看效果

首先需要在控制台创建测试应用,我们只是为了查看效果,所以直接拿到AK以及SK即可。

 

这里写图片描述

 

代码中替换AK以及SK即可:

 

这里写图片描述

 

运行瞅瞅效果:

 

这里写图片描述

 

相比俩种拍摄方式,个人更青睐于第二种,毕竟能让用户少一步操作当然要少一步操作。

那么,下面进行具体的开搞。

撸码开搞

1. 添加必要权限

在工程AndroidManifest.xml文件中添加如下权限:

  • 1
  • 2
  • 3
  • 4

2. 导入ocr-ui依赖

 

这里写图片描述

 

3. 修改ocr-ui配置与主工程目录一致即可

 

这里写图片描述

 

4. 添加依赖、导入jar、放置so一气呵成

 

这里写图片描述

 

5. 依据官方demo完成我们最后一步(基本拷贝)

首先进行初始化,初始化的方式如下:

private void initAccessToken() {        OCR.getInstance().initAccessToken(new OnResultListener
() { @Override public void onResult(AccessToken accessToken) { String token=accessToken.getAccessToken(); } @Override public void onError(OCRError ocrError) { ocrError.printStackTrace(); Toast.makeText(selfActivity, "licence方式获取token失败", Toast.LENGTH_SHORT).show(); } }, selfActivity); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

这里需要注意的是,初始化的时候,最好提前进行初始化,如果使用频繁的话,最好还是放在BaseApplication中。

放置前,需要下载文件,这个就不用多说了吧,毕竟使用的是授权文件(安全模式)。

剩下相关的,可以具体GitHub查看。

6. 拓展 - 如何截取拍摄身份证照片的头像呢?

看官方给出的文档说明,我们可以知道,他们识别出的内容都有一个自己的坐标点,那么我们可以根据这点,进行曲线救国。

代码如下:

int rectX = result.getAddress().getLocation().getWidth() + result.getAddress().getLocation().getLeft() + 10; int rectY = result.getName().getLocation().getTop(); Location location = result.getIdNumber().getLocation(); int height = location.getTop() - rectY - 20; int width = location.getWidth() + location.getLeft() - rectX + 40; Bitmap ocrBitmap = BitmapFactory.decodeFile(filePath); if (ocrBitmap != null) { Bitmap headBitmap = Bitmap.createBitmap(ocrBitmap, rectX, rectY, width, height, null, false); ivHeadShow.setImageBitmap(headBitmap); }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

效果如下:

 

这里写图片描述

 

GitHub查看地址

转载于:https://www.cnblogs.com/cuihongyu3503319/p/9067335.html

你可能感兴趣的文章
树上的路径
查看>>
系统平均负载
查看>>
问题总结
查看>>
软件随笔
查看>>
Linux下SVN自动更新web [转]
查看>>
Openstack api 学习文档 & restclient使用文档
查看>>
poj100纪念
查看>>
如何将数据库中的表导入到PowerDesigner中(转)
查看>>
汇编总结一
查看>>
C#测试题若干,都是基础阿
查看>>
NetWork——关于TCP协议的三次握手和四次挥手
查看>>
An easy problem
查看>>
MauiMETA工具的使用(一)
查看>>
LeetCode: Anagrams 解题报告
查看>>
Qt 中获取本机IP地址
查看>>
070102_赌博设计:概率的基本概念,古典概型
查看>>
IT人生的价值和意义 感觉真的有了
查看>>
JS DOM对象
查看>>
OGR – Merging Multiple SHP files
查看>>
创业公司该不该被收购?(转)
查看>>