【安卓】随心译——无广告的专属实时翻译神器

随心译——无广告的专属实时翻译神器

华为开发者论坛发布于 今天 02:28

前言


随心译是一款集语音识别、文本翻译和语音合成于一体的实时翻译应用,支持多国语言间的实时对话翻译与文本翻译,适用于出国旅行、社交交流、语言学习等等场合。

借助Huawei HMS Core ML Kit,任何人都可以简单便捷的使用原本十分复杂的机器学习能力,助力开发者更快更好地开发各类AI应用。

场景


当你在工作中遇到翻译问题而无法解决,当你想要出国旅游却因为语言问题而迟迟做不出决定。

开发准备


1.配置华为Maven仓地址
2.添加编译SDK依赖

打开应用级的“build.gradle”文件

1    dependencies {

2 ...

3 // 引入实时语音识别服务插件

4 implementation 'com.huawei.hms:ml-computer-voice-asr-plugin:2.0.3.300'

5 // 引入文本翻译服务SDK

6 implementation 'com.huawei.hms:ml-computer-translate:2.0.4.300'

7 // 引入文本翻译算法包

8 implementation 'com.huawei.hms:ml-computer-translate-model:2.0.4.300'

9 // 引入语音合成服务SDK

10 implementation 'com.huawei.hms:ml-computer-voice-tts:2.0.4.300'

11 // 引入离线语音合成bee语音包

12 implementation 'com.huawei.hms:ml-computer-voice-tts-model-bee:2.0.4.300'

13 }

上述步骤可以参考开发者网站中的应用开发介绍
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/config-agc-0000001050990353-V5

3.在AndroidManifest.xml中添加权限
打开main中的AndroidManifest.xml文件,在<application 前添加所需的权限

1    <uses-permissionandroid:name="android.permission.INTERNET"/><!-- 访问网络 -->

2 <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><!-- 获取网络状态 -->

3 <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 升级算法版本 -->

4 <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><!-- 获取Wi-Fi状态 -->

5 <uses-permissionandroid:name="android.permission.RECORD_AUDIO"/><!-- 通过录音机获取声音 -->

开发步骤


页面设计

参考activity_main.xml布局文件,设计自己专属好用的页面app页面

【安卓】随心译——无广告的专属实时翻译神器

点击“开始识别”按钮,加载ASR模块,识别用户说话的内容。
点击“合成语音”,加载TTS模块,把翻译后的内容直接朗读出来。

功能开发

  1. 使用实时语音识别服务插件,快速集成ASR能力

1    publicvoidstartAsr(View view){

2 // 通过intent进行识别设置。

3 Intent intent =newIntent(this,MLAsrCaptureActivity.class)

4 // 设置识别语言为英语,若不设置,则默认识别英语。支持设置:"zh-CN":中文;"en-US":英语;"fr-FR":法语;"es-ES":西班牙语;"de-DE":德语;"it-IT":意大利语。

5 .putExtra(MLAsrCaptureConstants.LANGUAGE,Constants.ASR_SOURCE[spinnerInput.getSelectedItemPosition()])

6 // 设置拾音界面是否显示识别结果,MLAsrCaptureConstants.FEATURE_ALLINONE为不显示,MLAsrCaptureConstants.FEATURE_WORDFLUX为显示。

7 .putExtra(MLAsrCaptureConstants.FEATURE,MLAsrCaptureConstants.FEATURE_WORDFLUX);

8 // 100表示当前Activity和拾音界面Activity之间的请求码,通过该码可以在当前Activity中获取拾音界面的处理结果。

9 startActivityForResult(intent,100);

10 }

11

12 @Override

13 protectedvoidonActivityResult(int requestCode,int resultCode,Intent data){

14 super.onActivityResult(requestCode, resultCode, data);

15 String text;

16 // 100是第2步中定义的当前Activity和拾音界面Activity之间的请求码。

17 if(requestCode ==100){

18 switch(resultCode){

19 // 返回值为MLAsrCaptureConstants.ASR_SUCCESS表示识别成功。

20 caseMLAsrCaptureConstants.ASR_SUCCESS:

21 if(data !=null){

22 Bundle bundle = data.getExtras();

23 // 获取语音识别得到的文本信息。

24 if(bundle !=null&& bundle.containsKey(MLAsrCaptureConstants.ASR_RESULT)){

25 text = bundle.getString(MLAsrCaptureConstants.ASR_RESULT);

26 // 识别得到的文本信息处理。

27 textViewInput.setText(text);

28 Translation.run(this, textViewOutput, spinnerInput.getSelectedItemPosition(),

29 spinnerOutput.getSelectedItemPosition(), text);

30 }

31 }

32 break;

33 ...

34 }

35 }

36 }

  1. 新建Translation类,用于调用文本翻译的能力

