日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

HarmonyOS之AI能力·文档检测校正

發布時間:2024/5/21 ChatGpt 114 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HarmonyOS之AI能力·文档检测校正 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、基本概念

  • 文檔校正提供了文檔翻拍過程的輔助增強功能,包含兩個子功能:文檔檢測和文檔校驗。
  • 文檔檢測:能夠自動識別圖片中的文檔,返回文檔在原圖中的位置信息。這里的文檔泛指外形方正的事物,比如書本、相片、畫框等。
  • 文檔校正:能根據文檔在原始圖片中的位置信息校正文檔的拍攝角度,自動將拍攝視角調整到正對文檔的角度上。

二、運作機制

① 文檔檢測
  • 調用文檔檢測接口,識別圖片中的文檔,返回文檔在原圖中的位置信息;
  • 如下圖中的紅點所示,文檔檢測接口返回了圖中相片文檔四個頂點相對圖像左上角的坐標信息:

  • 文檔檢測結果如下,該 JSON 保存了原圖中相片文檔四個角相對原圖左上頂點的坐標信息(單位:像素),其中 resultCode 為返回碼:
{"resultCode":0,"doc":"{\"bottom_left\":{\"x\":17,\"y\":440},\"bottom_right\":{\"x\":589,\"y\":760},\"top_left\":{\"x\":256,\"y\":13},\"top_right\":{\"x\":829,\"y\":332}}"}
② 文檔校正
  • 根據文檔在原始圖片中的位置信息校正文檔的拍攝角度(可自定義校正的區域)。
  • 圖片中的校正區域:

  • 校正上圖中深藍色矩形(文檔檢測接口返回的文檔區域)區域,校正后的效果如下圖:

③ 使用限制
  • 支持處理的圖片格式包括 JPEG、JPG、PNG,最終輸出的圖片僅支持 JPEG 格式。
  • 拍攝時盡量將文檔放置在與文檔背景色有一定色差的平面上,并盡量讓文檔充滿畫面,保持文檔邊界入鏡,以獲得最佳效果。
  • 輸入圖片高和寬最小為 100 像素,最大為 10000 像素。

三、應用場景

  • 將紙質信件等舊文檔翻拍成電子版,幫助改善舊文檔的翻拍效果。
  • 記錄書畫展覽中的精彩作品,幫助將作品拍攝得更加端正。

四、API 說明

  • 文檔校正提供了 setVisionConfiguration()、docDetect() 和 docRefine() 三個函數接口。
  • setVisionConfiguration 是 IDocRefine 接口的成員,通過傳入的 DocRefineConfiguration,選擇需要調用的文檔校正類型:
void setVisionConfiguration(DocRefineConfiguration docRefineConfiguration);
  • DocRefineConfiguration 的常用設置:
接口參數名類型參數說明
setProcessMode()modeint進程模式定義:
VisionConfiguration.MODE_IN(同進程調用)
VisionConfiguration.MODE_OUT(跨進程調用)
默認值為VisionConfiguration.MODE_OUT
  • 調用 IDocRefine的docDetect() 方法,獲取檢測結果:
int docDetect(VisionImage image, DocCoordinates result, VisionCallback<DocCoordinates> visionCallBack);
  • 說明:
    • image 為待文檔檢測的輸入圖片。
    • 如果 visionCallback 為 null,執行同步調用,結果碼由方法返回,檢測結果由 result 中返回。
    • 如果 visionCallback 為有效的回調函數,則該函數為異步調用,函數返回時 result 中的值無效,實際識別結果由回調函數返回。
    • 同步模式調用成功時,該函數返回結果碼 0。異步模式調用請求發送成功時,該函數返回結果碼 700。
  • 調用 IDocRefine 的 docRefine() 方法,獲取校正結果:
int docRefine(VisionImage image, DocCoordinates coordinates, ImageResult result,VisionCallback<ImageResult> visionCallBack);
  • 說明:
    • image 為待文檔校正的輸入圖片。
    • 如果 visionCallback 為 null,執行同步調用,結果碼由方法返回,校正結果由 result 中返回。
    • 如果 visionCallback 為有效的回調函數,則該函數為異步調用,函數返回時 result 中的值無效,實際識別結果由回調函數返回。
    • 同步模式調用成功時,該函數返回結果碼 0。異步模式調用請求發送成功時,該函數返回結果碼 700。

五、開發流程

  • 在使用文檔校正時,先將相關的類添加至工程:
import ohos.ai.cv.common.ConnectionCallback;import ohos.ai.cv.common.VisionCallback;import ohos.ai.cv.common.VisionImage;import ohos.ai.cv.common.VisionManager;import ohos.ai.cv.common.ImageResult;import ohos.ai.cv.docrefine.DocCoordinates;import ohos.ai.cv.docrefine.DocRefineConfiguration;import ohos.ai.cv.docrefine.IDocRefine;import ohos.app.Context;import ohos.media.image.PixelMap;
  • 定義 ConnectionCallback 回調,實現連接能力引擎成功與否后的操作:
