█ 【安卓学习之第三方库】身份证、银行卡、营业执照OCR识别
█ 相关文章:
-
● 【安卓学习之第三方库】库的使用2-jar类库的使用(以dom4j为例)和升级(以极光推送为例)
● 【安卓学习之第三方库】 消息推送之极光推送
● 【安卓学习之第三方库】 消息推送之阿里云推送
█ 读前说明:
-
● 本文通过学习别人写demo,学习一些课件,参考一些博客,’学习相关知识,如果涉及侵权请告知
● 本文只简单罗列相关的代码实现过程
● 涉及到的逻辑以及说明也只是简单介绍,主要当做笔记,了解过程而已
█ 身份证、银行卡识别集成:
-
● 添加依赖库,添加so库
dependencies {
implementation 'com.github.bumptech.glide:glide:3.7.0'// 显示图片
implementation 'top.zibin:Luban:1.1.8'// 图片压缩
implementation files('libs/XXXCardApi.jar')// 银行卡身份证识别SDK
}
● 产品初始化引擎
private XXX_EngineAPI engine = new XXX_EngineAPI();// 实例化引擎
private void initOCREngine() {
// 引擎初始化
int status = engine.init(this, engine.getEngineTimeKey());
if (status == 2) {
Toast.makeText(this, "引擎过期", Toast.LENGTH_SHORT).show();
} else if (status == 0) {
Toast.makeText(this, "引擎初始化失败", Toast.LENGTH_SHORT).show();
}
// 参数初始化:设置账户,密码,打开小图、头像功能
engine.setParam("account", "bdzhifu");
engine.setParam("password", "123456789");
engine.setParam("headimg", 1);
}
● 开始身份证识别,启动摄像头
Intent intent = new Intent(aty, XXX_CaptureActivity.class);
intent.putExtra("engine", engine);
intent.putExtra("tengineID ", 3);// 1-身份证正面/反面 3-银行卡正面
intent.putExtra("showCopyRightTxt ", "");
startActivityForResult(intent, 1);
● 扫描识别的全图成功,回调
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// 身份证
if (requestCode == 1 && resultCode == XXX_CaptureActivity.IDCAD_OK && data != null) {
Bitmap takeimg = XXX_CaptureActivity.getBitmap();// 身份证照片(压缩后再提交服务器)
XXX_CardInfo cardInfo = (XXX_CardInfo ) data.getSerializableExtra("cardinfo");// 身份证信息
if (takeimg != null) {
String outFileFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
String outFilePath = System.currentTimeMillis() + ".jpg";
try {
// 图片保存本地
File file = saveFile(takeimg, outFileFolder, outFilePath);
// 图片压缩
Luban.with(this).load(file).setCompressListener(new OnCompressListener() {
@Override
public void onStart() {
// 显示加载提示框
}
@Override
public void onSuccess(File file) {
// 拼接身份证照片based64码,等待提交到服务器
byte[] bytes = File2byte(file);
mCardBase64 = Base64.encodeToString(bytes, Base64.DEFAULT);
// 显示银行卡照片(全图)
Glide.with(aty).load(file).into(mCardImageView);
// 关闭加载提示框
}
@Override
public void onError(Throwable e) {
// 关闭加载提示框
}
}).launch();
} catch (IOException e) {
e.printStackTrace();
}
// 图片识别后的信息,显示身份证信息,正面:名字、身份证号、住址,反面:有效期
if (cardInfo != null) {
mCardNameEditText.setText(cardInfo.getFieldString("name"));
...
}
} else {
Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show();
}
}
// 银行卡
else if (requestCode == 1 && resultCode == CaptureActivity.BANK_OK && data != null) {
// 扫描识别的全图
Bitmap takeimg = XXX_CaptureActivity.getBitmap();// 银行卡照片(压缩后再提交服务器)
XXX_CardInfo cardInfo = (XXX_CardInfo ) data.getSerializableExtra("cardinfo");// 银行卡信息
if (takeimg != null) {
String outFileFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();
String outFilePath = System.currentTimeMillis() + ".jpg";
try {
// 图片保存本地
File file = saveFile(takeimg, outFileFolder, outFilePath);
// 图片压缩
Luban.with(this).load(file).setCompressListener(new OnCompressListener() {
@Override
public void onStart() {
// 显示加载提示框
}
@Override
public void onSuccess(File file) {
// 拼接银行卡照片based64码,等待提交到服务器
byte[] bytes = File2byte(file);
mBase64 = Base64.encodeToString(bytes, Base64.DEFAULT);
// 显示银行卡照片(全图)
Glide.with(aty).load(file).into(imageView);
// 关闭加载提示框
}
@Override
public void onSuccess(File file) {
// 拼接银行卡照片based64码,等待提交到服务器
byte[] bytes = File2byte(file);
mBankBase64 = Base64.encodeToString(bytes, Base64.DEFAULT);
// 显示银行卡照片(全图)
Glide.with(aty).load(file).into(mBankImageView);
// 关闭加载提示框
}
@Override
public void onError(Throwable e) {
// 关闭加载提示框
}
}).launch();
} catch (IOException e) {
e.printStackTrace();
}
// 图片识别后的信息,显示银行卡信息,卡号
if (cardInfo != null) {
mBankEditText.setText(cardInfo.getFieldString("BankNum").replace(" ", ""));
}
} else {
Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show();
}
}
}
● 将银行卡信息提交到服务器
拼接:("data:image/jpeg;base64," + mBankBase64)
● 费用说明
不管是否成功,调用一次0.05元。
█ 营业执照识别:
-
● 根据营业执照图片获取信息
将营业执照的base64码传给服务器(图片记得压缩)
服务器识别后,返回:商户全称、法定代表人、统一社会信用代码、经营地址等信息
█ 其他工具类:
-
● 将Bitmap转换成File
public static File saveFile(Bitmap bm, String path, String fileName) throws IOException {
File dirFile = new File(path);
if (!dirFile.exists()) {
dirFile.mkdir();
}
File file= new File(path, fileName);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
bos.flush();
bos.close();
return file;
}
● 将File转换成byte
public static byte[] File2byte(File file) {
byte[] buffer = null;
try {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
bos.close();
buffer = bos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return buffer;
}
█ 相关资料:
-
● 1.IdCardOCR: 身份证正反面识别,身份证扫描识别,二代身份证OCR识别,OCR极速识别身份证所有信息正反面均可。离线无需联网,极速秒扫。
● 2.百度文字识别: CR_identify: 身份证自动识别,银行卡识别,驾驶证识别,行驶证识别,根据百度文字识别 api 封装,能快速识别身份证信息,银行卡信息,驾驶证信息,行驶证信息,使用非常方便
● 3.AndroidOcrLibs: Android离线识别身份证、驾驶证、银行卡
转载请注明出处:
https://blog.csdn.net/ljb568838953/article/details/109852414