二維碼污損、反光、距離遠還能掃出來嗎?統一掃碼服務告訴你,能!

来源:https://www.cnblogs.com/hmscore/archive/2022/05/27/16316302.html
-Advertisement-
Play Games

二維碼和條形碼從發明到發展已經過去了幾十年,因其能快捷方便讀取信息的特點,在數字經濟時代被廣泛應用。掃描二維碼可以識別健康狀況,識別身份信息、訪問網站鏈接、完成金融支付等等,已經成為生活中不可或缺的實用技術,所以很多App都搭載了“掃一掃”功能。 然而,在日常掃碼過程中,我們也經常會遇到掃碼環境暗、 ...


二維碼和條形碼從發明到發展已經過去了幾十年,因其能快捷方便讀取信息的特點,在數字經濟時代被廣泛應用。掃描二維碼可以識別健康狀況,識別身份信息、訪問網站鏈接、完成金融支付等等,已經成為生活中不可或缺的實用技術,所以很多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;
@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) {
        // 調用掃碼介面,構建掃碼能力。
        ...
    }
}

構建掃碼功能

  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. 實現回調介面接收掃碼結果,相機掃碼和導入圖片掃碼均通過該介面返回。
@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);
         }
    }
}

瞭解更多詳情>>

訪問華為開發者聯盟官網
獲取開髮指導文檔
華為移動服務開源倉庫地址:GitHubGitee

關註我們,第一時間瞭解 HMS Core 最新技術資訊~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 掌握$I^2C$的通訊方法和時序,通過串口發送數據,單片機接收並存入AT24C02首地址中。按下按鍵BTN,單片 ...
  • 思路: 1、socket 建立一個數據報套接字。 2、定義一個struct ifreq ifr 結構體。將網路名稱如“eth0” 賦值給ifr結構體的ifr.ifr_name。 3、調用ioctl(sockfd, SIOCGIFFLAGS, &ifr) 獲取網路標識。 如需設置網路標識,更改ifr結 ...
  • teacher表: iddeptnamephonemobile 101 1 Shrivell 2753 07986 555 1234 102 1 Throd 2754 07122 555 1920 103 1 Splint 2293 104 Spiregrain 3287 105 2 Cutflow ...
  • 本文介紹如何使用 SELECT 語句查詢 SQL 如何對錶進行創建、更新和刪除操作 中創建的 Product 表中數據。這裡使用的 SELECT 語句是 SQL 最基本也是最重要的語句。 請大家在實際運行本文中的 SELECT 語句時,親身體驗一下其書寫方法和執行結果。 執行查詢操作時可以指定想要查 ...
  • 1 Hadoop介紹 Hadoop是Apache旗下的一個用java語言實現開源軟體框架,是一個開發和運行處理大規模數據的軟體平臺。允許使用簡單的編程模型在大量電腦集群上對大型數據集進行分散式處理。狹義上說,Hadoop指Apache這款開源框架,它的核心組件有: HDFS(分散式文件系統):解決 ...
  • 最近在數據處理中用到了窗函數, 把使用方法記錄一下, 暫時只有分組排序和滑動時間視窗的例子, 以後再逐步添加. 在SQL查詢時, 會遇到有兩類需要分組統計的場景, 在之前的SQL語法中是不方便實現的. 使用窗函數直接SQL中使用窗函數就能解決這些問題, 否則需要使用臨時表, 函數或存儲過程進行處理.... ...
  • 本文介紹如何使用 CREATE DATABASE 語句創建資料庫、 CREATE TABLE 語句創建表、ALTER TABLE 語句更新表、DROP TABLE 語句刪除表。 一、表的創建 本節要點 表通過 CREATE TABLE 語句創建而成。 表和列的命名要使用有意義的文字。 指定列的數據類 ...
  • 5月24日,由華為開發者聯盟主辦的HUAWEI Developer Day(華為開發者日,簡稱HDD)線上沙龍·創新開發專場在華為開發者學堂及各大直播平臺與廣大開發者見面。直播內容主要聚焦HarmonyOS和HMS生態應用開發,帶來關於HarmonyOS服務卡片、HMS Core開放能力、應用高效開 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...