前言
在之前的文章《超简单集成华为HMS Core MLKit通用卡证识别SDK,一键实现各种卡绑定》中我们给大家介绍了华为HMS ML Kit通用卡证识别技术是如何通过拍照自动识别卡证上的关键信息从而实现绑卡,那么有的小伙伴可能会问,我想识别账单上的单号信息或者折扣券上的折扣信息可以吗?当然可以啦。在这篇文章里小编将给大家演示HMS ML Kit文本识别技术是怎么实现账单号或者折扣代码自动录入的。
应用场景
文本识别技术的应用场景非常多。比如说扫描下面这张账单,定义账单服务号的开头是“NO.DE SERVICIO”并且服务号是12位字符,就可以很快速地通过文本识别技术得到账单服务号“123456789123”。
或者扫描下面这张折扣券,定义折扣代码的开头是“FAVE-”并且折扣代码是4位字符,一样地,可以通过文本识别技术得到折扣代码“8329”然后完成支付。
怎么样,是不是很方便?软件集成了文本识别技术后,开发者可以自定义需要识别的结构化信息,极大地提升用户的交互体验。
开发实战
本次的开发实战中实现了对账单号的处理,大家可以参考。
1. 开发准备
1.1 项目级gradle里配置Maven仓地址
buildscript {
repositories {
...
maven {url 'https://developer.huawei.com/repo/'}
}
}
dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.3.1.300'
}
allprojects {
repositories {
...
maven {url 'https://developer.huawei.com/repo/'}
}
}
1.2 文件头增加配置
集成SDK后,在文件头添加配置
apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'
1.3 应用级gradle里配置SDK依赖
dependencies {
// 引入基础SDK
implementation 'com.huawei.hms:ml-computer-vision-ocr:2.0.1.300'
// 引入拉丁语文字识别模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:2.0.1.300'
// 引入日韩语文字识别模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:2.0.1.300'
// 引入中英文文字识别模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:2.0.1.300'
}
1. 4 将以下语句添加到AndroidManifest.xml文件中,用于自动更新机器学习模型
<manifest>
...
<meta-data
android:name="com.huawei.hms.ml.DEPENDENCY"
android:value="ocr" />
...
</manifest>
1.5 申请摄像头权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
2.代码开发
2.1初始化创建分析器
//type为识别语言参数设置,中文为:“zh”
MLTextAnalyzer analyzer = new MLTextAnalyzer.Factory(context).setLanguage(type).create();
2.2 设置识别结果处理器,实现分析器与结果处理器的绑定
analyzer.setTransactor(new OcrDetectorProcessor());
2.3 调用同步接口使用SDK内置LensEngine创建对象,并注册分析器,初始化相机参数
lensEngine = new LensEngine.Creator(context, analyzer)
.setLensType(LensEngine.BACK_LENS)
.applyDisplayDimension(width, height)
.applyFps(30.0f)
.enableAutomaticFocus(true)
.create();
2.4调用run方法,启动相机,读取视频流,进行识别
try {
lensEngine.run(holder);
} catch (IOException e) {
// 异常处理逻辑。
Log.e("TAG", "e=" + e.getMessage());
}
2.5 开发者根据需要处理识别结果
public class OcrDetectorProcessor implements MLAnalyzer.MLTransactor<MLText.Block> {
@Override
public void transactResult(MLAnalyzer.Result<MLText.Block> results) {
SparseArray<MLText.Block> items = results.getAnalyseList();
// 开发者根据需要处理识别结果,需要注意,这里只对检测结果进行处理。
// 不可调用ML Kit提供的其他检测相关接口。
…
}
@Override
public void destroy() {
// 检测结束回调方法,用于释放资源等。
}
}
2.6 检测完成,停止分析器,释放检测资源。
if (analyzer != null) {
try {
analyzer.stop();
} catch (IOException e) {
// 异常处理。
}
}
if (lensEngine != null) {
lensEngine.release();
}
demo效果
下面这个demo展示了扫描出行账单,识别账单编号,开发者可根据实际开发需要进行拓展。
当然,除了账单号,文本识别技术还可以扫描其他文本内容,例如下面在这个demo中,扫描折扣代码,可以快速获得线上折扣并完成支付。效果是不是很棒?
更详细的开发指南参考华为开发者联盟官网:华为开发者联盟机器学习服务开发指南
原文链接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0203343372058830370&fid=18
原作者:留下落叶