首先暴露公共方法,根据参数判断使用在线翻译或者离线翻译

1 public static void run(Activity activity, TextView textView, int sourcePosition, int targetPosition, String sourceText) {

2 Log.d(TAG, Constants.TRANSLATE[sourcePosition] + ", " + Constants.TRANSLATE[targetPosition] + ", " + sourceText);

3 if (isOffline) {

4 onDeviceTranslation(activity, textView, sourcePosition, targetPosition, sourceText);

5 } else {

6 realTimeTranslation(textView, sourcePosition, targetPosition, sourceText);

7 }

8 }

接着分别引入在线和离线翻译的具体方法

1    private static void realTimeTranslation(final TextView textView, int sourcePosition, final int targetPosition, String sourceText) {

2 Log.d(TAG, "realTimeTranslation");

3 ...

4 }

5

6 private static void onDeviceTranslation(final Activity activity, final TextView textView, final int sourcePosition, final int targetPosition, final String sourceText) {

7 Set<String> result = MLTranslateLanguage.syncGetLocalAllLanguages();

8 Log.d(TAG, "本地离线翻译支持的语种: " + Arrays.toString(result.toArray()));

9 ...

10 }

3.新建TTS类,用于调用语音合成的能力
同Translation一样,首先暴露公共方法,根据参数判断使用在线语音合成或者离线语音合成

1    publicstaticvoidrun(Activity activity,int targetPosition,String sourceText){

2 Log.d(TAG, sourceText);

3 if(isNotAuto || sourceText.isEmpty()){

4 return;

5 }

6 if(isOffline){

7 if(0== targetPosition){

8 Toast.makeText(activity,"暂不支持离线中文发音",Toast.LENGTH_SHORT).show();

9 return;

10 }

11 offlineTts(activity,Constants.TTS_TARGET[targetPosition],

12 Constants.TTS_TARGET_SPEAKER_OFFLINE[targetPosition], sourceText);

13 }else{

14 onlineTts(Constants.TTS_TARGET[targetPosition],Constants.TTS_TARGET_SPEAKER[targetPosition], sourceText);

15 }

16 }

接着,分别引入在线和离线语音合成的具体实现

1    privatestaticvoidonlineTts(String language,String person,String sourceText){

2 Log.d(TAG, language +", "+ person +", "+ sourceText);

3 ...

4 }

5

6 privatestaticvoidofflineTts(finalActivity activity,String language,finalString person,finalString sourceText){

7 // 使用自定义参数配置创建语音合成引擎。

8 // 发音人名称请参见“音色试听”章节。

9 finalMLTtsConfig mlTtsConfig =newMLTtsConfig().setLanguage(language)

10 .setPerson(person)

11 // 设置语音合成的模式为离线模式,不设置默认为在线模式。

12 .setSynthesizeMode(MLTtsConstants.TTS_OFFLINE_MODE);

13 ...

14 }

最终效果


【安卓】随心译——无广告的专属实时翻译神器

源码


参与开发者讨论请到Reddit社区:
https://www.reddit.com/r/HMSCore/
下载demo和示例代码请到Git:
https://github.com/HMS-Core
解决集成问题请到Stack Overflow:
https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest


原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0201445556538420539?fid=18

原作者:胡椒

android

阅读 27发布于 今天 02:28

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议


华为开发者论坛

华为开发者论坛是一个为开发者提供信息传播、开发交流、技术分享的交流空间。开发者可以在此获取技术干...

avatar

华为开发者论坛

华为开发者论坛是一个为开发者提供信息传播、开发交流、技术分享的交流空间。开发者可以在此获取技术干货、华为源码开放、HMS最新活动等信息,欢迎大家来交流分享!

