在Flutter中使用多个本地HMS ML Kit翻译模型?

我定义了一个包装HMS ML Kit设备内翻译器的类。这个类有两个翻译器实例,分别使用两种不同的设置:

MLLocalTranslator translatorSend = new MLLocalTranslator();MLLocalTranslator translatorReceive = new MLLocalTranslator();MLTranslateSetting settingSend = new MLTranslateSetting();MLTranslateSetting settingReceive = new MLTranslateSetting();

translatorSend 将请求从一种语言(例如 it)翻译成英语(en)。translatorReceive 将请求的响应从 en 翻译成 it
然而,prepare 方法只下载了 en_it 翻译模型,而没有下载 it_en 模型(如果存在的话)。

HMSTranslator(String languageCode) {  settingSend.sourceLangCode = languageCode;  settingSend.targetLangCode = "en";  settingReceive.sourceLangCode = "en";  settingReceive.targetLangCode = languageCode;}Future<bool> prepare() async {  if(settingSend.sourceLangCode != settingSend.targetLangCode) {    bool isSendPrepared = await translatorSend.prepareModel(setting: settingSend)    bool isReceivePrepared = await translatorReceive.prepareModel(setting: settingReceive);    isPrepared = isSendPrepared && isReceivePrepared;  }  else {    isPrepared = false;  }  return isPrepared;}

问题出现在我使用 translatorSend 翻译字符串时。

Future<String> translateString(String stringToTranslate) async {  if(settingSend.sourceLangCode != settingSend.targetLangCode) {    String result;    if (isPrepared) {      result = await translatorSend.asyncTranslate(sourceText: stringToTranslate);    }    else {      settingSend.sourceTextOnRemote = stringToTranslate;      result = await sendRemoteTranslator.asyncTranslate(setting: settingSend);    }    return result;  }  else {    return stringToTranslate;  }}

这个方法应该将一个 it 字符串翻译成 en 字符串。然而,它似乎调用了 en_it 模型并且翻译失败:

I/flutter (28228): TRANSLATOR: it to enI/flutter (28228): TRANSLATOR: PREPAREDI/MLLocalTranslator(28228): translate sourceLanguage: en targetLanguage: itWHAT: vestiti usati -> vestiti usati  - WHERE applicazione -> applicazione 

将响应从 en 翻译成 it 是可以工作的。
我测试了其他语言,发现 fr 也存在同样的问题。
进一步的测试显示,es 可以正常工作:

WHAT: ropa usada -> Used clothing  - WHERE aplicación -> application 

回答:

请检查您是否使用的是Flutter插件的新版本。

语言包可以双向使用。例如,enit 可以用于 enititen 的翻译。

以下供您参考:

基于官方网站的插件Demo进行修改

通过多次调用同一实例来实现双向翻译。

//入口函数_translationMake() async {  try {    await _prepareModel_run("it","en","vestiti usati");    await _prepareModel_run("en","it","application");  } on Exception catch (e) {    print(e.toString());  }}_prepareModel_run(String srcLang, String dstLang, String content) async {  setting.sourceLangCode = srcLang;  setting.targetLangCode = dstLang;  try {    final bool res = await translator.prepareModel(setting: setting);     if (res) {      final String s = await _localTranslate_run(content);      if (s != null) {        print("_prepareModel_run " + content + " translate to "+s);      }    }else {      print("_prepareModel_run res false");    }  } on Exception catch (e) {    print(e.toString());  }}Future<String> _localTranslate_run(String Content) async {  try {    final String s =    await translator.syncTranslate(sourceText: Content);    if (s != null) {      _stopLocalTranslate();            setState(() => _translateResult = s);      return s;    } else {      print("no Translation");      setState(() => _translateResult = "no translation");      return "no translation";    }  } on Exception catch (e) {    print(e.toString());  }}

日志打印结果如下:

_prepareModel_run vestiti usati translate to Used clothes_prepareModel_run application translate to applicazione

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注