Android | 教你如何開發一個拍照翻譯小程式
引子
想必有很多小夥伴喜歡外出旅遊,能去海外玩一圈那是更好不過了,旅遊前大家一定會對吃、穿、住、行、遊玩路線做各種攻略,然後滿懷期待的出發…
想象中的旅遊
出發前,想象中的旅遊目的地可能有漂亮建築:
好吃的美食:
漂亮的小姐姐:
悠閒的生活:
實際中的旅遊
但現實中,大家如果到了語言不通的地方,大機率可能會遇到如下麻煩:
讓人懵圈的地圖:
夢幻選單:
魔性的路標指示牌:
商場中琳琅滿目的商品:
太難了
拍照翻譯幫你忙
有了華為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原始碼地址請戳: (工程目錄為:Photo-Translate),大家可以做參考做基於場景的最佳化。
4 Demo效果
結後語
本次給大家演示的小程式APP開發同時用到了華為HMS ML Kit的兩種雲側能力,文字識別和翻譯的能力,華為的文字識別和翻譯還可以幫助開發者做很多其他有趣又強大的功能,比如:
【通用文字識別】
1、公交車牌文字識別
2、文件閱讀場景下的文字識別
【卡證類文字識別】
1、透過文字識別可以識別銀行卡的卡號,用於銀行卡繫結等場景
2、當然除了識別銀行卡,還可以識別生活中的各種卡證號,比如會員卡、優惠卡
3、此外還可以實現身份證、港澳通行證等證件類號碼的識別
【翻譯】
1、路標路牌翻譯
2、文件翻譯
3、網頁翻譯,比如識別網站評論區的語言型別並翻譯成對應國家的語言;
4、海淘商品介紹翻譯
5、餐廳點餐選單翻譯
更詳細的開發指南參考華為開發者聯盟官網
往期連結:
原作者:AI_talking
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2524/viewspace-2825392/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android | 教你如何開發一個證件照DIY小程式Android
- 教你如何利用C#呼叫百度翻譯API實現一個翻譯功能C#API
- 【翻譯】ANDROID KTX – 使用Kotlin進行Android開發AndroidKotlin
- 如何找一個翻譯介面
- 只需6步,教你從零開發一個簽到小程式
- 給Android開發者的Flutter指南 (下) [翻譯]AndroidFlutter
- 給Android開發者的Flutter指南 (上) [翻譯]AndroidFlutter
- 短視訊程式開發,Android:呼叫系統拍照和相簿Android
- Android | 教你如何開發一鍵銀行卡繫結功能Android
- 土耳其英文翻譯'Turkey'和火雞是一個意思?安睿傑翻譯小課堂
- 如何寫一個js模組打包器(翻譯)JS
- Android | 教你如何開發掃二維碼功能Android
- Android | 教你如何用三十分鐘在安卓上開發一個微笑抓拍神器Android安卓
- 破解有道JS引數,教你用python自制一個翻譯軟體!JSPython
- 小程式新手 教你如何入手
- 如何開發健身房小程式?教你4步製作健身房約課小程式
- 1個開發如何撐起一個過億使用者的小程式
- 如何使用Flutter+Dart開發一個Android APPFlutterDartAndroidAPP
- 跑腿小程式如何開發
- Android 布 局 翻 譯 器Android
- android 拍照Android
- 【翻譯】使用React、 Redux 和 SVG 開發遊戲(一)ReactReduxSVG開發遊戲
- [譯] Android 實現顏色漸變的一個小 tipAndroid
- 中文翻譯英語的軟體哪個好?如何完成中翻譯英
- 如何完成中文翻譯日文線上翻譯
- python開發小程式流程如何?Python
- Kotlin(android)協程中文翻譯KotlinAndroid
- Android 教你如何發現 APP 卡頓AndroidAPP
- 從0開始,手把手教你開發並部署上線一個知識測驗微信小程式微信小程式
- [譯] 用 Flutter 開發你的第一個應用程式Flutter
- 1位開發如何撐起一個過億使用者的小程式?
- 用Python做一個翻譯軟體Python
- 分享一次批量文件翻譯的開發過程
- 從零到一開發vscode外掛變數翻譯VSCode變數
- 歷時一個月!又完成一個全棧開發的小程式!全棧
- 記一次翻譯工具的開發-有了它,實現實時翻譯還遠嗎?
- Android Camera——拍照Android
- 手把手教你構建一個音視訊小程式