296 声望

24 粉丝

0 条评论

得票时间

avatar

华为开发者论坛

华为开发者论坛是一个为开发者提供信息传播、开发交流、技术分享的交流空间。开发者可以在此获取技术干货、华为源码开放、HMS最新活动等信息,欢迎大家来交流分享!

296 声望

24 粉丝

宣传栏

前言


随心译是一款集语音识别、文本翻译和语音合成于一体的实时翻译应用,支持多国语言间的实时对话翻译与文本翻译,适用于出国旅行、社交交流、语言学习等等场合。

借助Huawei HMS Core ML Kit,任何人都可以简单便捷的使用原本十分复杂的机器学习能力,助力开发者更快更好地开发各类AI应用。

场景


当你在工作中遇到翻译问题而无法解决,当你想要出国旅游却因为语言问题而迟迟做不出决定。

开发准备


1.配置华为Maven仓地址
2.添加编译SDK依赖

打开应用级的“build.gradle”文件

1    dependencies {

2 ...

3 // 引入实时语音识别服务插件

4 implementation 'com.huawei.hms:ml-computer-voice-asr-plugin:2.0.3.300'

5 // 引入文本翻译服务SDK

6 implementation 'com.huawei.hms:ml-computer-translate:2.0.4.300'

7 // 引入文本翻译算法包

8 implementation 'com.huawei.hms:ml-computer-translate-model:2.0.4.300'

9 // 引入语音合成服务SDK

10 implementation 'com.huawei.hms:ml-computer-voice-tts:2.0.4.300'

11 // 引入离线语音合成bee语音包

12 implementation 'com.huawei.hms:ml-computer-voice-tts-model-bee:2.0.4.300'

13 }

上述步骤可以参考开发者网站中的应用开发介绍
https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides-V5/config-agc-0000001050990353-V5

3.在AndroidManifest.xml中添加权限
打开main中的AndroidManifest.xml文件,在<application 前添加所需的权限

1    <uses-permissionandroid:name="android.permission.INTERNET"/><!-- 访问网络 -->

2 <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><!-- 获取网络状态 -->

3 <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 升级算法版本 -->

4 <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><!-- 获取Wi-Fi状态 -->

5 <uses-permissionandroid:name="android.permission.RECORD_AUDIO"/><!-- 通过录音机获取声音 -->

开发步骤


页面设计

参考activity_main.xml布局文件,设计自己专属好用的页面app页面

【安卓】随心译——无广告的专属实时翻译神器

点击“开始识别”按钮,加载ASR模块,识别用户说话的内容。
点击“合成语音”,加载TTS模块,把翻译后的内容直接朗读出来。

功能开发

  1. 使用实时语音识别服务插件,快速集成ASR能力

1    publicvoidstartAsr(View view){

2 // 通过intent进行识别设置。

3 Intent intent =newIntent(this,MLAsrCaptureActivity.class)

4 // 设置识别语言为英语,若不设置,则默认识别英语。支持设置:"zh-CN":中文;"en-US":英语;"fr-FR":法语;"es-ES":西班牙语;"de-DE":德语;"it-IT":意大利语。

5 .putExtra(MLAsrCaptureConstants.LANGUAGE,Constants.ASR_SOURCE[spinnerInput.getSelectedItemPosition()])

6 // 设置拾音界面是否显示识别结果,MLAsrCaptureConstants.FEATURE_ALLINONE为不显示,MLAsrCaptureConstants.FEATURE_WORDFLUX为显示。

7 .putExtra(MLAsrCaptureConstants.FEATURE,MLAsrCaptureConstants.FEATURE_WORDFLUX);

8 // 100表示当前Activity和拾音界面Activity之间的请求码,通过该码可以在当前Activity中获取拾音界面的处理结果。

9 startActivityForResult(intent,100);

10 }

11

12 @Override

