Android 快速集成文檔校正能力 超簡單


Android 快速集成文檔校正能力 超簡單

前言

在之前的《超簡單集成華為HMS ML Kit文本識別SDK,一鍵實現賬單號自動錄入》文章中,我們給大家介紹了華為HMS ML Kit文本識別技術如何通過拍照自動識別照片中的文本信息。那么有的小伙伴可能會問,如果拍照時不是正對着文本拍攝,拍出來的照片是歪斜的,那么還能准確識別文本嗎?當然可以啦。HMS ML Kit文檔校正技術可以自動識別文檔位置,校正拍攝角度,並且支持用戶自定義邊界點位置,即使在傾斜角度也能夠拍攝出文檔的正面圖像。
在這里插入圖片描述

應用場景

文檔校正技術在生活中有很多的應用場景。比如說在拍攝紙質文檔時,相機處於傾斜的角度,導致閱讀文檔非常不方便。使用文檔校正技術可以把文檔調整到正對的視角,這樣閱讀起來就順利多了。
在這里插入圖片描述

再比如在記錄卡證信息時,使用文檔校正技術,不需要調整到正對卡證的視角,也可以拍攝出卡證的正面照片。
在這里插入圖片描述

另外,在行程中因為身處於傾斜位置,道路旁的路牌難以准確識別,這時可以通過文檔校正技術拍攝到路牌正面圖片。
在這里插入圖片描述

怎么樣,是不是很方便呢?那我們接下來詳細給大家介紹安卓如何快速集成文檔校正技術。

開發實戰

詳細的准備步驟可以參考華為開發者聯盟:
https://developer.huawei.com/consumer/cn/doc/development/HMS-Guides/ml-process-4
這里列舉關鍵的開發步驟。

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 應用級gradle里配置SDK依賴

    dependencies{
             // 引入基礎SDK
            implementation 'com.huawei.hms:ml-computer-vision-documentskew:2.0.2.300'
            // 引入文檔檢測/校正模型包
           implementation 'com.huawei.hms:ml-computer-vision-documentskew-model:2.0.2.300'
    }

1.3 在文件頭添加配置

    apply plugin: 'com.huawei.agconnect'
    apply plugin: 'com.android.application'

1.4 添加如下語句到AndroidManifest.xml文件中,自動更新機器學習模型到設備

    <meta-data
    android:name="com.huawei.hms.ml.DEPENDENCY" 
    android:value= "dsc"/>

1.5 申請攝像機權限和讀本地圖片權限

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

2. 代碼開發

2.1 創建文本框檢測/校正分析器

MLDocumentSkewCorrectionAnalyzerSetting setting = new MLDocumentSkewCorrectionAnalyzerSetting.Factory().create();
MLDocumentSkewCorrectionAnalyzer analyzer =                 MLDocumentSkewCorrectionAnalyzerFactory.getInstance().getDocumentSkewCorrectionAnalyzer(setting);

2.2 通過android.graphics.Bitmap創建MLFrame對象用於分析器檢測圖片,支持的圖片格式包括:jpg/jpeg/png,建議圖片尺寸不小於320320像素,不大於19201920像素。

MLFrame frame = MLFrame.fromBitmap(bitmap);

