千家信息网

Android如何在安卓上实现通用卡证识别

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章主要介绍"Android如何在安卓上实现通用卡证识别",在日常操作中,相信很多人在Android如何在安卓上实现通用卡证识别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2024年11月22日Android如何在安卓上实现通用卡证识别

这篇文章主要介绍"Android如何在安卓上实现通用卡证识别",在日常操作中,相信很多人在Android如何在安卓上实现通用卡证识别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Android如何在安卓上实现通用卡证识别"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1 开发准备

这里列举关键的开发步骤。

1.1 在项目级gradle里添加华为maven仓

  打开AndroidStudio项目级build.gradle文件,增量添加如下maven地址:

buildscript {    repositories {                maven {url 'http://developer.huawei.com/repo/'}    }    }allprojects {    repositories {               maven { url 'http://developer.huawei.com/repo/'}    }}

1.2 在应用级的build.gradle里面加上SDK依赖

dependencies{    // 引入基础SDK   implementation 'com.huawei.hms:ml-computer-vision-ocr:1.0.3.300'   // 引入拉丁语文字识别模型包   implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:1.0.3.300'   // 引入银行卡识别plugin包   implementation 'com.huawei.hms:ml-computer-card-gcr-plugin:1.0.3.300' }

  将以下语句添加到AndroidManifest.xml文件中:

     ... 

1.3 配置混淆脚本

按照官网操作指导来就行了:
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-configuringobfuscation-scripts-4

1.4 在AndroidManifest.xml文件里面申请相机和存储权限

都是些基本操作,废话也不多说,按照官网指导来操作:
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-assigning-permissions-4

2 代码开发

2.1 启动卡证识别

@Override public void onClick(View v) {     switch (v.getId()) {         // 相册图片检测按钮。         case R.id.detect_picture:             this.startLocalImageActivity(cardImage, null, callback);             break;         // 视频流检测按钮。         case R.id.detect_video:             this.startCaptureActivity(null, callback);             break;         // 拍照检测按钮。         case R.id.detect_take_photo:             this.startTakePhotoActivity(null, callback);             break;         default:             break;         } }

视频流识别

private void startCaptureActivity(Object object, MLGcrCapture.Callback callback) {     // 创建通用卡证识别配置器。     MLGcrCaptureConfig cardConfig = new MLGcrCaptureConfig.Factory().create();     // 创建通用卡证识别界面配置器。     MLGcrCaptureUIConfig uiConfig = new MLGcrCaptureUIConfig.Factory()                // 设置扫描框颜色。         .setScanBoxCornerColor(Color.GREEN)         // 设置扫描框中的提示文字,建议少于30个字符。         .setTipText("Recognizing, align edges")         // 设置识别界面横竖屏,支持三种模式:         // MLGcrCaptureUIConfig.ORIENTATION_AUTO:自动模式,由物理感应器决定显示方向。         // MLGcrCaptureUIConfig.ORIENTATION_LANDSCAPE:横屏模式。         // MLGcrCaptureUIConfig.ORIENTATION_PORTRAIT:竖屏模式。         .setOrientation(MLGcrCaptureUIConfig.ORIENTATION_AUTO)         .create();     // 方式一:根据自定义的卡证识别界面配置器,创建通用卡证识别处理器。     MLGcrCapture ocrManager = MLGcrCaptureFactory.getInstance().getGcrCapture(cardConfig, uiConfig);     // 方式二:使用默认界面,创建通用卡证识别处理器。     MLGcrCapture ocrManager = MLGcrCaptureFactory.getInstance().getGcrCapture(cardConfig);     // 绑定通用卡证识别处理器和处理结果回调函数。     ocrManager.capturePreview(this, object, callback); }

拍照识别

private void startTakePhotoActivity(Object object, MLGcrCapture.Callback callback) {     // 创建通用卡证识别配置器。     MLGcrCaptureConfig cardConfig = new MLGcrCaptureConfig.Factory().create();     // 创建通用卡证识别界面配置器。     MLGcrCaptureUIConfig uiConfig = new MLGcrCaptureUIConfig.Factory()         // 设置扫描框颜色。         .setScanBoxCornerColor(Color.BLUE)         // 设置扫描框中的提示文字,建议少于30个字符。         .setTipText("Taking picture, align edges")         // 设置界面横竖屏,支持三种模式:         // MLGcrCaptureUIConfig.ORIENTATION_AUTO:自动模式,由物理感应器决定显示方向。         // MLGcrCaptureUIConfig.ORIENTATION_LANDSCAPE:横屏模式。         // MLGcrCaptureUIConfig.ORIENTATION_PORTRAIT:竖屏模式。         .setOrientation(MLGcrCaptureUIConfig.ORIENTATION_AUTO)         .create();     // 方式一:根据自定义的卡证识别界面配置器,创建通用卡证识别处理器。     MLGcrCapture ocrManager = MLGcrCaptureFactory.getInstance().getGcrCapture(cardConfig, uiConfig);     // 方式二:使用默认界面,创建通用卡证识别处理器。     MLGcrCapture ocrManager = MLGcrCaptureFactory.getInstance().getGcrCapture(cardConfig);     // 绑定通用卡证识别处理器和处理结果回调函数。     ocrManager.capturePhoto(this, object, callback); }

相册图片识别

private void startLocalImageActivity(Bitmap bitmap, Object object, MLGcrCapture.Callback callback) {     // 创建通用卡证识别配置器。     MLGcrCaptureConfig config = new MLGcrCaptureConfig.Factory().create();     MLGcrCapture ocrManager = MLGcrCaptureFactory.getInstance().getGcrCapture(config);     // bitmap 为需要识别的Bitmap类型卡证图像,支持的图片格式包括:jpg/jpeg/png/bmp。     ocrManager.captureImage(bitmap, object, callback); }

2.2 对识别后的内容做后处理,进行关键信息提取

  重载onResult, onCanceled, onFailure, onDenied四个方法;onResult表示返回了结果,MLGcrCaptureResult为卡证识别返回的结果,onCanceled 表示用户取消,onFailure 表示识别失败,onDenied 表示相机不可用等场景。

private MLGcrCapture.Callback callback = new MLGcrCapture.Callback() {        @Override        public int onResult(MLGcrCaptureResult result, Object object) {            Log.i(TAG, "callback onRecSuccess");            if (result == null) {                Log.e(TAG, "callback onRecSuccess result is null");                return MLGcrCaptureResult.CAPTURE_CONTINUE;            }            GeneralCardProcessor idCard = null;            GeneralCardResult cardResult = null;            /*港澳台通行证处理*/                        if (cardTypeEnum == CardType.PASSCARD) {                idCard = new PassCardProcessor(result.text);            /*香港身份证处理*/            } else if (cardTypeEnum == CardType.HKIDCARD) {                idCard = new HKIdCardProcessor(result.text);            /*回乡证处理*/            } else if (cardTypeEnum == CardType.COMEHOMECARD) {                idCard = new HomeCardProcessor(result.text);            }            if (idCard != null) {                /*获取处理后的结果*/                cardResult = idCard.getResult();            }            showFrontImage(result.cardBitmap);            displayResult(cardResult);            // If the results don't match            if (cardResult == null || cardResult.valid.isEmpty() || cardResult.number.isEmpty()) {                return MLGcrCaptureResult.CAPTURE_CONTINUE;            }            displayResult(cardResult);            return MLGcrCaptureResult.CAPTURE_STOP;        }           };}   };

  具体的卡号提取处理逻辑可以通过重写GeneralCardProcessor 类中的getResult()方法来完成,以港澳台通行证举例,更加详细的处理可以看github上的源码:

public class PassCardProcessor implements GeneralCardProcessor {    private static final String TAG = "PassCardProcessor";    private final MLText text;    public PassCardProcessor(MLText text) {        this.text = text;    }    @Override    public GeneralCardResult getResult() {        List blocks = text.getBlocks();        if (blocks.isEmpty()) {            Log.i(TAG, "Result blocks is empty");            return null;        }        ArrayList originItems = getOriginItems(blocks);        String valid = "";        String number = "";        boolean validFlag = false;        boolean numberFlag = false;        for (BlockItem item : originItems) {            String tempStr = item.text;            if (!validFlag) {                String result = tryGetValidDate(tempStr);                if (!result.isEmpty()) {                    valid = result;                    validFlag = true;                }            }            if (!numberFlag) {                String result = tryGetCardNumber(tempStr);                if (!result.isEmpty()) {                    number = result;                    numberFlag = true;                }            }        }                return new GeneralCardResult(valid, number);    } }

到此,关于"Android如何在安卓上实现通用卡证识别"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

处理 模式 界面 配置 处理器 结果 安卓 上实 方式 学习 图片 按钮 文件 文字 方法 开发 支持 检测 关键 函数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 海南智慧人口管理系统软件开发 软件开发讽刺图 服务器如何安装网心云 源计划软件开发 零代码配置型软件开发怎么开发 股票软件连接不上服务器 香肠派对先行服服务器维护 数据库设置性别默认 美国报刊数据库 厦门直播软件开发一个多少钱 未来之役怎么找回原来的服务器 根域名服务器是真的吗 苹果软件开发外包北京 服务器异地视频同步更新 长宁区威力网络技术应用范围 ACCESS数据库技术路线图 穿越火线怎么加入战队服务器 3d软件开发教学 泰州大数据服务器供应商家 金融软件开发公司这么难 网络安全员证书考试内容 渐江正泰网络技术有限公司 手工指定邮箱服务器域名解析 北塔区网络安全应急指挥中心 用友怎么导入其他电脑数据库 快速gui 数据库 向数据库表中添加一个字段 中信银行软件开发中心工作内容 甲骨文数据库手抄报 登封要建大数据库吗
0