HarmonyOS之AI能力·文档检测校正
生活随笔
收集整理的這篇文章主要介紹了
HarmonyOS之AI能力·文档检测校正
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、基本概念
- 文檔校正提供了文檔翻拍過程的輔助增強功能,包含兩個子功能:文檔檢測和文檔校驗。
- 文檔檢測:能夠自動識別圖片中的文檔,返回文檔在原圖中的位置信息。這里的文檔泛指外形方正的事物,比如書本、相片、畫框等。
- 文檔校正:能根據文檔在原始圖片中的位置信息校正文檔的拍攝角度,自動將拍攝視角調整到正對文檔的角度上。
二、運作機制
① 文檔檢測
- 調用文檔檢測接口,識別圖片中的文檔,返回文檔在原圖中的位置信息;
- 如下圖中的紅點所示,文檔檢測接口返回了圖中相片文檔四個頂點相對圖像左上角的坐標信息:
- 文檔檢測結果如下,該 JSON 保存了原圖中相片文檔四個角相對原圖左上頂點的坐標信息(單位:像素),其中 resultCode 為返回碼:
② 文檔校正
- 根據文檔在原始圖片中的位置信息校正文檔的拍攝角度(可自定義校正的區域)。
- 圖片中的校正區域:
- 校正上圖中深藍色矩形(文檔檢測接口返回的文檔區域)區域,校正后的效果如下圖:
③ 使用限制
- 支持處理的圖片格式包括 JPEG、JPG、PNG,最終輸出的圖片僅支持 JPEG 格式。
- 拍攝時盡量將文檔放置在與文檔背景色有一定色差的平面上,并盡量讓文檔充滿畫面,保持文檔邊界入鏡,以獲得最佳效果。
- 輸入圖片高和寬最小為 100 像素,最大為 10000 像素。
三、應用場景
- 將紙質信件等舊文檔翻拍成電子版,幫助改善舊文檔的翻拍效果。
- 記錄書畫展覽中的精彩作品,幫助將作品拍攝得更加端正。
四、API 說明
- 文檔校正提供了 setVisionConfiguration()、docDetect() 和 docRefine() 三個函數接口。
- setVisionConfiguration 是 IDocRefine 接口的成員,通過傳入的 DocRefineConfiguration,選擇需要調用的文檔校正類型:
- DocRefineConfiguration 的常用設置:
| setProcessMode() | mode | int | 進程模式定義: VisionConfiguration.MODE_IN(同進程調用) VisionConfiguration.MODE_OUT(跨進程調用) 默認值為VisionConfiguration.MODE_OUT |
- 調用 IDocRefine的docDetect() 方法,獲取檢測結果:
- 說明:
-
- image 為待文檔檢測的輸入圖片。
-
- 如果 visionCallback 為 null,執行同步調用,結果碼由方法返回,檢測結果由 result 中返回。
-
- 如果 visionCallback 為有效的回調函數,則該函數為異步調用,函數返回時 result 中的值無效,實際識別結果由回調函數返回。
-
- 同步模式調用成功時,該函數返回結果碼 0。異步模式調用請求發送成功時,該函數返回結果碼 700。
- 調用 IDocRefine 的 docRefine() 方法,獲取校正結果:
- 說明:
-
- image 為待文檔校正的輸入圖片。
-
- 如果 visionCallback 為 null,執行同步調用,結果碼由方法返回,校正結果由 result 中返回。
-
- 如果 visionCallback 為有效的回調函數,則該函數為異步調用,函數返回時 result 中的值無效,實際識別結果由回調函數返回。
-
- 同步模式調用成功時,該函數返回結果碼 0。異步模式調用請求發送成功時,該函數返回結果碼 700。
五、開發流程
- 在使用文檔校正時,先將相關的類添加至工程:
- 定義 ConnectionCallback 回調,實現連接能力引擎成功與否后的操作:
- 調用 VisionManager.init() 方法,將此工程的 context 和已經定義的 connectionCallback 作為入參,建立與能力引擎的連接,context 應為 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的實例或子類實例:
- 實例化 IDocRefine 接口,將此工程的 context 作為入參,context 應為 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的實例或子類實例:
- 實例化 VisionImage 對象 image,并傳入待校正圖片 pixelMap:
- 實例化 DocCoordinates 對象 docCoordinates:
- (可選)定義 VisionCallback 回調:
-
- 在異步模式下,該類的 onResult() 方法用于獲得檢測的結果 docCoordinates(內含檢測到的文檔坐標);onError() 方法用于處理錯誤返回碼;onProcessing() 方法用于返回處理進度,目前沒有實現此接口的功能。
-
- 同步與異步模式區別在于 docDetect() 的最后一個參數 visionCallback 是否為空。若非空則為異步模式,此時會忽略自定義的 DocCoordinates 輸入 docCoordinates,接口調用結果一律從回調函數visionCallback 獲得。
- 實例化 ImageResult 對象 imageResult:
- (可選)定義 VisionCallback 回調:
-
- 在異步模式下,該類的 onResult() 方法用于獲得校正的結果 imageResult(內含校正后的圖片);onError() 方法用于處理錯誤返回碼;onProcessing() 方法用于返回處理進度,目前沒有實現此接口的功能。
-
- 同步與異步模式區別在于 docRefine() 的最后一個參數 visionCallback 是否為空。若非空則為異步模式。此時會忽略自定義的 ImageResult 輸入 imageResult,接口調用結果一律從回調類 visionCallback 獲得。
- 通過 DocRefineConfiguration 配置校正參數,可選擇進程調用模式等(推薦使用MODE_IN同進程模式),跨進程模式(MODE_OUT)下調用方與能力引擎處于不同進程;同進程模式(MODE_IN)下,能力引擎在調用方進程中實例化,調用方通過反射的方式調用引擎里的文檔校正能力。以同進程調用為例:
- (可選)調用 IDocRefine的prepare() 方法:
- 調用 IDocRefine 的 docDetect() 方法:
-
- 同步模式調用完成時,該函數立即返回結果碼。
-
- 異步模式調用請求發送成功時,該函數返回結果碼700。如果返回其他的值,說明異步調用請求不成功,需要先處理錯誤,回調函數不會被調用。
-
- 如果異步模式調用請求發送成功,則檢測完成后,相應的回調函數會被自動調用。
-
-
- 如果 onResult() 回調被調用,說明檢測成功,相當于同步模式結果碼為0的情況。
-
-
-
- 如果 onError() 方法被調用,說明檢測發生了錯誤,具體的調用結果碼將由 onError() 的參數接收。
-
- 調用 IDocRefine的docRefine() 方法:
-
- 同步模式調用完成時,該函數立即返回結果碼。
-
- 異步模式調用請求發送成功時,該函數返回結果碼700。如果返回其他的值,說明異步調用請求不成功,需要先處理錯誤,回調函數不會被調用。
-
- 如果異步模式調用請求發送成功,則校正完成后,相應的回調函數會被自動調用。
-
-
- 如果 onResult() 回調被調用,說明校正成功,相當于同步模式結果碼為0的情況。
-
-
-
- 如果 onError() 方法被調用,說明校正發生了錯誤,具體的調用結果碼將由 onError() 的參數接收。
-
- 調用 IDocRefine的release() 方法,釋放資源,調用 pixelMap 的 release() 方法,釋放圖片內存:
- 調用 VisionManager.destroy() 方法,斷開與能力引擎的連接:
- 結果碼定義如下表:
| 0 | 成功 |
| -1 | 未知錯誤 |
| -2 | 不支持的功能或接口 |
| -3 | 內存分配失敗或創建對象失敗 |
| -4 | 所需庫加載失敗 |
| -10 | 引擎開關已經關閉 |
| 101 | 失敗 |
| 102 | 超時 |
| 200 | 輸入參數不合法(圖片尺寸錯誤) |
| 201 | 輸入參數不合法(為空) |
| 210 | 輸入參數合法 |
| 500 | 服務綁定異常 |
| 521 | 服務綁定異常斷開 |
| 522 | 服務已連接 |
| 600 | 模型文件異常 |
| 601 | 模型文件不存在 |
| 602 | 模型加載失敗 |
| 700 | 異步調用請求發送成功 |
| 1001 | 神經網絡處理單元錯誤 |
總結
以上是生活随笔為你收集整理的HarmonyOS之AI能力·文档检测校正的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HarmonyOS之AI能力·助手类意图
- 下一篇: HarmonyOS之AI能力·分词