前言

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

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

前期准备

百度AI开放平台ocr地址:

https://ai.baidu.com/sdk#ocr

说明文档地址:

http://ai.baidu.com/docs#/OCR-Android-SDK/top

下载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文件中添加如下权限:

<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
  • 2
  • 3
  • 4

2. 导入ocr-ui依赖

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

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

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

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

    private void initAccessToken() {
OCR.getInstance().initAccessToken(new OnResultListener<AccessToken>() {
@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://github.com/HLQ-Struggle/BaiduOcrStudy

Android Study 玩转百度ocr身份证识别不是梦~的更多相关文章

  1. 百度OCR 文字识别 Android安全校验

    百度OCR接口使用总结: 之前总结一下关于百度OCR文字识别接口的使用步骤(Android版本 不带包名配置 安全性弱).这边博客主要介绍,百度OCR文字识别接口,官方推荐使用方式,授权文件(安全模式 ...

  2. 百度OCR文字识别-Android安全校验

    本文转载自好基友upuptop:https://blog.csdn.net/pyfysf/article/details/86438769 效果图: 如下为文章正文: 百度OCR接口使用总结:之前总结 ...

  3. 百度OCR文字识别-身份证识别

    简介 一.介绍 身份证识别 API 接口文档地址:http://ai.baidu.com/docs#/OCR-API/top 接口描述 用户向服务请求识别身份证,身份证识别包括正面和背面. 请求说明 ...

  4. 百度Ocr文字识别

    简述 最近开发一个项目需要用到Ocr文字识别技术来识别手写文字,在评估过程中体验了百度的文字识别和腾讯的文字识别.查找官方开发文档,发现它们都有印刷体和手写体两种符合项目需求的识别模式,但是腾讯的手写 ...

  5. 百度AI身份证识别demo,使用js提交图片数据

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  6. 百度OCR文字识别API使用心得===com.baidu.ocr.sdk.exception.SDKError[283604]

    异常com.baidu.ocr.sdk.exception.SDKError[283604]App identifier unmatch.错误的packname或bundleId.logId::303 ...

  7. python实现百度OCR图片识别

    一.直接上代码 import base64 import requests class CodeDemo: def __init__(self,AK,SK,code_url,img_path): se ...

  8. 使用百度ocr接口识别验证码

    #!/usr/bin/env python #created by Baird from aip import AipOcr def GetCaptchaV(filename): APP_ID = ' ...

  9. PHP:基于百度大脑api实现OCR文字识别

    有个项目要用到文字识别,网上找了很多资料,效果不是很好,偶然的机会,接触到百度大脑.百度大脑提供了很多解决方案,其中一个就是文字识别,百度提供了三种文字识别,分别是银行卡识别.身份证识别和通用文字识别 ...

随机推荐

  1. js之留言字数限制

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  2. 为Linux服务器的SSH登录启用Google两步验证

    对于Linux服务器而言使用密钥登录要比使用密码登录安全的多,毕竟当前网上存在多个脚本到处进行爆破. 这类脚本都是通过扫描IP端的开放端口并使用常见的密码进行登录尝试,因此修改端口号也是非常有必要的. ...

  3. Mvc6 错误Microsoft.AspNet.Http.Features.IRequestIdentifierFeature

    System.TypeLoadException 未能从程序集“Microsoft.AspNet.Http.Features, Version=1.0.0.0, Culture=neutral, Pu ...

  4. Java 多线程 2015/9/21

    http://lavasoft.blog.51cto.com/62575/27069   http://blog.csdn.net/aboy123/article/details/38307539   ...

  5. JSP学习(四)JSP属性范围

    P属性范围 四种属性范围分别指以下四种: 当前页page:一个属性只能在一个页面中取得,跳转到其他页面无法取得 一次服务器请求request:一个页面中设置的属性,只要经过了服务器跳转,则跳转之后的页 ...

  6. 深入了解 WPF Dispatcher 的工作原理(Invoke/InvokeAsync 部分)

    深耕 WPF 开发的各位程序员大大们一定避不开使用 Dispatcher.跨线程访问 UI 当然免不了用到它,将某个任务延迟到当前任务之后执行也会用到它.Dispatcher.Invoke.Dispa ...

  7. BestCoder Round #1 第一题 逃生

    // 等了好久,BESTCODER 终于出来了..像咋这样的毕业的人..就是去凑凑热闹// 弱校搞acm真是难,不过还是怪自己不够努力// 第一题是明显的拓扑排序,加了了个字典序限制而已// 用优先队 ...

  8. 关于gradle加快构建速度采用阿里云中央仓库的配置

    近期开始了一段新的开始,在一家在线教育的公司开始下一阶段的工作,鉴于之前的面试中问到了spring的内容基本快要到源码层面的问题了,想要把spring的源码导到idea中,结果出现了下载极慢的问题,如 ...

  9. 【java多线程】用户线程和守护线程的区别

    java中线程分为两种类型:用户线程和守护线程.通过Thread.setDaemon(false)设置为用户线程:通过Thread.setDaemon(true)设置为守护线程.如果不设置次属性,默认 ...

  10. CH0805 防线(秦腾与教学评估)

    题意 lsp 学习数学竞赛的时候受尽了同仁们的鄙视,终于有一天......受尽屈辱的 lsp 黑化成为了黑暗英雄Lord lsp.就如同中二漫画的情节一样,Lord lsp 打算毁掉这个世界.数学竞赛 ...