ConnectionCallback connectionCallback = new ConnectionCallback() {@Overridepublic void onServiceConnect() {// 定義連接能力引擎成功后的操作。}@Overridepublic void onServiceDisconnect() {// 定義連接能力引擎失敗后的操作。}};
  • 調用 VisionManager.init() 方法,將此工程的 context 和已經定義的 connectionCallback 作為入參,建立與能力引擎的連接,context 應為 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的實例或子類實例:
int result = VisionManager.init(context, connectionCallback);
  • 實例化 IDocRefine 接口,將此工程的 context 作為入參,context 應為 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的實例或子類實例:
IDocRefine docRefine = VisionManager.getDocRefine(context);
  • 實例化 VisionImage 對象 image,并傳入待校正圖片 pixelMap:
VisionImage image = VisionImage.fromPixelMap(pixelMap);
  • 實例化 DocCoordinates 對象 docCoordinates:
DocCoordinates docCoordinates = new DocCoordinates();
  • (可選)定義 VisionCallback 回調:
    • 在異步模式下,該類的 onResult() 方法用于獲得檢測的結果 docCoordinates(內含檢測到的文檔坐標);onError() 方法用于處理錯誤返回碼;onProcessing() 方法用于返回處理進度,目前沒有實現此接口的功能。
    • 同步與異步模式區別在于 docDetect() 的最后一個參數 visionCallback 是否為空。若非空則為異步模式,此時會忽略自定義的 DocCoordinates 輸入 docCoordinates,接口調用結果一律從回調函數visionCallback 獲得。
VisionCallback<DocCoordinates> callback= new VisionCallback<DocCoordinates>() {@Overridepublic void onResult(DocCoordinates docCoordinates) {// 對正確獲得的結果進行處理}@Overridepublic void onError(int i) {// 處理錯誤返回碼}@Overridepublic void onProcessing(float v) {// 返回處理進度}};
  • 實例化 ImageResult 對象 imageResult:
ImageResult imageResult = new ImageResult();
  • (可選)定義 VisionCallback 回調:
    • 在異步模式下,該類的 onResult() 方法用于獲得校正的結果 imageResult(內含校正后的圖片);onError() 方法用于處理錯誤返回碼;onProcessing() 方法用于返回處理進度,目前沒有實現此接口的功能。
    • 同步與異步模式區別在于 docRefine() 的最后一個參數 visionCallback 是否為空。若非空則為異步模式。此時會忽略自定義的 ImageResult 輸入 imageResult,接口調用結果一律從回調類 visionCallback 獲得。
VisionCallback<ImageResult> callback = new VisionCallback<ImageResult>() {@Overridepublic void onResult(ImageResult imageResult) {// 對正確獲得的結果進行處理}@Overridepublic void onError(int i) {// 處理錯誤返回碼}@Overridepublic void onProcessing(float v) {// 返回處理進度}};
  • 通過 DocRefineConfiguration 配置校正參數,可選擇進程調用模式等(推薦使用MODE_IN同進程模式),跨進程模式(MODE_OUT)下調用方與能力引擎處于不同進程;同進程模式(MODE_IN)下,能力引擎在調用方進程中實例化,調用方通過反射的方式調用引擎里的文檔校正能力。以同進程調用為例:
DocRefineConfiguration.Builder builder = new DocRefineConfiguration.Builder();builder.setProcessMode(VisionConfiguration.MODE_IN);DocRefineConfiguration configuration = builder.build();docRefine.setVisionConfiguration(configuration);
  • (可選)調用 IDocRefine的prepare() 方法:
result = docRefine.prepare();
  • 調用 IDocRefine 的 docDetect() 方法:
    • 同步模式調用完成時,該函數立即返回結果碼。
    • 異步模式調用請求發送成功時,該函數返回結果碼700。如果返回其他的值,說明異步調用請求不成功,需要先處理錯誤,回調函數不會被調用。
    • 如果異步模式調用請求發送成功,則檢測完成后,相應的回調函數會被自動調用。
      • 如果 onResult() 回調被調用,說明檢測成功,相當于同步模式結果碼為0的情況。
      • 如果 onError() 方法被調用,說明檢測發生了錯誤,具體的調用結果碼將由 onError() 的參數接收。
result = docRefine.docDetect(image, docCoordinates, null); // 同步// 或者result = docRefine.docDetect(image, null, callback); // 異步
  • 調用 IDocRefine的docRefine() 方法:
    • 同步模式調用完成時,該函數立即返回結果碼。
    • 異步模式調用請求發送成功時,該函數返回結果碼700。如果返回其他的值,說明異步調用請求不成功,需要先處理錯誤,回調函數不會被調用。
    • 如果異步模式調用請求發送成功,則校正完成后,相應的回調函數會被自動調用。
      • 如果 onResult() 回調被調用,說明校正成功,相當于同步模式結果碼為0的情況。
      • 如果 onError() 方法被調用,說明校正發生了錯誤,具體的調用結果碼將由 onError() 的參數接收。
result = docRefine.docRefine(image, docCoordinates, imageResult, null); // 同步// 或者result = docRefine.docRefine(image, docCoordinates, null, callback); // 異步
  • 調用 IDocRefine的release() 方法,釋放資源,調用 pixelMap 的 release() 方法,釋放圖片內存:
result = docRefine.release();if (pixelMap != null) {pixelMap.release();pixelMap = null;}
  • 調用 VisionManager.destroy() 方法,斷開與能力引擎的連接:
VisionManager.destroy();
  • 結果碼定義如下表:
結果碼說明
0成功
-1未知錯誤
-2不支持的功能或接口
-3內存分配失敗或創建對象失敗
-4所需庫加載失敗
-10引擎開關已經關閉
101失敗
102超時
200輸入參數不合法(圖片尺寸錯誤)
201輸入參數不合法(為空)
210輸入參數合法
500服務綁定異常
521服務綁定異常斷開
522服務已連接
600模型文件異常
601模型文件不存在
602模型加載失敗
700異步調用請求發送成功
1001神經網絡處理單元錯誤

總結

以上是生活随笔為你收集整理的HarmonyOS之AI能力·文档检测校正的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。