2.3 調用asyncDocumentSkewDetect異步方法或analyseFrame同步方法進行文本框的檢測。當返回碼是MLDocumentSkewCorrectionConstant.SUCCESS時,將會返回文本框的四個頂點的坐標值,該坐標值是相對於傳入圖像的坐標,若與設備坐標不一致,需調用者進行轉換;否則,返回的數據沒有意義。

        // asyncDocumentSkewDetect異步調用。
        Task<MLDocumentSkewDetectResult> detectTask = analyzer.asyncDocumentSkewDetect(mlFrame);
        detectTask.addOnSuccessListener(new OnSuccessListener<MLDocumentSkewDetectResult>() {
                @Override
                public void onSuccess(MLDocumentSkewDetectResult detectResult) {
                        // 檢測成功。
                }
        }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(Exception e) {
                      // 檢測失敗。
                 }
         })
   
          // analyseFrame同步調用。
          SparseArray<MLDocumentSkewDetectResult> detect = analyzer.analyseFrame(mlFrame);
          if (detect != null && detect.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {
                  // 檢測成功。
          } else {
                  // 檢測失敗。
          }

2.4 檢測成功后,分別獲取文本框四個頂點的坐標數據,然后以左上角為起點,按順時針方向,分別把左上角、右上角、右下角、左下角加入到列表(List )中,最后構建MLDocumentSkewCorrectionCoordinateInput對象。

2.4.1 如果使用analyseFrame同步調用,先獲取到檢測結果,如下所示(使用asyncDocumentSkewDetect異步調用可忽略此步驟直接進行步驟2.4.2):

MLDocumentSkewDetectResult detectResult = detect.get(0);

2.4.2 獲取文本框四個頂點的坐標數據並構建MLDocumentSkewCorrectionCoordinateInput對象:

 Point leftTop = detectResult.getLeftTopPosition();
    Point rightTop = detectResult.getRightTopPosition();
    Point leftBottom = detectResult.getLeftBottomPosition();
    Point rightBottom = detectResult.getRightBottomPosition();
    List<Point> coordinates = new ArrayList<>();
    coordinates.add(leftTop);
    coordinates.add(rightTop);
    coordinates.add(rightBottom);
    coordinates.add(leftBottom);
    MLDocumentSkewCorrectionCoordinateInput coordinateData = new MLDocumentSkewCorrectionCoordinateInput(coordinates);

2.5 調用asyncDocumentSkewCorrect異步方法或syncDocumentSkewCorrect同步方法進行文本框的校正。

// asyncDocumentSkewCorrect異步調用。
Task<MLDocumentSkewCorrectionResult> correctionTask = analyzer.asyncDocumentSkewCorrect(mlFrame, coordinateData);
 correctionTask.addOnSuccessListener(new OnSuccessListener<MLDocumentSkewCorrectionResult>() {
        @Override
        public void onSuccess(MLDocumentSkewCorrectionResult refineResult) {
                // 檢測成功。
         }
 }).addOnFailureListener(new OnFailureListener() {
         @Override
         public void onFailure(Exception e) {
                // 檢測失敗。
          }
  });
  
 // syncDocumentSkewCorrect同步調用。
SparseArray<MLDocumentSkewCorrectionResult> correct= analyzer.syncDocumentSkewCorrect(mlFrame, coordinateData);
 if (correct != null && correct.get(0).getResultCode() == MLDocumentSkewCorrectionConstant.SUCCESS) {
           // 校正成功。
} else {
          // 校正失敗。
}

2.6 檢測完成,停止分析器,釋放檢測資源。

if (analyzer != null) {
        analyzer.stop();
}

Demo效果

下面這個demo展示了在傾斜角度掃描文檔,文檔校正技術可以把文檔調整到正對視角。效果是不是很棒?

在這里插入圖片描述

文檔校正技術還可以輔助文檔識別技術,將傾斜的文檔調整到正面視角,快速實現從紙質文件到電子文件的轉化,大幅度提升信息的錄入效率。

Github源碼

https://github.com/HMS-Core/hms-ml-demo/blob/master/MLKit-Sample/module-text/src/main/java/com/mlkit/sample/activity/DocumentSkewCorretionActivity.java

更詳細的開發指南參考華為開發者聯盟官網

https://developer.huawei.com/consumer/cn/hms/huawei-mlkit

欲了解更多詳情,請參閱:
華為開發者聯盟官網:https://developer.huawei.com/consumer/cn/hms
獲取開發指導文檔:https://developer.huawei.com/consumer/cn/doc/development
參與開發者討論請到Reddit社區:https://www.reddit.com/r/HMSCore/
下載demo和示例代碼請到Github:https://github.com/HMS-Core
解決集成問題請到Stack Overflow:https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest


文章來源:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202344452930050418&fid=18
作者:留下落葉


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM