一文搞懂华为HMS ML Kit文本识别,银行卡识别,通用卡证识别,身份证识别

1前言

查看华为开发者联盟网站的机器学习服务业务介绍(https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-introduction-4android

能够看到华为HMS把机器学习服务归入了文本类,语言类,图片类,人脸人体类四大服务,后面新特性同时不断增长中,其中某些类是文本类服务,文本类服务里面又含了文本识别,文档识别,身份证识别,银行卡识别,通用卡证识别,这些子服务之间都有一些差别和关联呢,可能不少小伙伴会傻傻分不清,今天小编重点剖析下文本类服务,来看下这几个子服务间的差别和关联。正则表达式

2应用场景差别

首先看下文本类服务包含的子服务内容和对应的场景差别算法

服务 场景差别 说明
文字识别 稀疏的文本,收据,名片 支持的识别范围和场景“广”,啥都能识别,只要是拉丁字符,日韩,中英的文字均可以识别。
文档识别 包含文档的密集文本图片,尺寸文章,合同等 须要识别出带一级格式的文本信息,此处须要更多云端的运算能力,有更普遍的语言种类支持能力。
身份证识别 中国大陆二代身份证识别 支持的识别范围和场景很“专”,只识别大陆身份证,准确率高。
银行卡识别 全球常见的银行卡(银联,运通,万事达,Visa,JCB)卡号等关键信息识别 支持的识别范围和场景很“专”,只识别银行卡,准确率高。
通用卡证识别 任意固定板式的卡证,包括会员卡,通行证,工卡等 支持和识别范围和场景介于文本识别和身份证,银行卡识别之间,只要是卡证均可以进行识别。

文本类服务SDK有设备端API和云侧API接口两种,设备端的API只在设备端进行处理和分析,使用的是设备自身CPU,GPU等器件的算力,云端的API则须要把数据送到云端,利用云端的服务器资源进行处理和分析,以上服务除文档识别经过计算量吞吐量须要在云端进行处理外,其余服务共用设备端API,本次为了简化分析的范围,咱们只讲设备端API服务部分。服务器

2.1场景对比总结

经过以上对比表格咱们能够看到,不一样能力对应的应用场景是有所不一样的:框架

  • 2.1.1文本识别:更像是一个全科考生,上知天文下知地理,只要是文本,均可以识别。机器学习

                                                                           文本识别使用场景  async

     

                                                      

                                                     文本识别服务自己不提供界面,界面由开发者实现ide

                       

2.1.2身份证识别,银行卡识别:更像是一个偏科生,其余不会,只会成为科,但这一科学的极好。函数

针对身份证,银行卡提供了更改的定制框,直接对齐框就能够快速进行身份证,银行卡号的提取和识别。学习

                                     

                                                            银行卡识别校准界面

                       

                                                           二代身份证识别校准界面

 

  • 2.1.3通用卡证:则介于以上两类中间,在某些领域有必定的造诣,横向广度和垂直深度都位于中间位置。

    能够对全部的卡证进行文本类识别,同时提供了卡证类的对齐框,提示用户对准待识别的卡证。

                                 

                                                                通用卡证识别校准界面

2.2该怎么选

很简单,身份证,银行卡识别确定选身份证识别服务,银行卡识别服务啦,其余卡证类的识别就用通用卡证识别,剩下的场景就用文本识别服务。

3服务集成差别

编译依赖差别

为了便于你们理解,先解释下以下几个概念:

                                               

 

  • 基础SDK

  •      相关服务对开发者呈现的接口,全部的API经过基础SDK对外开放

  • 插件

  •      就是前面场景对比总结中讲到的校准框,提供界面针对图像帧的输入质量作校订,不知足要求的能够提示用户从新放置放。

  • 模型包

  •       这个是华为HMS ML Kit的各个服务的核心所在,它包含经过机器学习平台输入大量样本进行学习并生成的推理模型文件,以及执行这些推理模型所依赖的轻量化推理框架,承载了全部的图像检测与分析,我面我会在技术差别双向展开分析。

下面小编经过一张表来总结下不一样服务对应的编译依赖:

  • 服务 编译依赖           示例代码(版本号以官方最新发布为准)
    文字识别 基础SDK +通用模型包(任选拉丁,日韩,中英)
    // 引入基础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.315'     
    // 引入日韩语文字识别模型包   
      implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:1.0.3.300'     // 引入中英文文字识别模型包 
        implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:1.0.3.300'
      
    身份证识别 基础SDK +插件(身份证)+专有模型包(身份证) // 引入基础SDK  
      implementation 'com.huawei.hms:ml-computer-vision-icr:1.0.3.300'    
     // 引入身份证识别plugin包  
      implementation 'com.huawei.hms:ml-computer-card-icr-cn-plugin:1.0.3.315'     // 引入身份证识别模型包  
      implementation 'com.huawei.hms:ml-computer-card-icr-cn-model:1.0.3.315'
    银行卡识别 基础SDK +插件(银行卡)+专有模型包(银行卡) // 引入基础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'
    通用卡证识别 基础SDK +插件(通用卡证)+通用模型包(拉丁) // 引入基础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.315'     
    // 引入银行卡识别plugin包     
    implementation 'com.huawei.hms:ml-computer-card-gcr-plugin:1.0.3.300''

编译依赖总结

经过以上编译依赖能够抛光,全部的服务均须要集成对应基础SDK和模型包,但身份证识别,银行卡识别以及通用卡证识别都有对应的插件,也就是前面讲到的校准框。方面,身份证识别和银行卡识别都使用了专有的模型包,而通用卡证识别则使用了通用模型包。

开发差别

先分别看下都是怎么集成的,详细步骤就不在细数了,你们能够直接到开发者联盟上查看对应服务的开发步骤

https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-introduction-4

在这里简单总结下对应服务的开发步骤:

文字识别

  1. 建立识别器

    MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);

  2. 建立fram对象,重构图像bitmap

    MLFrame frame = MLFrame.fromBitmap(bitmap);

  3. 把frame对象传给识别器进行识别

    Task<MLText> task = analyzer.asyncAnalyseFrame(frame);

  4. 结果处理

    Task<MLText> task = analyzer.asyncAnalyseFrame(frame); task.addOnSuccessListener(new OnSuccessListener<MLText>() {    @Override    public void onSuccess(MLText text) {        // 识别成功。    } }).addOnFailureListener(new OnFailureListener() {    @Override    public void onFailure(Exception e) {        // 识别失败。    } });

身份证识别

  1. 启动界面进行身份证识别

    private void startCaptureActivity(MLCnIcrCapture.Callback callback, boolean isFront, boolean isRemote)

  2. 重写callback回调函数,实现对识别结果的处理                                                                                                              private MLCnIcrCapture.Callback idCallback = new MLCnIcrCapture.Callback() {    @Override    public void onSuccess(MLCnIcrCaptureResult idCardResult){        // 识别成功处理。    }     };

银行卡识别

  1. 启动界面进行银行卡识别

    private void startCaptureActivity(MLCnIcrCapture.Callback callback, boolean isFront, boolean isRemote)

  2. 重建法定函数,实现对识别结果处理

    private MLBcrCapture.Callback callback = new MLBcrCapture.Callback() {    @Override    public void onSuccess(MLBcrCaptureResult bankCardResult){        // 识别成功处理。    }     };

通用卡证识别

  1. 启动界面进行通用卡证识别

    private void startCaptureActivity(Object object, MLGcrCapture.Callback callback) {

  2. 重建法定函数,实现对识别结果处理

    private MLBcrCapture.Callback callback = new MLBcrCapture.Callback() {    @Override    public void onSuccess(MLBcrCaptureResult bankCardResult){        // 识别成功处理。    }     };

开发总结

经过以上对比能够发现,除了文本识别不提供界面外,其处理逻辑大同小异,基本都是传要识别的图像给SDK,而后经过经过函数得到识别的结果,这里最核心的差别在于返回内容的结构化数据不一样,为了便于理解,小编整理了表格出来:

  • 返回内容总结

    服务 返回内容 返回内容说明
    文字识别 MLText text 表示图像检测出的文本信息。包含两个属性:
    1,getStringValue():图像中检测到的全部文本内容;2,getBlocks():图像中检测到的全部文本区块,包含文本内容,文本区块边界和语种等信息。每一个文本块又包含了不少行getContents(),以及行的文本内容getStringValue(),边界getBorder()和语种getLanguageList()等信息,行内又包含了不少个字word,以及字的内容,边界和语种信息
    身份证识别 MLCnIcrCaptureResult idCardResult
     
    public Bitmap cardBitmap 身份证图片
     public String idNum 身份证号码 
    public String name 姓名 
    public String sex 性别
     public String validDate 有效期限
    银行卡识别 MLBcrCaptureResult bankCardResult
     
    public String getNumber() 获取银行卡号。 
    public android.graphics.Bitmap getNumberBitmap() 获取校订后的银行卡号图片。 
    public android.graphics.Bitmap getOriginalBitmap() 获取原始送检的未经校订的银行卡图片。
     
    通用卡证识别 MLGcrCaptureResult cardResult public static final int CAPTURE_CONTINUE 对识别结果不满意,要求继续检测。 
    public static final int CAPTURE_STOP 退出检测并销毁插件页面。 
    public Bitmap cardBitmap 送检的通用卡证图片。
     public MLText text 通用卡证识别结果。和上面的文本识别并没有区别

    经过以上对比能够发现,身份证和银行卡返回的是直接处理好的识别内容,直接经过接口便可获取身份证号码,银行卡号这些信息,而不须要关心这些内容是如何提取出来的,而文本识别和通用卡证识别规则是返回了识别到的全量信息,里面包含了块,行,字等一级级的文本内容,此时若是开发者想获取本身想要的信息,须要针对识别到的全量信息作提取,至少经过正则表达式匹配连续的x位数字识别为卡号,或者匹配识别到的某些关键字后面的内容。

经过以上分析咱们能够得出开发缺点对比:

  • 开发杰出对比总结

    服务 开发难度 开发说明
    文字识别 简单 须要开发者获取图片传给SDK,须要对识别后的结果进行信息提取,提取出本身想要的内容
    通用卡证识别 很简单 直接经过接口便可启动图像获取界面,须要对识别后的结果进行信息提取,提取出本身想要的内容
    身份证识别 极简单 直接经过接口便可启动图像获取界面,直接经过接口获取已经提取好的文字内容,无需后处理
    银行卡识别 极简单 直接经过接口便可启动图像获取界面,直接经过接口获取已经提取好的文字内容,无需后处理

4技术差别分析

经过以上的差别分析,咱们能够看到文本类服务既存在场景,服务集成上的差别,也存在某些关联,某些文本识别和通用卡证识别服务实际上用了相同的通用模型,下面小编前面经过编译依赖分析已经介绍过,文本类服务一般须要集成基础SDK和模型包,有的服务则须要集成插件用于生成校准框,那么模型包又是个什么东西呢?对机器学习有必定了解的小伙伴可能比较清楚,机器学习一般分为收集训练样本,特征捕捉,数据建模,预测等几部分,模型实际上就是机器学习中经过训练样本,特征抽取等动做学习到一个“映射函数”。在华为HMS ML Kit机器学习服务中,仅有这个映射函数还不行,还须要有个东西能够执行它,咱们能够推断框架,还有一些算法须要对图像进行先后处理,某些把图像 为了使理解,咱们统称以上全部内容为模型文件。为了使这些模型文件能够运行在手机上,还须要对这些模型文件进行优化处理,从而在手机终端上进行优化速度,以及同轴模型文件的大小等等。

差别和关联分析

有了以上基础概念介绍,再来看下文本类服各服务间的差别和关联,为了方便理解,小编画了张图,以下所示:

                                                                       文本类服务集成模式解析图

文字识别

使用的是通用文本数据集进行的训练,只要是文本均可以识别,他的优势是适用范围广,灵活度高,只要是文字内容,都可以识别。

通用卡证识别

和文本识别采用的数据集是相同的,所以模型文件也不会重复,只是增长了通用卡证插件,主要的做用是确保用户将卡证对准相机正中位置,另外对反光,模糊图像进行识别和过滤,不知足要求提示用户从新调整,这样就能够提升卡证的识别准确率。

身份证&银行卡识别

身份证,银行卡识别服务,采用了身份证,银行卡的专有数据培训集,咱们都知道该银行卡上的文字跟普通的印刷体问题有很大的区别,并且存在可能的现象,若是使用通用模型的话,则很难达到很是高的准确率,采用银行卡,身份证专有数据集进行训练,可让ID,银行卡识别准确率更高,却没有针对身份证,银行卡作了正确性的识别前处理,能够实时动态检测图像质量和倾斜角度,能够生成对准框用于限制卡证的位置摆放,若是模糊,反光和未对准校准框则提示用户从新对准。

5总结

经过以上分析,总结以下:

尺寸 总结说明
场景

1,文本识别适用范围更普遍,适合任何须要识别文字文本的场景

2,身份证和银行卡识别适用于专门的身份证银行卡识别场景,能够提供超高的识别准确率

3,通用卡证能够适用于全部卡证类的识别场景,而且可以提供相对较高的识别准确率。

服务集成

1,文本类各服务识别内容后返回的结构化数据不一样,银行卡,身份证返回的是通过处理后的结构化数据(如卡号,有效期),可供开发者直接获取使用,通用文本和通用卡证则是返回识别到的全部内容,须要开发者经过必定后处理代码作有效信息提取。

2,银行卡,身份证相对通用卡证和文本识别集成开发更加简单 

3,文本类各服务须要集成不一样的SDK和模型文件

技术差别 1,文本识别和通用卡证识别,使用的是通用模型文件,是经过通用文本数据集进行训练生成的2,银行卡,身份证使用的是专有模型文件,是经过专有的银行卡,身份证数据集训练生成的

怎么样,看完这篇文章后,有什么感想,快来发表你的观点吧

相关文章
相关标签/搜索