二维码和条形码从创造到倒退曾经过来了几十年,因其能快捷不便读取信息的特点,在数字经济时代被广泛应用。扫描二维码能够辨认健康状况,辨认身份信息、拜访网站链接、实现金融领取等等,曾经成为生存中不可或缺的实用技术,所以很多App都搭载了“扫一扫”性能。

然而,在日常扫码过程中,咱们也常常会遇到扫码环境暗、二维码污损、含糊等状况,导致辨认二维码艰难。HMS Core 对立扫码服务(Scan Kit)为常见简单扫码场景(如反光、暗光、污损、含糊、柱面)做了针对性辨认优化,还能实现远距离码或小型码的检测和主动放大,晋升扫码成功率与用户体验。

1. 远距离扫码

一般的二维码扫描器只读间隔不超过30厘米,然而咱们生存中经常出现远距离扫码的状况,例如停车场远距离扫码缴费、公众场合扫码签到等,一般的扫码服务在这时候就会呈现扫码艰难的状况。对立扫码服务,因为在扫码解决流程中多了一个预检测的性能,即便是肉眼无奈分辨,也能够很好的主动放大超远距离的二维码。

2. 二维码污损

二维码污损也是户在日常扫码中常常遇到的状况,比方扫码骑行时遇到二维码破损,扫描纸质二维码因为纸张破损二维码不残缺的状况也常有呈现,对立扫码服务基于多项计算机视觉技术,能够大幅晋升简单场景识别率。

当然,HMS Core 对立扫码服务除了反对污损二维码扫描,遇到反光,暗光等场景,甚至将二维码贴在商品上时呈现曲面或棱角的状况,也能胜利扫码;哪怕你边走动边扫码,此时的二维码模糊不清也不影响扫码的准确率。

3. 多码辨认

在仓库盘点、收发货物时,经常遇到摆满了货物,下面都贴上条形码的状况,如果工人一个个扫码盘点,效率非常低。多码辨认能够帮忙仓库盘点,快递收发等场景实现一次辨认多个码,晋升业务解决效率。多码识别模式下,Scan Kit一次最多能够同时辨认不限品种的5个码。

4. 多角度扫码

有时因为环境的限度,咱们不肯定能扫到侧面角度的二维码, 对立扫码服务基于自动检测及旋转纠正能力,辨认区域更宽(侧面和侧面+45°),反对用户从任意角度扫码,可主动校对疾速辨认二维码,即便地位不不便也能正确辨认,从而晋升利用扫码灵便度和识别率。

开发步骤

对立扫码服务提供多元的接入形式,起码5行代码即可领有弱小的扫码能力,开发者能够间接应用Scan Kit提供的默认扫码页面,也能够基于Scan Kit提供的示例代码,疾速自定义扫码性能。以下我会以Default View Mode为例,展现具体的集成步骤。

开发前筹备

  1. 在我的项目级”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'  }
  1. 配置混同脚本
-ignorewarnings -keepattributes *Annotation*  -keepattributes Exceptions  -keepattributes InnerClasses  -keepattributes Signature  -keepattributes SourceFile,LineNumberTable  -keep class com.hianalytics.android.**{*;}  -keep class com.huawei.**{*;}
  1. 在“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);
  1. 校验是否开启相应的权限,决定是否持续扫码。
// 实现“onRequestPermissionsResult”函数接管校验权限后果。final int PERMISSIONS_LENGTH = 2;@Overridepublic 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) {        // 调用扫码接口,构建扫码能力。        ...    }}

构建扫码性能

  1. 依据理论需要创立扫码选项参数。
// “QRCODE_SCAN_TYPE”和“DATAMATRIX_SCAN_TYPE”示意只扫描QR和Data Matrix的码HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE, HmsScan.DATAMATRIX_SCAN_TYPE).create();
  1. 调用ScanUtil的静态方法startScan启动Default View扫码页面。用户能够应用相机扫码,也能够通过该页面的“导入图片”按钮检测图片中的码。
ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, options);
  1. 实现回调接口接管扫码后果,相机扫码和导入图片扫码均通过该接口返回。
@Overrideprotected 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 最新技术资讯~