现在APP添加银行卡识别的需求越来越多,今天在GitHub上看到了card.io这一个开源银行卡识别,下载使用后发现不支持许多国内银行卡,然后发现华为的**HMS Core MLKit**机器学习服务银行卡识别SDK比较好用,于此,记录下集成步骤。
开发准备
1、新建个empty activity(操作略过)
2、在项目级的build.gradle中添加华为的maven.
maven {url 'http://developer.huawei.com/repo/'}
3、在项目的应用级的build.gradle中添加华为的银行卡识别所需要的依赖
// 引入基础SDK
implementation 'com.huawei.hms:ml-computer-vision-bcr:1.0.3.303'
// 引入银行卡识别plugin包
implementation 'com.huawei.hms:ml-computer-card-bcr-plugin:1.0.3.300'
// 引入银行卡识别模型包
implementation 'com.huawei.hms:ml-computer-card-bcr-model:1.0.3.300'
//权限
implementation 'pub.devrel:easypermissions:3.0.0'
这里我添加了权限依赖,不然demo没权限无法运行
4、别忘了在AndroidManifest文件添加权限
1、在AndroidManifest.xml文件中添加权限(相机和存储权限)
<!--相机权限-->
<uses-permission android:name="android.permission.CAMERA" />
<!--使用存储权限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2、增量添加模型自动下载(加不加无所谓),也就是华为手机在华为应用商城下载后会自动更新最新的机器学习模型。有需要的可以添加到AndroidManifest中,代码如下
<meta-data
android:name="com.huawei.hms.ml.DEPENDENCY"
android:value= "bcr"/>
<!--If multiple models are required,set the parameter as follows:
android:value="object,ocr,face,label,icr,bcr,imgseg"-->
5、开始最重要的代码实现模块了
一、简单的用一个ImgView和一个TextView搭建一个界面(不详细描述)
二、调用
private void startCaptureActivity(MLBcrCapture.Callback callback) {
MLBcrCaptureConfig config = new MLBcrCaptureConfig.Factory()
// 设置银行卡识别期望返回的结果类型。
// MLBcrCaptureConfig.SIMPLE_RESULT:仅识别卡号、生效期信息。
// MLBcrCaptureConfig.ALL_RESULT:识别卡号、生效期、发卡行和卡类别等信息。
// .setResultType(MLBcrCaptureConfig.RESULT_SIMPLE)
.setResultType(MLBcrCaptureConfig.RESULT_ALL)
// 设置识别界面横竖屏,支持三种模式:
// MLBcrCaptureConfig.ORIENTATION_AUTO: 自适应模式,由物理感应器决定显示方向。
// MLBcrCaptureConfig.ORIENTATION_LANDSCAPE: 横屏模式。
// MLBcrCaptureConfig.ORIENTATION_PORTRAIT: 竖屏模式。
.setOrientation(MLBcrCaptureConfig.ORIENTATION_AUTO)
.create();
MLBcrCapture bankCapture = MLBcrCaptureFactory.getInstance().getBcrCapture(config);
bankCapture.captureFrame(this, callback);
}
直接点击图片调用上面代码
三、返回结果
private MLBcrCapture.Callback callback = new MLBcrCapture.Callback() {
@Override
public void onSuccess(MLBcrCaptureResult bankCardResult){
// 识别成功处理。
textView.setText("银行卡号"+bankCardResult.getNumber()
+"银行类型"+bankCardResult.getType()
+"到期"+bankCardResult.getExpire()
+"银行种类"+bankCardResult.getIssuer());
//只显示卡号的图片
// imageView.setImageBitmap(bankCardResult.getNumberBitmap());
//显示对应的银行卡原图
imageView.setImageBitmap(bankCardResult.getOriginalBitmap());
}
@Override
public void onCanceled(){
// 用户取消处理。
}
// 识别不到任何文字信息或识别过程发生系统异常的回调方法。
// retCode:错误码。
// bitmap:检测失败的卡证图片。
@Override
public void onFailure(int retCode, Bitmap bitmap){
// 识别异常处理。
Toast.makeText(MainActivity.this,retCode+"",Toast.LENGTH_SHORT).show();
}
@Override
public void onDenied(){
// 相机不支持等场景处理。
}
};
就这样。没了。权限的代码就不贴了。
demo地址
https://download.csdn.net/download/huangjinyong1994/16345900