13 protectedvoidonActivityResult(int requestCode,int resultCode,Intent data){

14 super.onActivityResult(requestCode, resultCode, data);

15 String text;

16 // 100是第2步中定义的当前Activity和拾音界面Activity之间的请求码。

17 if(requestCode ==100){

18 switch(resultCode){

19 // 返回值为MLAsrCaptureConstants.ASR_SUCCESS表示识别成功。

20 caseMLAsrCaptureConstants.ASR_SUCCESS:

21 if(data !=null){

22 Bundle bundle = data.getExtras();

23 // 获取语音识别得到的文本信息。

24 if(bundle !=null&& bundle.containsKey(MLAsrCaptureConstants.ASR_RESULT)){

25 text = bundle.getString(MLAsrCaptureConstants.ASR_RESULT);

26 // 识别得到的文本信息处理。

27 textViewInput.setText(text);

28 Translation.run(this, textViewOutput, spinnerInput.getSelectedItemPosition(),

29 spinnerOutput.getSelectedItemPosition(), text);

30 }

31 }

32 break;

33 ...

34 }

35 }

36 }

  1. 新建Translation类,用于调用文本翻译的能力

首先暴露公共方法,根据参数判断使用在线翻译或者离线翻译

1 public static void run(Activity activity, TextView textView, int sourcePosition, int targetPosition, String sourceText) {

2 Log.d(TAG, Constants.TRANSLATE[sourcePosition] + ", " + Constants.TRANSLATE[targetPosition] + ", " + sourceText);

3 if (isOffline) {

4 onDeviceTranslation(activity, textView, sourcePosition, targetPosition, sourceText);

5 } else {

6 realTimeTranslation(textView, sourcePosition, targetPosition, sourceText);

7 }

8 }

接着分别引入在线和离线翻译的具体方法

1    private static void realTimeTranslation(final TextView textView, int sourcePosition, final int targetPosition, String sourceText) {

2 Log.d(TAG, "realTimeTranslation");

3 ...

4 }

5

6 private static void onDeviceTranslation(final Activity activity, final TextView textView, final int sourcePosition, final int targetPosition, final String sourceText) {

7 Set<String> result = MLTranslateLanguage.syncGetLocalAllLanguages();

8 Log.d(TAG, "本地离线翻译支持的语种: " + Arrays.toString(result.toArray()));

9 ...

10 }

3.新建TTS类,用于调用语音合成的能力
同Translation一样,首先暴露公共方法,根据参数判断使用在线语音合成或者离线语音合成

1    publicstaticvoidrun(Activity activity,int targetPosition,String sourceText){

2 Log.d(TAG, sourceText);

3 if(isNotAuto || sourceText.isEmpty()){

4 return;

5 }

6 if(isOffline){

7 if(0== targetPosition){

8 Toast.makeText(activity,"暂不支持离线中文发音",Toast.LENGTH_SHORT).show();

9 return;

10 }

11 offlineTts(activity,Constants.TTS_TARGET[targetPosition],

12 Constants.TTS_TARGET_SPEAKER_OFFLINE[targetPosition], sourceText);

13 }else{

14 onlineTts(Constants.TTS_TARGET[targetPosition],Constants.TTS_TARGET_SPEAKER[targetPosition], sourceText);

15 }

16 }

接着,分别引入在线和离线语音合成的具体实现

1    privatestaticvoidonlineTts(String language,String person,String sourceText){

2 Log.d(TAG, language +", "+ person +", "+ sourceText);

3 ...

4 }

5

6 privatestaticvoidofflineTts(finalActivity activity,String language,finalString person,finalString sourceText){

7 // 使用自定义参数配置创建语音合成引擎。

8 // 发音人名称请参见“音色试听”章节。

9 finalMLTtsConfig mlTtsConfig =newMLTtsConfig().setLanguage(language)

10 .setPerson(person)

11 // 设置语音合成的模式为离线模式,不设置默认为在线模式。

12 .setSynthesizeMode(MLTtsConstants.TTS_OFFLINE_MODE);

13 ...

14 }

最终效果


【安卓】随心译——无广告的专属实时翻译神器

源码


参与开发者讨论请到Reddit社区:
https://www.reddit.com/r/HMSCore/
下载demo和示例代码请到Git:
https://github.com/HMS-Core
解决集成问题请到Stack Overflow:
https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest


原文链接:https://developer.huawei.com/consumer/cn/forum/topic/0201445556538420539?fid=18

原作者:胡椒

以上是 【安卓】随心译——无广告的专属实时翻译神器 的全部内容, 来源链接: utcz.com/a/113186.html

回到顶部