很简单,身份证、银行卡识别肯定选身份证识别服务、银行卡识别服务啦,其他卡证类的识别就用通用卡证识别,剩下的场景就用文本识别服务。
3 服务集成差异 3.1 编译依赖差异 为了便于大家理解,先解释下如下几个概念:
基础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\'
3.2 编译依赖总结
通过以上编译依赖可以看出,所有的服务均需要集成对应基础SDK和模型包,但身份证识别、银行卡识别以及通用卡证识别都有对应的插件,也就是前面讲到的校准框。模型方面,身份证识别和银行卡识别都使用了专有的模型包,而通用卡证识别则使用了通用模型包。
3.3 开发差异 先分别看下都是怎么集成的,详细步骤就不在细数了,大家可以直接到开发者联盟上查看对应服务的开发步骤
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-introduction-4
在这里简单总结下对应服务的开发步骤:
文本识别创建识别器 MLTextAnalyzer analyzer =
MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);
创建fram对象,传入图像bitmap MLFrame frame = MLFrame.fromBitmap(bitmap);
把frame对象传给识别器进行识别 Task task = analyzer.asyncAnalyseFrame(frame);
结果处理Task task = analyzer.asyncAnalyseFrame(frame); task.addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(MLText text) { // 识别成功。 } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { // 识别失败。 } });
身份证识别启动界面进行身份证识别 private void startCaptureActivity(MLCnIcrCapture.Callback callback, boolean isFront, boolean isRemote)