Flutter 中有多个本地 HMS ML Kit 翻译器模型?
Multiple local HMS ML Kit translator models in Flutter?
我定义了一个 class 来包装 HMS ML Kit 设备内翻译器。
这个 class 有两个翻译器实例,有两个不同的设置:
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 en
I/flutter (28228): TRANSLATOR: PREPARED
I/MLLocalTranslator(28228): translate sourceLanguage: en targetLanguage: it
WHAT: vestiti usati -> vestiti usati - WHERE applicazione -> applicazione
响应的翻译,从 en
到 it
有效。
我已经测试了其他语言,fr
.
也会发生这种情况
进一步的测试表明该过程适用于 es
:
WHAT: ropa usada -> Used clothing - WHERE aplicación -> application
我们可以使用 HMS ML 套件将文本翻译成不同的语言。以下是资料。可以参考。
ML 服务目前可以在 12 种语言之间翻译文本:简体中文、英语、法语、阿拉伯语、泰语、西班牙语、土耳其语、葡萄牙语、日语、德语、意大利语和俄语。
第 1 步:从 UI 获取文本并提供给 ML 模型
第 2 步:在 API 调用服务器
之前设置参数
· 源语言代码
· 所需语言代码
· 需要翻译的字符串。
第 3 步:API 数据到达服务器后,ML 模型将文本转换为所需的输出
第 4 步:服务器 returns 将翻译输出到应用程序。
第 5 步:应用程序将输出显示到 UI。
注意事项:机器学习模型存储在云端。进行了 Internet 调用,因此需要其许可。
为了 运行 构建和 运行 项目
,您必须进行以下更改
打开 App.gradle 文件并将此行添加到顶部。
应用插件:'com.huawei.agconnect'
要使用文本翻译服务,请将此依赖项添加到 pro
实施'com.huawei.hms:ml-computer-translate:1.0.3.300'
正在创建 MLRemoteTranslateSetting 对象,它将源语言作为 setSourceLangCode() 并将输出语言作为 setTargetLangCode()
MLRemoteTranslator 对象是通过将先前创建的 MLRemoteTranslateSetting 对象传递给它而创建的。
您可以创建一个任务,其中 mlRemoteTranslator 将通过 asyncTranslate() 进行异步调用,我们将提供用户字符串作为此方法的输入。
此任务将产生 2 个回调
addOnSuccessListener
addOnFailureListener
顾名思义,您可以在成功侦听器中添加代码,也可以在失败侦听器中添加 notification/Log。
对于 Flutter:
首先:
在 initState 中创建 MlTranslatorSettings 对象和实例
第二:
为翻译器设置设置,例如,翻译的初始语言和最终语言,请参见下面的示例。
属性中可以自定义地图类型、控件、相机位置、初始位置等
这里还有一些详细信息。关于如何将 HMS ML kit 与 Flutter 结合使用:
Link希望对你有所帮助
请检查您是否使用了新版本的Flutter插件
语言包可以双向使用。例如,en
-it
可用于 en
到 it
或 it
到 en
。
以下内容供您参考:
根据官网插件Demo修改
同一个实例多次调用双向翻译
//Entry function
_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
我定义了一个 class 来包装 HMS ML Kit 设备内翻译器。 这个 class 有两个翻译器实例,有两个不同的设置:
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 en
I/flutter (28228): TRANSLATOR: PREPARED
I/MLLocalTranslator(28228): translate sourceLanguage: en targetLanguage: it
WHAT: vestiti usati -> vestiti usati - WHERE applicazione -> applicazione
响应的翻译,从 en
到 it
有效。
我已经测试了其他语言,fr
.
也会发生这种情况
进一步的测试表明该过程适用于 es
:
WHAT: ropa usada -> Used clothing - WHERE aplicación -> application
我们可以使用 HMS ML 套件将文本翻译成不同的语言。以下是资料。可以参考。
ML 服务目前可以在 12 种语言之间翻译文本:简体中文、英语、法语、阿拉伯语、泰语、西班牙语、土耳其语、葡萄牙语、日语、德语、意大利语和俄语。
第 1 步:从 UI 获取文本并提供给 ML 模型
第 2 步:在 API 调用服务器
之前设置参数· 源语言代码
· 所需语言代码
· 需要翻译的字符串。
第 3 步:API 数据到达服务器后,ML 模型将文本转换为所需的输出
第 4 步:服务器 returns 将翻译输出到应用程序。
第 5 步:应用程序将输出显示到 UI。
注意事项:机器学习模型存储在云端。进行了 Internet 调用,因此需要其许可。
为了 运行 构建和 运行 项目
,您必须进行以下更改打开 App.gradle 文件并将此行添加到顶部。
应用插件:'com.huawei.agconnect'
要使用文本翻译服务,请将此依赖项添加到 pro
实施'com.huawei.hms:ml-computer-translate:1.0.3.300'
正在创建 MLRemoteTranslateSetting 对象,它将源语言作为 setSourceLangCode() 并将输出语言作为 setTargetLangCode()
MLRemoteTranslator 对象是通过将先前创建的 MLRemoteTranslateSetting 对象传递给它而创建的。
您可以创建一个任务,其中 mlRemoteTranslator 将通过 asyncTranslate() 进行异步调用,我们将提供用户字符串作为此方法的输入。
此任务将产生 2 个回调
addOnSuccessListener
addOnFailureListener
顾名思义,您可以在成功侦听器中添加代码,也可以在失败侦听器中添加 notification/Log。
对于 Flutter:
首先:
在 initState 中创建 MlTranslatorSettings 对象和实例
第二:
为翻译器设置设置,例如,翻译的初始语言和最终语言,请参见下面的示例。
属性中可以自定义地图类型、控件、相机位置、初始位置等
这里还有一些详细信息。关于如何将 HMS ML kit 与 Flutter 结合使用: Link希望对你有所帮助
请检查您是否使用了新版本的Flutter插件
语言包可以双向使用。例如,en
-it
可用于 en
到 it
或 it
到 en
。
以下内容供您参考:
根据官网插件Demo修改
同一个实例多次调用双向翻译
//Entry function
_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