Android 图像识别之OCR识别身份证,银行卡等证件信息

尊重作者劳动成果,转载请注明出处

原文链接:https://mp.weixin.qq.com/s/oRpW9AWLx60GpINHJ__BNw

前言

        OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;


效果图



        关于OCR文字识别技术,它的官方文档搞得很复杂,而且最终的效果也不理想,但是还好,百度的AI平台已经在此基础上改进了,于是,今天就给大家带来百度AI平台的文字识别技术,可识别身份证,银行卡,驾驶证,车牌等多种证件。


1、我们需要进入百度云文字识别的开发平台,进行一系列的注册,登陆。
https://cloud.baidu.com/product/ocr


2、创建应用



        在创建应用的时候,应用名称我们可以随便写一个,但是我们要注意的是:我们在写文字识别包名的时候一定要写我们项目的包名,不然在识别的时候会提示你获取Token出错,接下来我们就直接创建我们的应用。


3、查看管理应用列表


        这个就是我们刚刚创建的应用,我们需要记住它的API Key和Secret Key,在我们的项目中可能会用到


4、点击应用列表左边最下面的sdk下载,就会到下载界面下载我们需要的技术文档和sdk。在sdk里面也有一份技术文档

        下载下来sdk后,解压后,目录如下:


        关于这几个文件的作用,引用官方文档的一张图来说明



  • libs:包含核心jar包以及so文件,直接拷贝到你项目的libs中即可

  • ocr-ui:是它提供的一个扫描的默认ui,我们可以用,也可以不用,

  • OCRDemo :官方提供的一个包含多种功能,可以直接运行的demo,但是必须要自己配置AK和SK才能运行,否则会提示获取Token失败。


必要的说明:看完了这里,你就可以少踩坑

        直接运行官方demo,会失败,他会提示获取AccessToken失败。那什么是AccessToken?怎么获取?别急,笔者这就为大家讲述


注意:我们在使用百度AI平台的SDK之前必须先获取AccessToken成功

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

        OCR Android SDK提供了以下3种获取AccessToken的方法.


方案一、API Key / Secret Key获取Token

        也就是说调用下面这段代码获取AccessToken时,需要填写刚才你创建的应用的API Key / Secret Key,注意包名必须和你项目的包名一致,否则会失败。

OCR.getInstance().initAccessTokenWithAkSk(new OnResultListener<AccessToken>() {
   @Override    public void onResult(AccessToken result) {
       // 调用成功,返回AccessToken对象        String token = result.getAccessToken();    }
   @Override    public void onError(OCRError error) {
       // 调用失败,返回OCRError子类SDKError对象    } }, getApplicationContext(), "您的应用AK", "您的应用SK");

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


方案二、授权文件(安全模式)获取Token

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


这时候应该有人就在想 什么是授权文件?如何获取?


  • 在应用列表找到对应的应用

  • 下载对应应用的授权文件

  • 将授权文件添加至工程assets文件夹,文件名必须为aip.license

  • 调用initAccessToken方法,初始化OCR单例,来获取AccessToken:

OCR.getInstance().initAccessToken(new OnResultListener<AccessToken>() {
   @Override    public void onResult(AccessToken result) {
       // 调用成功,返回AccessToken对象        String token = result.getAccessToken();    }    
   @Override    public void onError(OCRError error) {        
       // 调用失败,返回OCRError子类SDKError对象    } }, getApplicationContext());

        通过这种方式,你就不需要填写你的ak和sk了,这种授权文件的方式较为安全,推荐使用。

3、自助AccessToken管理(不推荐)

        此种身份验证方案直接使用开发者提供的AccessToken,鉴于安全性考虑不推荐此方式,使用此模式将不能开启身份证本地质量控制能力。
        若开发者的应用有自行搭建的服务端,也可在自己的服务端进行token的获取与管理,然后分配给移动客户端使用。token的获得可以参考API鉴权认证机制。此种授权方案在移动客户端上没有任何AK/SK信息,风险系数低,但需要开发者自行管理token的获取与分配,适合有条件的开发者使用。


使用步骤:
        将您需要使用的token传入对应的构造函数,初始化OCR单例:

OCR.getInstance().initWithToken(getApplicationContext(), "自行获取的access_token");

        到这里,核心部分就讲完了,你只需要按照文档上面的SDK导入就好,注释很清楚,在此提供一个官方的接入文档的地址

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


Demo地址:https://github.com/zhouxu88/OCRDemo

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Android Studio中连接腾讯云MySQL云数据库,需要进行以下步骤: 1. 在腾讯云控制台中创建一个MySQL云数据库实例,并创建一个数据库和一个或多个表。 2. 在腾讯云云数据库实例的安全组中添加一个入站规则,允许来自Android应用程序的IP地址和端口访问数据库。 3. 在Android Studio项目中添加MySQL数据库的Java连接器依赖项。常见的MySQL连接器依赖项是mysql-connector-java。 4. 在Android Studio项目中创建一个Java类,并在该类中编写连接腾讯云MySQL云数据库的Java代码。以下是一个示例代码: ```java import java.sql.*; public class MySQLConnection { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://你的数据库IP地址:你的数据库端口号/你的数据库名称"; static final String USER = "你的数据库用户名"; static final String PASS = "你的数据库密码"; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try{ Class.forName(JDBC_DRIVER); System.out.println("连接数据库..."); conn = DriverManager.getConnection(DB_URL,USER,PASS); System.out.println("实例化Statement对象..."); stmt = conn.createStatement(); String sql; sql = "SELECT id, name, age FROM user"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); System.out.print("ID: " + id); System.out.print(", 名称: " + name); System.out.println(", 年龄: " + age); } rs.close(); stmt.close(); conn.close(); }catch(SQLException se){ se.printStackTrace(); }catch(Exception e){ e.printStackTrace(); }finally{ try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ } try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); } } System.out.println("Goodbye!"); } } ``` 5. 编译并运行Java类,以确保它能够连接到腾讯云MySQL云数据库并读取数据。 6. 现在可以在Android应用程序中使用相同的Java代码来连接腾讯云MySQL云数据库。可以在Android应用程序中使用异步任务或线程来避免在主线程中执行长时间的数据库操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值