查看华为开发者联盟网站的机器学习服务业务介绍(https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-introduction-4)html
能够看到华为HMS把机器学习服务分红了文本类、语言类、图片类、人脸人体类四大服务,后面新特性也在不断增长中,其中有一类是文本类服务,文本类服务里面又含了文本识别、文档识别、身份证识别、银行卡识别、通用卡证识别,这些子服务之间都有哪些差别和关联呢,可能不少小伙伴会傻傻分不清,今天小编重点剖析下文本类服务,来看下这几个子服务间的差别和关联。android
首先看下文本类服务包含的子服务内容和对应的场景差别git
服务 | 场景差别 | 说明 |
---|---|---|
文本识别 | 稀疏的文本,收据、名片 | 支持的识别范围和场景"广",啥都能识别,只要是拉丁字符、日韩、中英的文字均可以识别。 |
文档识别 | 含有文档的密集文本图片,好比文章、合同等 | 须要识别出带段落格式的文本信息,此处须要借助云端的运算能力,有更加普遍的语言种类支持能力。 |
身份证识别 | 中国大陆二代身份证识别 | 支持的识别范围和场景很”专“,只识别大陆身份证,准确率高。 |
银行卡识别 | 全球常见的银行卡(银联、运通、万事达、Visa、JCB)卡号等关键信息识别 | 支持的识别范围和场景很”专“,只识别银行卡,准确率高。 |
通用卡证识别 | 任意固定板式的卡证,好比会员卡、通行证、工卡等 | 支持和识别范围和场景介于文本识别和身份证、银行卡识别之间,只要是卡证均可以进行识别。 |
文本类服务SDK有设备端API和云侧API接口两种,github
设备端的API只在设备端进行处理和分析,使用的是设备自身CPU、GPU等器件的算力,云端的API则须要把数据送到云端,利用云端的服务器资源进行处理和分析,以上服务除了文档识别因为计算量较大须要在云端进行处理外,其余服务均有设备端API,本次为了简化分析的范围,咱们只讲设备端API服务部分。正则表达式
经过以上对比表格咱们能够看到,不一样能力对应的应用场景是有所不一样的:算法
很简单,身份证、银行卡识别确定选身份证识别服务、银行卡识别服务啦,其余卡证类的识别就用通用卡证识别,剩下的场景就用文本识别服务。服务器
为了便于你们理解,先解释下以下几个概念:
框架
基础SDK
相关服务对开发者呈现的接口,全部的API经过基础SDK对外开放。机器学习
插件
就是前面场景对比总结中讲到的校准框,提供界面用于对图像帧的输入质量作校验,不知足要求的能够提示用户从新摆放。async
模型包
这个是华为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
在这里简单总结下对应服务的开发步骤:
经过以上对比能够发现,除了文本识别不提供界面外,其处理逻辑大同小异,基本都是传要识别的图像给SDK,而后经过回调函数得到识别的结果,这里最核心的差别在于返回内容的结构化数据不一样,为了便于理解,小编整理了表格出来:
返回内容总结:
服务 | 返回内容 | 返回内容说明 |
---|---|---|
文本识别 | MLText text | 表示图像检测出的文本信息。包含两个属性:一、getStringValue():图像中检测到的全部文本内容;二、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 intCAPTURE_CONTINUE 对识别结果不满意,要求继续检测。public static final int CAPTURE_STOP 退出检测并销毁插件页面。public Bitmap cardBitmap 送检的通用卡证图片。public MLText text 通用卡证识别结果。和上面的文本识别并没有区别 |
经过以上对比能够发现,身份证和银行卡返回的是直接处理好的识别内容,直接经过接口便可获取身份证号码、银行卡号这些信息,而不须要关心这些内容是如何提取出来的,而文本识别和通用卡证识别则是返回了识别到的全量信息,里面包含了块、行、字等一级级的文本内容,此时若是开发者想获取本身想要的信息,须要针对识别到的全量信息作提取,好比经过正则表达式匹配连续的x位数字识别为卡号,或者匹配识别到的某一关键字后面的内容。
经过以上分析咱们能够得出开发难度对比:
开发难度对比总结
服务 | 开发难度 | 开发说明 |
---|---|---|
文本识别 | 简单 | 须要开发者获取图片传给SDK,须要对识别后的结果进行信息提取,提取出本身想要的内容 |
通用卡证识别 | 很简单 | 直接经过接口便可启动图像获取界面,须要对识别后的结果进行信息提取,提取出本身想要的内容 |
身份证识别 | 极简单 | 直接经过接口便可启动图像获取界面,直接经过接口获取已经提取好的文字内容,无需后处理 |
银行卡识别 | 极简单 | 直接经过接口便可启动图像获取界面,直接经过接口获取已经提取好的文字内容,无需后处理 |
经过以上的差别分析,咱们能够看到文本类服务既存在场景、服务集成上的差别,也存在某些关联,好比文本识别和通用卡证识别服务实际上用了相同的通用模型,下面小编从技术上来对以上的差别作一些分析和解释。前面经过编译依赖分析已经介绍过,文本类服务一般须要集成基础SDK和模型包,有的服务则须要集成插件用于生成校准框,那么模型包又是个什么东西呢?对机器学习有必定了解的小伙伴可能比较清楚,机器学习一般分为收集训练样本、特征抽取、数据建模、预测等几部分,模型实际上就是机器学习中经过训练样本、特征抽取等动做学习到的一个“映射函数”。在华为HMS ML Kit机器学习服务中,仅仅有这个映射函数还不行,还须要有个东西能够执行它,咱们能够称之为推理框架,此外还有一些算法须要对图像进行先后处理,好比把图像帧转换为对应的特征向量。为了便于理解,咱们统称以上全部内容为模型文件。为了使这些模型文件能够运行在手机上,还须要对这些模型文件进行优化处理,好比优化在手机终端上的运行速度,以及减少模型文件的大小等等。
有了以上基础概念介绍,再来看下文本类服各服务间的差别和关联,为了方便理解,小编画了张图,以下所示:
文本识别
使用的是通用文本数据集进行的训练,只要是文本均可以识别,他的优势是适用范围广,灵活度高,只要是文字内容,都可以识别。
通用卡证识别
和文本识别采用的数据集是相同的,所以模型文件也并没有差异,只是增长了通用卡证插件,主要的做用是确保用户将卡证对准相机正中位置,另外对反光、模糊图像进行识别和过滤,不知足要求提示用户从新调整,这样就能够提升卡证的识别准确率。
身份证&银行卡识别
身份证、银行卡识别服务,采用了身份证、银行卡的专有数据训练集,咱们都知道诸如银行卡上的文字跟普通的印刷体问题有很大差异,并且存在凸起现象,若是使用通用模型的话,则很难达到很是高的准确率,采用银行卡、身份证专有数据集进行训练,可让身份证、银行卡识别准确率更高,此外还针对身份证、银行卡作了针对性的识别前处理,好比能够实时动态检测图像质量和倾斜角度,能够生成对准框用于限制卡证的位置摆放,若是模糊、反光和未对准校准框则提示用户从新对准。
经过以上分析,总结以下:
维度 | 总结说明 |
---|---|
场景 | 一、文本识别适用范围更普遍,适合任何须要识别文字文本的场景二、身份证&银行卡识别适用于专门的身份证银行卡识别场景,能够提供超高的识别准确率三、通用卡证能够适用于全部卡证类的识别场景,而且可以提供相对较高的识别准确率。 |
服务集成 | 一、文本类各服务识别内容后返回的结构化数据不一样,银行卡、身份证返回的是通过处理后的结构化数据(如卡号、有效期),可供开发者直接获取使用,通用文本和通用卡证则是返回识别到的全部内容,须要开发者经过必定后处理代码作有效信息提取。二、银行卡、身份证相对通用卡证和文本识别集成开发更加简单 三、文本类各服务须要集成不一样的SDK和模型文件 |
技术差别 | 一、文本识别和通用卡证识别,使用的是通用模型文件,是经过通用文本数据集进行训练生成的 二、银行卡、身份证使用的是专有模型文件,是经过专有的银行卡、身份证数据集训练生成的 |
怎么样,看完这篇文章后,有什么感想,快来发表你的观点吧!
DemoGithub地址:https://github.com/HMS-MLKit/HUAWEI-HMS-MLKit-Sample
往期连接:Android | 带你零代码实现安卓扫码功能
内容来源:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201209905778120045&fid=18 原做者:AI_talking