Android 腾讯优图 OCR 云平台识别身份证、银行卡、行驶证、驾驶证,依赖包小,识别次数免费

cardocr

项目地址:Eric0liang/cardocr 

简介:Android 腾讯优图 OCR 云平台识别身份证、银行卡、行驶证、驾驶证,依赖包小,识别次数免费

更多:作者   提 Bug   官网   

标签:

OCR身份证、银行卡、行驶证、驾驶证-

使用前请阅读对应模块的文档和示例,如果有不清楚的地方,可以看源码,或者向我提问。觉得有帮助的,星星点起来!!!

这个库的底层是使用腾讯优图云平台识别技术,所以引用包非常小,识别速度大概几秒。

集成

permission 与 meta-data 声明

    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <meta-data
            android:name="OCR_APP_KEY"
            android:value="腾讯优图申请" />
    <meta-data
            android:name="OCR_SECRET_ID"
            android:value="腾讯优图申请" />
    <meta-data
            android:name="OCR_SECRET_KEY"
            android:value="腾讯优图申请" />

Gradle

    allprojects {
        jcenter()
    }
    compile 'com.github.eric0liang:lib_cardocr:1.0.5'

依赖的 jar 添加到 libs

fastjson.jar 用于解析腾讯云平台 response 的 json

BASE64Decoder.jar 用于解码腾讯云平台 response base64 格式的截图

混淆

-dontwarn cn.com.bluemoon.cardocr.**
-keep class cn.com.bluemoon.cardocr.** {*;}

demo apk 下载地址:

点击下载

效果

1.身份证识别


 

2.银行卡识别


3.行驶证识别


4.驾驶证识别


使用指南(2018.1.23 更新)

CaptureActivity 识别身份证、银行卡照相机类

API

startAction(Activity context, CardType type, int requestCode) 
startAction(Activity context, CardType type, String url, int requestCode) 
startAction(Activity context, CardType type, @StringRes int titleId, int requestCode)

  • context 调起照相机的 activity 类
  • type 枚举类,有五个类型
     public enum CardType {
      //身份证头像面,身份证国徽面,银行卡,行驶证,驾驶证
      TYPE_ID_CARD_FRONT, TYPE_ID_CARD_BACK,TYPE_BANK,TYPE_DRIVING_LICENSE_XINGSHI,TYPE_DRIVING_LICENSE_JIASHI
    }
    
  • titleId 自定义照相机顶部的 title,比如请确保身份证头像面边缘在框内
  • url 是否需要保存身份证的截图,传保存的文件夹路径,比如 Environment.getExternalStorageDirectory() + "/images"
  • requestCode onActivityResult 使用

使用 demo MainActivity 代码片段

    @Override
    public void onClick(View v) {
        String dirPath = Environment.getExternalStorageDirectory() + "/images";
        switch (v.getId()) {
            case R.id.btn_id_card_back:
                CaptureActivity.startAction(this, CardType.TYPE_ID_CARD_BACK, checkbox.isChecked() ? dirPath : null, 0);
                //CaptureActivity.startAction(this, CardType.TYPE_ID_CARD_BACK, 0);
                //CaptureActivity.startAction(this, CardType.TYPE_ID_CARD_BACK, R.string.txt_id_card_title, 0);
                break;
            case R.id.btn_id_card_front:
                CaptureActivity.startAction(this, CardType.TYPE_ID_CARD_FRONT, checkbox.isChecked() ? dirPath : null, 0);
                //CaptureActivity.startAction(this, CardType.TYPE_ID_CARD_FRONT, 0);
                //CaptureActivity.startAction(this, CardType.TYPE_ID_CARD_FRONT, R.string.txt_id_card_title, 0);
                break;
            case R.id.btn_bank:
                CaptureActivity.startAction(this, CardType.TYPE_BANK, 1);
                break;
            case R.id.btn_xingshi:
                CaptureActivity.startAction(this,CardType.TYPE_DRIVING_LICENSE_XINGSHI,2);
                break;
            case R.id.btn_jiashi:
                CaptureActivity.startAction(this,CardType.TYPE_DRIVING_LICENSE_JIASHI,2);
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
            imgIdCard.setVisibility(View.GONE);
            if (requestCode == 0) {
                IdCardInfo info = (IdCardInfo)data.getSerializableExtra(CaptureActivity.BUNDLE_DATA);
                txtInfo.setText(info.toString());
                if (!TextUtils.isEmpty(info.getImageUrl())) {
                    imgIdCard.setVisibility(View.VISIBLE);
                    imgIdCard.setImageBitmap(BitmapFactory.decodeFile(info.getImageUrl()));
                }

            } else if (requestCode == 1){
                BankInfo info = (BankInfo)data.getSerializableExtra(CaptureActivity.BUNDLE_DATA);
                txtInfo.setText(info.toString());
            } else {
                DrivingLicenseInfo info = (DrivingLicenseInfo)data.getSerializableExtra(CaptureActivity.BUNDLE_DATA);
                txtInfo.setText(info.toString());
            }
        }
    }

IdCardInfo

private String authority; //签发机关,XXX 公安局
private String validDate; //有效期限,2007.02.14-2017.02.14
private String imageUrl; //截图保存地址,预留
private String name; //姓名,艾米
private String sex; //性别,女
private String nation; //民族,汉
private String birth; //出生,1990/12/22
private String address; //住址,浙江省海盐县武原街工人路
private String id; //公民身份号码,610333199012223323

BankInfo

private String bankName; //银行信息,农业银行
private String cardName; //卡名字,金穗通宝卡(银联卡)
private String cardType; //卡类型,借记卡
private String cardNumber; //卡号,6228475757548

DrivingLicenseInfo

private String licenseNumber;//车牌号码
private String vehicleType;//车辆类型
private String master;//所有人
private String address;//住址
private String function;//使用性质
private String brandModel;//品牌型号
private String identifyCode;//识别代码
private String engineNumber;//发动机号
private String registrationDate;//注册日期
private String openingDate;//发证日期

private String certificateNumber;//证号
private String name;//姓名
private String gender;//性别
private String nationality;//国籍
private String dateBirth;//出生日期
private String quasiDrivingType;//准驾车型
private String effectiveDate;//有效日期
private String startDate;//起始日期

识别照相机界面,默认样式如下,也可自定义(参考 CoustomCaptureActivity 类)

如果想自定义识别照相机界面,继承 BaseCaptureActivity,并重写 getLayoutId,initCustomView 两个方法即可。

    @Override
    public int getLayoutId() {
        return R.layout.activity_coustom;
    }

    @Override
    public void initCustomView() {
        Button btnBack = (Button)findViewById(R.id.btn_back);
        Button btnTake = (Button)findViewById(R.id.btn_take);
        View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int id = v.getId();
                if (id == R.id.btn_back) {
                    finish(); //关闭
                } else if (id == R.id.btn_take) {
                    identification(); //拍照识别
                }
            }
        };
        btnBack.setOnClickListener(listener);
        btnTake.setOnClickListener(listener);
    }

更新记录

  • 1.0.5 2018.8.21
    • 修复 8.0 奔溃问题
  • 1.0.4 2018.1.23
    • 优化行驶证、驾驶证识别
    • 添加使用说明
  • 1.0.3, 1.0.2 2017.12.8
    • 优化代码
  • 1.0.1 2017.12.8
    • 修复连续拍照触发的奔溃
    • 增加行驶证、驾驶证识别
  • 1.0.0 2017.11.7
    • first commit

其它问题

发现任何问题可以提 issue


关于作者

联系方式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值