我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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文件中:

<manifest     ...     <meta-data                      android:name="com.huawei.hms.ml.DEPENDENCY"           android:value= "ocr"/>     ... </manifest>

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<MLText.Block> blocks = text.getBlocks();        if (blocks.isEmpty()) {            Log.i(TAG, "Result blocks is empty");            return null;        }        ArrayList<BlockItem> 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如何在安卓上实现通用卡证识别”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

这篇文章主要介绍“Android如何在安卓上实现通用卡证识别”,在日常操作中,相信很多人在Android如何在安卓上实现通用卡证识别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android如何在安卓上实现
2023-06-04

Android | 教你如何在安卓上实现二代身份证识别,一键实名认证

目录前言场景开发前准备android studio 安装在项目级gradle里添加华为maven仓在应用级的build.gradle里面加上SDK依赖在AndroidManifest.xml文件里面增量添加模型自动下载在AndroidMan
2022-06-06

如何使用密钥身份验证在CentOS服务器上实现更安全的SSH登录

本指南将详细介绍如何使用密钥身份验证在CentOS服务器上实现更安全的SSH登录。密钥身份验证提供更高的安全性、便利性和自动化,使其成为首选的远程连接安全方法。指南详细介绍了生成密钥对、将公钥复制到服务器、启用密钥身份验证、禁用密码身份验证(可选)以及测试密钥身份验证的步骤。此外,还提供了最佳实践,例如使用强密码短语、定期轮换密钥和限制访问。通过遵循这些步骤,管理员可以显著提高服务器的SSH安全性。
如何使用密钥身份验证在CentOS服务器上实现更安全的SSH登录
2024-04-13

如何使用密钥身份验证在CentOS服务器上实现更安全的SSH登录

要在CentOS服务器上实现更安全的SSH登录,你可以使用密钥身份验证。以下是一些步骤可以帮助你完成这个过程:1. 生成密钥对:在本地计算机上,使用SSH密钥生成器(如OpenSSH)生成公钥和私钥。可以使用以下命令生成密钥对:```ssh
2023-10-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录