LZ-Says:最近好哥儿们因公来廊坊,在家里可谓夜夜笙歌,喝酒喝的俩眼发懵,最近状态欠佳,导致学习计划一直在滞留,今天通过简短的小例子,重新拾起学习之路,滚蛋吧,懒瘤君~
前言
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"/>
2. 导入ocr-ui依赖
3. 修改OCR-UI配置与主工程目录一致即可
4. 添加依赖、导入jar、防止so 一气呵成
5. 根据官方dmeo完成我们最后一步(基本拷贝)首先进行初始化,初始化的方式如下:
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);
}
这里需要注意的是,初始化的时候,最好提前进行初始化,如果使用频繁的话,最好还是放在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);
}
效果如下:
GitHub查看地址
https://github.com/HLQ-Struggle/BaiduOcrStudy
结束语
最近几天的状态不佳啊,自己都看不过去了。
回家国庆后再回来,身上疼不说,看的家里人心里很是不舒服。
无奈。唯有自己好好努力。让自己变得越来越好才能让家里欣慰。加油~
今天鸡排兄内推小米和今日头条的高级Android,艾特了我一下,给我吓得一哆嗦。
和各位大佬,各位老哥哥,差距真的不是一般的大了。要好好抓紧了。。。