Android端身份证识别

传送门  点击下载

前期准备

百度AI开放平台ocr地址:https://ai.baidu.com/sdk#ocr

说明文档地址:http://ai.baidu.com/docs#/OCR-Android-SDK/top

下载SDK以及测试demo。

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即可。

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°

 

具体集成:

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. 依据官方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);
    }

这里需要注意的是,初始化的时候,最好提前进行初始化,如果使用频繁的话,最好还是放在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);
                    }

效果图如下:

 

è¿éåå¾çæè¿°

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值