Android对接华为AI - 文本识别
生活随笔
收集整理的這篇文章主要介紹了
Android对接华为AI - 文本识别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
準備工作
在開發應用前:
1、需要在AppGallery Connect中配置相關信息,包括:注冊成為開發者和創建應用。
2、使用ML Kit云側服務(端側服務可不開通)需要開發者在AppGallery Connect上打開ML Kit服務開關。
集成HMS Core SDK
工程根目錄build.gradle文件
buildscript {
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
// 配置HMS Core SDK的Maven倉地址。
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.4'
classpath 'com.huawei.agconnect:agcp:1.6.2.300'
}
}
allprojects {
repositories {
google()
mavenCentral()
maven { url 'https://jitpack.io' }
// 配置HMS Core SDK的Maven倉地址。
maven {url 'https://developer.huawei.com/repo/'}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app module下的build.gradle依賴華為基礎SDK包與語言識別模型包:
// 引入基礎SDK
implementation 'com.huawei.hms:ml-computer-vision-ocr:3.11.0.301'
// 引入拉丁語文字識別模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-latin-model:3.11.0.301'
// 引入日韓語文字識別模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-jk-model:3.11.0.301'
// 引入中英文文字識別模型包
implementation 'com.huawei.hms:ml-computer-vision-ocr-cn-model:3.11.0.301'
配置混淆腳本
-dontwarn com.huawei.**
-keep class com.huawei.** {*;}
-dontwarn org.slf4j.**
-keep class org.slf4j.** {*;}
-dontwarn org.springframework.**
-keep class org.springframework.** {*;}
-dontwarn com.fasterxml.jackson.**
-keep class com.fasterxml.jackson.** {*;}
-keep class com.huawei.noah.bolttranslator.**{*;}
-dontwarn com.huawei.hisi.**
-keep class com.huawei.hisi.** {*;}
添加權限
<!--相機權限-->
<uses-permission android:name="android.permission.CAMERA" />
<!--使用網絡權限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--寫權限-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--讀權限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--錄音權限-->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!--獲取網絡狀態權限-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--獲取wifi狀態權限-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
端側識別
/**
* 端側文本識別
*/
private void textAnalyzer() {
long startTime = (new Date()).getTime();
Log.d("textAnalyzer", "start: " + startTime);
MLLocalTextSetting setting = new MLLocalTextSetting.Factory()
.setOCRMode(MLLocalTextSetting.OCR_DETECT_MODE)
// 設置識別語種。
.setLanguage("zh")
.create();
MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getLocalTextAnalyzer(setting);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test2);
// 通過bitmap創建MLFrame,bitmap為輸入的Bitmap格式圖片數據。
MLFrame frame = MLFrame.fromBitmap(bitmap);
Task<MLText> task = analyzer.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener<MLText>() {
@Override
public void onSuccess(MLText text) {
List<MLText.Block> blocks = text.getBlocks();
StringBuilder sb = new StringBuilder();
for (MLText.Block block : blocks) {
sb.append(block.getStringValue());
}
// 識別成功處理。
tv.setText("識別成功: " + sb.toString());
Log.d("textAnalyzer", "識別成功:\n " + sb.toString());
long endTime = (new Date()).getTime();
Log.d("textAnalyzer", "end: " + endTime);
Log.d("textAnalyzer", "耗時: " + (endTime-startTime));
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// 識別失敗處理。
tv.setText("識別失敗");
}
});
}
端側識別測試
原圖:test2.png
識別結果:
云側文本識別
注意:此功能收費,但是精確度更高。
配置應用的鑒權信息
先申請apikey:
https://developer.huawei.com/consumer/cn/console/api/credentials/dev388421841221889538
然后配置apikey
云側文本識別實現
MLApplicationInit.init();
/**
* 云側文本識別
*/
private void textAnalyzerNet() {
long startTime = (new Date()).getTime();
Log.d("textAnalyzerNet", "start: " + startTime);
// 方式一:使用自定義參數配置。
// 創建語言集合。
List<String> languageList = new ArrayList();
languageList.add("zh");
languageList.add("en");
// 設置參數。
MLRemoteTextSetting setting = new MLRemoteTextSetting.Factory()
// 設置云側文本字體模式:
// 若選擇手寫體格式,文本檢測模式僅支持稀疏文本,語言列表僅支持中文(zh),邊界框格式僅支持NGON四頂點坐標。
// setTextDensityScene、setLnaguageList、setBorderType等方法設置均不生效。
// 若選擇印刷體格式,則需要手動設置語言列表,檢測模式和邊框樣式,或采取默認配置。
// MLRemoteTextSetting.OCR_HANDWRITTENFONT_SCENE:手寫體。
// MLRemoteTextSetting.OCR_PRINTFONT_SCENE:印刷體。
.setTextFontScene(MLRemoteTextSetting.OCR_HANDWRITTENFONT_SCENE)
// 設置云側文本檢測模式:
// MLRemoteTextSetting.OCR_COMPACT_SCENE:文本密集場景的文本識別。
// MLRemoteTextSetting.OCR_LOOSE_SCENE:文本稀疏場景的文本識別。
.setTextDensityScene(MLRemoteTextSetting.OCR_LOOSE_SCENE)
// 設置識別語言列表,使用ISO 639-1標準。
.setLanguageList(languageList)
// 設置文本邊界框返回格式。
// MLRemoteTextSetting.NGON:返回四邊形的四個頂點坐標。
// MLRemoteTextSetting.ARC:返回文本排列為弧形的多邊形邊界的頂點,最多可返回多達72個頂點的坐標。
.setBorderType(MLRemoteTextSetting.ARC)
.create();
MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer(setting);
// 方式二:使用默認參數配置,自動檢測語種進行識別,適用于文本稀疏場景,文本框返回格式為:MLRemoteTextSetting.NGON。
//MLTextAnalyzer analyzer = MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer();
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.test2);
// 通過bitmap創建MLFrame,bitmap為輸入的Bitmap格式圖片數據。
MLFrame frame = MLFrame.fromBitmap(bitmap);
Task<MLText> task = analyzer.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener<MLText>() {
@Override
public void onSuccess(MLText text) {
// 識別成功。
List<MLText.Block> blocks = text.getBlocks();
StringBuilder sb = new StringBuilder();
for (MLText.Block block : blocks) {
sb.append(block.getStringValue());
sb.append("\n");
}
// 識別成功處理。
tv.setText("識別成功: " + sb.toString());
Log.d("textAnalyzerNet", "識別成功:\n " + sb.toString());
long endTime = (new Date()).getTime();
Log.d("textAnalyzerNet", "end: " +endTime);
Log.d("textAnalyzerNet", "耗時: " + (endTime-startTime));
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// 識別失敗,獲取相關異常信息。
try {
MLException mlException = (MLException) e;
// 獲取錯誤碼,開發者可以對錯誤碼進行處理,根據錯誤碼進行差異化的頁面提示。
int errorCode = mlException.getErrCode();
// 獲取報錯信息,開發者可以結合錯誤碼,快速定位問題。
String errorMessage = mlException.getMessage();
} catch (Exception error) {
// 轉換錯誤處理。
}
}
});
}
云側文本識別測試
原圖:test2.png
識別結果:
官網參考
更多內容,請參考官網:
https://developer.huawei.com/consumer/cn/doc/hiai-Guides/text-recognition-0000001050040053
總結
以上是生活随笔為你收集整理的Android对接华为AI - 文本识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STM32CubeMX教程7 TIM 通
- 下一篇: C++ Qt开发:Charts与数据库组