引子
想必有很多小伙伴喜歡外出旅游,能去海外玩一圈那是更好不過了,旅游前大家一定會對吃、穿、住、行、游玩路線做各種攻略,然后滿懷期待的出發…
想象中的旅游
出發前,想象中的旅游目的地可能有漂亮建築:
好吃的美食:
漂亮的小姐姐:
悠閑的生活:
實際中的旅游
但現實中,大家如果到了語言不通的地方,大概率可能會遇到如下麻煩:
讓人懵圈的地圖:
夢幻菜單:
魔性的路標指示牌:
商場中琳琅滿目的商品:
太難了
拍照翻譯幫你忙
有了華為HMS ML Kit 文本識別和翻譯服務,以上這些都不是問題,今天就來給大家介紹一下,怎么樣使用華為HMS ML Kit提供的SDK來開發一個拍照翻譯服務。簡單來講完成拍照翻譯小應用的開發只需要兩大步:
文本識別
先拍張照片獲取圖片,然后把獲取的圖像幀送到華為HMS ML Kit文本識別服務做文本識別。
華為文本識別服務同時提供離線SDK(端側)和雲側兩種方式,端側免費可實時檢測,雲側識別種類和精度更高。本次實戰我們采用雲側提供的能力。
文本識別特性 | 規格(HMS 4.0 ) |
---|---|
端側 | 支持中日韓 |
雲側多語種 | 中、英、法、西、泰語等19個語種 |
傾斜識別 | 30度傾斜情況下依然可以識別 |
彎曲文字支持 | 支持45度彎曲情況下依然可以成功識別 |
文字跟蹤 | 端側支持跟蹤 |
以上規格僅供參考,具體以華為開發者聯盟官網為准
翻譯
將識別后的文字送到華為HMS MLKit 翻譯服務做文本翻譯,就可以獲取到想要翻譯后的結果了。
翻譯是雲側提供的服務。
文本翻譯特性 | 規格(HMS 4.0) |
---|---|
多語種 | 7個語種 中、英、法、西、土、阿、泰 |
時延 | 300ms/100字 |
BLEU值 | >30 |
動態術語配置 | 支持 |
以上規格僅供參考,具體以華為開發者聯盟官網為准
拍照翻譯APP開發實戰
上面說了太多的廢話,直接切入正題吧
1 開發准備
由於使用了雲側的服務,需要到華為的開發者聯盟注冊開發者賬號,並且在雲端開通這些服務,這里就不細講了,直接按照官方的的AppGallery Connect配置、開通服務部分操作步驟進行即可:
1.1 在項目級gradle里添加華為maven倉
打開AndroidStudio項目級build.gradle文件。
增量添加如下maven地址:
buildscript {
repositories {
maven {url 'http://developer.huawei.com/repo/'}
} }allprojects {
repositories {
maven { url 'http://developer.huawei.com/repo/'}
}
}
1.2 在應用級的build.gradle里面加上SDK依賴
集成SDK。(由於使用雲側能力,只引入SDK基礎包即可)
dependencies{
implementation 'com.huawei.hms:ml-computer-vision:1.0.2.300'
implementation 'com.huawei.hms:ml-computer-translate:1.0.2.300'
}
1.3 在AndroidManifest.xml文件里面申請相機和存儲權限
要使應用程序能夠在用戶從華為應用市場安裝您的應用程序后,自動將最新的機器學習模型更新到用戶設備,請將以下語句添加到該應用程序的AndroidManifest.xml文件中:
<manifest
<application
<meta-data
android:name="com.huawei.hms.ml.DEPENDENCY"
android:value= "imgseg "/>
</application>
</manifest>
1.4 在AndroidManifest.xml文件里面申請相機和存儲權限
<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-feature android:name="android.hardware.camera" /><uses-feature android:name="android.hardware.camera.autofocus" />
2 代碼開發關鍵步驟
2.1 動態權限申請
private static final int CAMERA_PERMISSION_CODE = 1; @Override
public void onCreate(Bundle savedInstanceState) {
// Checking camera permission
if (!allPermissionsGranted()) {
getRuntimePermissions();
}}
2.2 創建雲側文本分析器。可以通過文本檢測配置器“MLRemoteTextSetting”創建文本分析器
MLRemoteTextSetting setting = (new MLRemoteTextSetting.Factory()).
setTextDensityScene(MLRemoteTextSetting.OCR_LOOSE_SCENE).create();this.textAnalyzer = MLAnalyzerFactory.getInstance().getRemoteTextAnalyzer(setting);
2.3 通過android.graphics.Bitmap創建“MLFrame”對象用於分析器檢測圖片
MLFrame mlFrame = new MLFrame.Creator().setBitmap(this.originBitmap).create();
2.4 調用“asyncAnalyseFrame ”方法進行文本檢測
Task<MLText> task = this.textAnalyzer.asyncAnalyseFrame(mlFrame);
task.addOnSuccessListener(new OnSuccessListener<MLText>() {
@Override public void onSuccess(MLText mlText) {
// Transacting logic for segment success.
if (mlText != null) {
RemoteTranslateActivity.this.remoteDetectSuccess(mlText);
} else {
RemoteTranslateActivity.this.displayFailure();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override public void onFailure(Exception e) {
// Transacting logic for segment failure.
RemoteTranslateActivity.this.displayFailure();
return;
}
});
2.5 創建文本翻譯器。可以通過文本翻譯器自定義參數類“MLRemoteTranslateSetting”創建翻譯器
MLRemoteTranslateSetting.Factory factory = new MLRemoteTranslateSetting
.Factory()
// Set the target language code. The ISO 639-1 standard is used.
.setTargetLangCode(this.dstLanguage);
if (!this.srcLanguage.equals("AUTO")) {
// Set the source language code. The ISO 639-1 standard is used.
factory.setSourceLangCode(this.srcLanguage);
}
this.translator = MLTranslatorFactory.getInstance().getRemoteTranslator(factory.create());
2.6 調用“asyncAnalyseFrame ”方法對文本識別獲取的內容進行文本翻譯
final Task<String> task = translator.asyncTranslate(this.sourceText);
task.addOnSuccessListener(new OnSuccessListener<String>() {
@Override public void onSuccess(String text) {
if (text != null) {
RemoteTranslateActivity.this.remoteDisplaySuccess(text);
} else {
RemoteTranslateActivity.this.displayFailure();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override public void onFailure(Exception e) {
RemoteTranslateActivity.this.displayFailure();
}
});
2.7 翻譯完成釋放資源
if (this.textAnalyzer != null) {
try {
this.textAnalyzer.close();
} catch (IOException e) {
SmartLog.e(RemoteTranslateActivity.TAG, "Stop analyzer failed: " + e.getMessage());
}
}
if (this.translator != null) {
this.translator.stop();
}
3 源碼
老規矩,簡單的小Demo源碼已上傳Github,github源碼地址請戳: https://github.com/HMS-MLKit/HUAWEI-HMS-MLKit-Sample(工程目錄為:Photo-Translate),大家可以做參考做基於場景的優化。
4 Demo效果
結后語
本次給大家演示的小程序APP開發同時用到了華為HMS ML Kit的兩種雲側能力,文字識別和翻譯的能力,華為的文字識別和翻譯還可以幫助開發者做很多其他有趣又強大的功能,比如:
【通用文本識別】
1、公交車牌文字識別
2、文檔閱讀場景下的文本識別
【卡證類文本識別】
1、通過文字識別可以識別銀行卡的卡號,用於銀行卡綁定等場景
2、當然除了識別銀行卡,還可以識別生活中的各種卡證號,比如會員卡、優惠卡
3、此外還可以實現身份證、港澳通行證等證件類號碼的識別
【翻譯】
1、路標路牌翻譯
2、文檔翻譯
3、網頁翻譯,比如識別網站評論區的語言類型並翻譯成對應國家的語言;
4、海淘商品介紹翻譯
5、餐廳點餐菜單翻譯
更詳細的開發指南參考華為開發者聯盟官網
華為開發者聯盟機器學習服務開發指南
往期鏈接:Android | 教你如何開發一個證件照DIY小程序
內容來源:[https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201209905778120045&fid=18](https://developer.huawei.com/consumer/cn/forum/topicview?
tid=0201209905778120045&fid=18)
原作者:AI_talking