二维码和条形码从发明到发展已经过去了几十年,因其能快捷方便读取信息的特点,在数字经济时代被广泛应用。扫描二维码可以识别健康状况,识别身份信息、访问网站链接、完成金融支付等等,已经成为生活中不可或缺的实用技术,所以很多App都搭载了“扫一扫”功能。
然而,在日常扫码过程中,我们也经常会遇到扫码环境暗、二维码污损、模糊等情况,导致识别二维码困难。HMS Core 统一扫码服务(Scan Kit)为常见复杂扫码场景(如反光、暗光、污损、模糊、柱面)做了针对性识别优化,还能实现远距离码或小型码的检测和自动放大,提升扫码成功率与用户体验。
1.远距离扫码
普通的二维码扫描器只读距离不超过30厘米,然而我们生活中经常出现远距离扫码的情况,例如停车场远距离扫码缴费、公众场合扫码签到等,普通的扫码服务在这时候就会出现扫码困难的情况。统一扫码服务,由于在扫码处理流程中多了一个预检测的功能,即使是肉眼无法分辨,也可以很好的自动放大超远距离的二维码。
2.二维码污损
二维码污损也是户在日常扫码中经常遇到的情况,比如扫码骑行时遇到二维码破损,扫描纸质二维码因为纸张破损二维码不完整的情况也常有出现,统一扫码服务基于多项计算机视觉技术,可以大幅提升复杂场景识别率。
当然,HMS Core 统一扫码服务除了支持污损二维码扫描,遇到反光,暗光等场景,甚至将二维码贴在商品上时出现曲面或棱角的情况,也能成功扫码;哪怕你边走动边扫码,此时的二维码模糊不清也不影响扫码的准确率。
3.多码识别
在仓库清点、收发货物时,常常遇到摆满了货物,上面都贴上条形码的情况,如果工人一个个扫码清点,效率非常低。多码识别可以帮助仓库清点,快递收发等场景实现一次识别多个码,提升业务处理效率。多码识别模式下,Scan Kit一次最多可以同时识别不限种类的5个码。
4.多角度扫码
有时由于环境的限制,我们不一定能扫到正面角度的二维码, 统一扫码服务基于自动检测及旋转纠正能力,识别区域更宽(侧面和侧面+45°),支持用户从任意角度扫码,可自动校正快速识别二维码,即使位置不方便也能正确识别,从而提升应用扫码灵活度和识别率。
开发步骤
统一扫码服务提供多元的接入方式,最少5行代码即可拥有强大的扫码能力,开发者可以直接使用Scan Kit提供的默认扫码页面,也可以基于Scan Kit提供的示例代码,快速自定义扫码功能。以下我会以Default View Mode为例,展示具体的集成步骤。
开发前准备
- 在项目级”setting.gradle”中配置HMS Core maven仓地址
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
// 配置HMS Core SDK的Maven仓地址。
maven { url 'https://developer.huawei.com/repo/' }
}
}
dependencyResolutionManagement {
...
repositories {
google()
mavenCentral()
// 配置HMS Core SDK的Maven仓地址。
maven { url 'https://developer.huawei.com/repo/' }
}
} 2.在应用级的build.gradle上添加编译依赖dependencies{
implementation 'com.huawei.hms:scanplus:2.4.0.302'
}
-ignorewarnings
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.**{*;}
- 在“AndroidManifest.xml”中指定相机权限和文件读取权限,并动态申请权限
<!--相机权限-->
<uses-permission android:name="android.permission.CAMERA" />
<!--读文件权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
// CAMERA_REQ_CODE为用户自定义,用于接收权限校验结果的请求码。
this.requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, CAMERA_REQ_CODE);
// 实现“onRequestPermissionsResult”函数接收校验权限结果。
final int PERMISSIONS_LENGTH = 2;
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// 判断“requestCode”是否为申请权限时设置请求码CAMERA_REQ_CODE,然后校验权限开启状态。
if (requestCode == CAMERA_REQ_CODE && grantResults.length == PERMISSIONS_LENGTH && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
// 调用扫码接口,构建扫码能力。
...
}
} 构建扫码功能
// “QRCODE_SCAN_TYPE”和“DATAMATRIX_SCAN_TYPE”表示只扫描QR和Data Matrix的码
HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE, HmsScan.DATAMATRIX_SCAN_TYPE).create();
- 调用ScanUtil的静态方法startScan启动Default View扫码页面。用户可以使用相机扫码,也可以通过该页面的“导入图片”按钮检测图片中的码。
ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, options);
- 实现回调接口接收扫码结果,相机扫码和导入图片扫码均通过该接口返回。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK || data == null) {
return;
}
if (requestCode == REQUEST_CODE_SCAN_ONE) {
// 导入图片扫描返回结果
HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
if (obj != null) {
// 展示解码结果
showResult(obj);
}
}
} 了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
|