HarmonyOS之AI能力·文檔檢測校正

      網(wǎng)友投稿 788 2025-04-01

      文檔校正提供了文檔翻拍過程的輔助增強功能,包含兩個子功能:文檔檢測和文檔校驗。

      文檔檢測:能夠自動識別圖片中的文檔,返回文檔在原圖中的位置信息。這里的文檔泛指外形方正的事物,比如書本、相片、畫框等。

      文檔校正:能根據(jù)文檔在原始圖片中的位置信息校正文檔的拍攝角度,自動將拍攝視角調(diào)整到正對文檔的角度上。

      調(diào)用文檔檢測接口,識別圖片中的文檔,返回文檔在原圖中的位置信息;

      如下圖中的紅點所示,文檔檢測接口返回了圖中相片文檔四個頂點相對圖像左上角的坐標信息:

      文檔檢測結果如下,該 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} }" }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      根據(jù)文檔在原始圖片中的位置信息校正文檔的拍攝角度(可自定義校正的區(qū)域)。

      圖片中的校正區(qū)域:

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

      支持處理的圖片格式包括 JPEG、JPG、PNG,最終輸出的圖片僅支持 JPEG 格式。

      拍攝時盡量將文檔放置在與文檔背景色有一定色差的平面上,并盡量讓文檔充滿畫面,保持文檔邊界入鏡,以獲得最佳效果。

      輸入圖片高和寬最小為 100 像素,最大為 10000 像素。

      將紙質(zhì)信件等舊文檔翻拍成電子版,幫助改善舊文檔的翻拍效果。

      記錄書畫展覽中的精彩作品,幫助將作品拍攝得更加端正。

      文檔校正提供了 setVisionConfiguration()、docDetect() 和 docRefine() 三個函數(shù)接口。

      setVisionConfiguration 是 IDocRefine 接口的成員,通過傳入的 DocRefineConfiguration,選擇需要調(diào)用的文檔校正類型:

      void setVisionConfiguration(DocRefineConfiguration docRefineConfiguration);

      1

      DocRefineConfiguration 的常用設置:

      調(diào)用 IDocRefine的docDetect() 方法,獲取檢測結果:

      int docDetect(VisionImage image, DocCoordinates result, VisionCallback visionCallBack);

      1

      說明:

      image 為待文檔檢測的輸入圖片。

      如果 visionCallback 為 null,執(zhí)行同步調(diào)用,結果碼由方法返回,檢測結果由 result 中返回。

      如果 visionCallback 為有效的回調(diào)函數(shù),則該函數(shù)為異步調(diào)用,函數(shù)返回時 result 中的值無效,實際識別結果由回調(diào)函數(shù)返回。

      同步模式調(diào)用成功時,該函數(shù)返回結果碼 0。異步模式調(diào)用請求發(fā)送成功時,該函數(shù)返回結果碼 700。

      調(diào)用 IDocRefine 的 docRefine() 方法,獲取校正結果:

      int docRefine(VisionImage image, DocCoordinates coordinates, ImageResult result, VisionCallback visionCallBack);

      1

      2

      說明:

      image 為待文檔校正的輸入圖片。

      如果 visionCallback 為 null,執(zhí)行同步調(diào)用,結果碼由方法返回,校正結果由 result 中返回。

      如果 visionCallback 為有效的回調(diào)函數(shù),則該函數(shù)為異步調(diào)用,函數(shù)返回時 result 中的值無效,實際識別結果由回調(diào)函數(shù)返回。

      同步模式調(diào)用成功時,該函數(shù)返回結果碼 0。異步模式調(diào)用請求發(fā)送成功時,該函數(shù)返回結果碼 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;

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      定義 ConnectionCallback 回調(diào),實現(xiàn)連接能力引擎成功與否后的操作:

      ConnectionCallback connectionCallback = new ConnectionCallback() { @Override public void onServiceConnect() { // 定義連接能力引擎成功后的操作。 } @Override public void onServiceDisconnect() { // 定義連接能力引擎失敗后的操作。 } };

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      調(diào)用 VisionManager.init() 方法,將此工程的 context 和已經(jīng)定義的 connectionCallback 作為入?yún)ⅲ⑴c能力引擎的連接,context 應為 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的實例或子類實例:

      int result = VisionManager.init(context, connectionCallback);

      1

      實例化 IDocRefine 接口,將此工程的 context 作為入?yún)ⅲ琧ontext 應為 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的實例或子類實例:

      IDocRefine docRefine = VisionManager.getDocRefine(context);

      1

      HarmonyOS之AI能力·文檔檢測校正

      實例化 VisionImage 對象 image,并傳入待校正圖片 pixelMap:

      VisionImage image = VisionImage.fromPixelMap(pixelMap);

      1

      實例化 DocCoordinates 對象 docCoordinates:

      DocCoordinates docCoordinates = new DocCoordinates();

      1

      (可選)定義 VisionCallback 回調(diào):

      在異步模式下,該類的 onResult() 方法用于獲得檢測的結果 docCoordinates(內(nèi)含檢測到的文檔坐標);onError() 方法用于處理錯誤返回碼;onProcessing() 方法用于返回處理進度,目前沒有實現(xiàn)此接口的功能。

      同步與異步模式區(qū)別在于 docDetect() 的最后一個參數(shù) visionCallback 是否為空。若非空則為異步模式,此時會忽略自定義的 DocCoordinates 輸入 docCoordinates,接口調(diào)用結果一律從回調(diào)函數(shù)visionCallback 獲得。

      VisionCallback callback= new VisionCallback() { @Override public void onResult(DocCoordinates docCoordinates) { // 對正確獲得的結果進行處理 } @Override public void onError(int i) { // 處理錯誤返回碼 } @Override public void onProcessing(float v) { // 返回處理進度 } };

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      實例化 ImageResult 對象 imageResult:

      ImageResult imageResult = new ImageResult();

      1

      (可選)定義 VisionCallback 回調(diào):

      在異步模式下,該類的 onResult() 方法用于獲得校正的結果 imageResult(內(nèi)含校正后的圖片);onError() 方法用于處理錯誤返回碼;onProcessing() 方法用于返回處理進度,目前沒有實現(xiàn)此接口的功能。

      同步與異步模式區(qū)別在于 docRefine() 的最后一個參數(shù) visionCallback 是否為空。若非空則為異步模式。此時會忽略自定義的 ImageResult 輸入 imageResult,接口調(diào)用結果一律從回調(diào)類 visionCallback 獲得。

      VisionCallback callback = new VisionCallback() { @Override public void onResult(ImageResult imageResult) { // 對正確獲得的結果進行處理 } @Override public void onError(int i) { // 處理錯誤返回碼 } @Override public void onProcessing(float v) { // 返回處理進度 } };

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      通過 DocRefineConfiguration 配置校正參數(shù),可選擇進程調(diào)用模式等(推薦使用MODE_IN同進程模式),跨進程模式(MODE_OUT)下調(diào)用方與能力引擎處于不同進程;同進程模式(MODE_IN)下,能力引擎在調(diào)用方進程中實例化,調(diào)用方通過反射的方式調(diào)用引擎里的文檔校正能力。以同進程調(diào)用為例:

      DocRefineConfiguration.Builder builder = new DocRefineConfiguration.Builder(); builder.setProcessMode(VisionConfiguration.MODE_IN); DocRefineConfiguration configuration = builder.build(); docRefine.setVisionConfiguration(configuration);

      1

      2

      3

      4

      (可選)調(diào)用 IDocRefine的prepare() 方法:

      result = docRefine.prepare();

      1

      調(diào)用 IDocRefine 的 docDetect() 方法:

      同步模式調(diào)用完成時,該函數(shù)立即返回結果碼。

      異步模式調(diào)用請求發(fā)送成功時,該函數(shù)返回結果碼700。如果返回其他的值,說明異步調(diào)用請求不成功,需要先處理錯誤,回調(diào)函數(shù)不會被調(diào)用。

      如果異步模式調(diào)用請求發(fā)送成功,則檢測完成后,相應的回調(diào)函數(shù)會被自動調(diào)用。

      如果 onResult() 回調(diào)被調(diào)用,說明檢測成功,相當于同步模式結果碼為0的情況。

      如果 onError() 方法被調(diào)用,說明檢測發(fā)生了錯誤,具體的調(diào)用結果碼將由 onError() 的參數(shù)接收。

      result = docRefine.docDetect(image, docCoordinates, null); // 同步 // 或者 result = docRefine.docDetect(image, null, callback); // 異步

      1

      2

      3

      調(diào)用 IDocRefine的docRefine() 方法:

      同步模式調(diào)用完成時,該函數(shù)立即返回結果碼。

      異步模式調(diào)用請求發(fā)送成功時,該函數(shù)返回結果碼700。如果返回其他的值,說明異步調(diào)用請求不成功,需要先處理錯誤,回調(diào)函數(shù)不會被調(diào)用。

      如果異步模式調(diào)用請求發(fā)送成功,則校正完成后,相應的回調(diào)函數(shù)會被自動調(diào)用。

      如果 onResult() 回調(diào)被調(diào)用,說明校正成功,相當于同步模式結果碼為0的情況。

      如果 onError() 方法被調(diào)用,說明校正發(fā)生了錯誤,具體的調(diào)用結果碼將由 onError() 的參數(shù)接收。

      result = docRefine.docRefine(image, docCoordinates, imageResult, null); // 同步 // 或者 result = docRefine.docRefine(image, docCoordinates, null, callback); // 異步

      1

      2

      3

      調(diào)用 IDocRefine的release() 方法,釋放資源,調(diào)用 pixelMap 的 release() 方法,釋放圖片內(nèi)存:

      result = docRefine.release(); if (pixelMap != null) { pixelMap.release(); pixelMap = null; }

      1

      2

      3

      4

      5

      調(diào)用 VisionManager.destroy() 方法,斷開與能力引擎的連接:

      VisionManager.destroy();

      1

      結果碼定義如下表:

      AI 任務調(diào)度

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      版權聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權內(nèi)容。

      上一篇:wps表格自由繪制的使用方法(wps文字怎么自由繪制表格)
      下一篇:一文講清如何構建高并發(fā)服務器
      相關文章
      国产亚洲人成无码网在线观看| 亚洲AV噜噜一区二区三区| 亚洲精品美女久久久久99小说| 亚洲精品无码人妻无码| 亚洲一区在线观看视频| 亚洲国产高清视频在线观看| 久久久久亚洲精品日久生情| 久久狠狠高潮亚洲精品| 亚洲人成网址在线观看| 日韩精品一区二区亚洲AV观看| 亚洲国产精品VA在线看黑人| 亚洲国产a∨无码中文777| 亚洲AV无码国产精品色午友在线| 亚洲AV无一区二区三区久久| 亚洲精品人成在线观看| 亚洲综合在线成人一区| 亚洲成a人片7777| 亚洲av一本岛在线播放| 亚洲人成色77777在线观看| 亚洲av成人一区二区三区观看在线 | 亚洲国产精品特色大片观看完整版 | 亚洲av无码专区在线观看亚| 亚洲av片在线观看| 亚洲 自拍 另类小说综合图区| 亚洲国产成人久久笫一页| 国产亚洲精品无码专区| 久久精品九九亚洲精品天堂| 亚洲最大成人网色| 亚洲中文无码线在线观看| 亚洲一级大黄大色毛片| 亚洲一本到无码av中文字幕| 午夜亚洲国产理论片二级港台二级| 噜噜噜亚洲色成人网站| 国产亚洲精品资在线| 亚洲AV无码成人精品区在线观看| 亚洲人成电影亚洲人成9999网| 亚洲乱码中文论理电影| 丰满亚洲大尺度无码无码专线 | 精品亚洲一区二区三区在线播放| 亚洲色欲久久久综合网| 亚洲综合无码一区二区|