HarmonyOS之AI能力·通用文字識別技術
通用文字識別的核心技術是 OCR(Optical Character Recognition,光學字符識別)。

OCR 是一種通過拍照、掃描等光學輸入方式,把各種票據、卡證、表格、報刊、書籍等印刷品文字轉化為圖像信息,再利用文字識別技術將圖像信息轉化為計算機等設備可以使用的字符信息的技術。
支持處理的圖片格式包括 JPEG、JPG、PNG。
通用文字識別目前支持的語言有:中文、英文、日語、韓語、俄語、意大利語、西班牙語、葡萄牙語、德語,以及法語(將來會增加更多語種)。
目前支持文檔印刷體識別,不支持手寫字體識別。
為保證較理想的識別結果,調用通用文字識別功能時,應盡可能保證輸入圖像具有合適的成像質量(建議720p以上)和高寬比例(建議2:1以下,接近手機屏幕高寬比例為宜)。當輸入圖像為非建議圖片尺寸時,文字識別的準確度可能會受到影響。
為保證較理想的識別結果,建議文本與拍攝角度夾角在正負30度范圍內。
可以進行文檔翻拍、街景翻拍等圖片來源的文字檢測和識別,也可以集成于其他應用中,提供文字檢測、識別的功能,并根據識別結果提供翻譯、搜索等相關服務;
可以處理來自相機、圖庫等多種來源的圖像數據,提供了一個自動檢測文本、識別圖像中文本位置以及文本內容功能的開放接口;
能在一定程度上支持文本傾斜、拍攝角度傾斜、復雜光照條件以及復雜文本背景等場景的文字識別。
用文字識別提供了 setVisionConfiguration() 和 detect() 兩個函數接口。
調用 ITextDetector的setVisionConfiguration() 方法,通過傳入的 TextConfiguration,選擇需要調用的 OCR 類型。
void setVisionConfiguration(TextConfiguration textConfiguration);
1
TextConfiguration 的常用設置如下:
調用 ITextDetector 的 detect() 方法,獲取識別結果:
int detect(VisionImage image, Text result, VisionCallback
1
其中:
image 為待 OCR 檢測識別的輸入圖片。
如果 visionCallback 為 null,執行同步調用,結果碼由方法返回,檢測及識別結果由 result 中返回。
如果 visionCallback 為有效的回調函數,則該函數為異步調用,函數返回時 result 中的值無效,實際識別結果由回調函數返回。
同步模式調用成功時,該函數返回結果碼0。異步模式調用請求發送成功時,該函數返回結果碼700。
在使用通用文字識別 SDK 時,將實現文字識別的相關的類添加至工程:
import ohos.ai.cv.common.ConnectionCallback; import ohos.ai.cv.common.VisionCallback; import ohos.ai.cv.common.VisionConfiguration; import ohos.ai.cv.common.VisionImage; import ohos.ai.cv.common.VisionManager; import ohos.ai.cv.text.ITextDetector; import ohos.ai.cv.text.Text; import ohos.ai.cv.text.TextConfiguration; import ohos.ai.cv.text.TextDetectType; import ohos.app.Context; import ohos.media.image.PixelMap;
1
2
3
4
5
6
7
8
9
10
11
定義 ConnectionCallback 回調,實現連接能力引擎成功與否后的操作:
ConnectionCallback connectionCallback = new ConnectionCallback() { @Override public void onServiceConnect() { // 定義連接能力引擎成功后的操作。 } @Override public void onServiceDisconnect() { // 定義連接能力引擎失敗后的操作。 } };
1
2
3
4
5
6
7
8
9
10
11
調用 VisionManager.init() 方法,將此工程的 context 和已經定義的 connectionCallback 回調作為入參,建立與能力引擎的連接。context 應為 ohos.aafwk.ability.Ability 或 ohos.aafwk.ability.AbilitySlice 的實例或子類實例:
int result = VisionManager.init(context, connectionCallback);
1
實例化 ITextDetector 接口,將此工程的 context 作為入參:
ITextDetector textDetector = VisionManager.getTextDetector(context);
1
實例化 VisionImage 對象 image,并傳入待檢測圖片 pixelMap:
VisionImage image = VisionImage.fromPixelMap(pixelMap);
1
實例化 Text 對象 text,該對象在同步模式下用于存放調用 textDetector.detect()方法的結果返回碼及文字識別結果:
Text text = new Text();
1
(可選) 定義 VisionCallback
回調:
VisionCallback
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
注意:
在異步模式下,該類的 onResult() 方法用于獲得文字識別結果 Text;onError() 方法用于處理錯誤返回碼;onProcessing() 方法用于返回處理進度,目前沒有實現此接口的功能。
同步與異步模式區別在于 detect() 的最后一個參數 VisionCallback
是否為空。若非空則為異步模式。此時會忽略自定義的 Text 輸入(效果與傳入 null 相同),接口調用結果一律從 VisionCallback
獲得,自定義的 Text 輸入不做更新。
通過 TextConfiguration 配置 textDetector() 方法的運行參數,可選擇識別場景,語言類型,調用模式等。跨進程模式(MODE_OUT)下調用方與能力引擎處于不同進程;同進程模式(MODE_IN)下,能力引擎在調用方進程中實例化,調用方通過反射的方式調用引擎里的通用文字識別能力。以聚焦通用文字識別,同進程英文語種檢測為例:
TextConfiguration.Builder builder = new TextConfiguration.Builder(); builder.setProcessMode(VisionConfiguration.MODE_IN); builder.setDetectType(TextDetectType.TYPE_TEXT_DETECT_FOCUS_SHOOT); builder.setLanguage(TextConfiguration.ENGLISH); TextConfiguration config = builder.build(); textDetector.setVisionConfiguration(config);
1
2
3
4
5
6
(可選)調用 ITextDetector 的 prepare() 方法:
result = textDetector.prepare();
1
說明:如果返回的 result 不為0,說明當前 OCR 能力準備失敗,需要處理錯誤,不再執行之后的動作。在 detect() 方法中會首先調用 prepare() 啟動引擎,如果引擎已經啟動則不會再次啟動。
調用 ITextDetector 的 detect() 方法:
result = textDetector.detect(image, text, null); // 同步 // 或者 result = textDetector.detect(image, null, visionCallback); // 異步
1
2
3
4
說明:
同步模式調用完成時,該函數立即返回結果碼;
異步模式調用請求發送成功時,該函數返回結果碼700。如果返回其他的結果碼,說明異步調用請求不成功,需要先處理錯誤,此時回調函數不會被調用。
如果異步模式調用請求發送成功,則 OCR 完成后,相應的回調函數會被自動調用。
如果 onResult() 回調被調用,說明 OCR 檢測識別成功,相當于同步模式結果碼為0的情況。
如果 onError() 方法被調用,則說明 OCR 發生了錯誤,具體的調用結果碼將由 onError() 的參數接收。
結果碼定義如下表:
調用 ITextDetector 的 release() 方法,釋放資源。調用 pixelMap 的 release() 方法,釋放圖片內存,不再使用通用文字識別能力時,調用 release() 方法釋放資源:
textDetector.release(); if (pixelMap != null) { pixelMap.release(); pixelMap = null; }
1
2
3
4
5
調用 VisionManager.destroy() 方法,斷開與能力引擎的連接:
VisionManager.destroy();
1
AI OCR 圖像處理
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。