Android 腾讯优图 OCR 云平台识别身份证、银行卡、行驶证、驾驶证,依赖包小,识别次数免费
cardocr
项目地址:Eric0liang/cardocr
简介:Android 腾讯优图 OCR 云平台识别身份证、银行卡、行驶证、驾驶证,依赖包小,识别次数免费
标签:
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
关于作者
联系方式
- Github: https://github.com/Eric0liang
- Email: [email protected]