Flutter谷歌机器学习翻译插件google_mlkit_translation的使用

发布于 1周前 作者 bupafengyu 来自 Flutter

Flutter谷歌机器学习翻译插件google_mlkit_translation的使用

Google’s ML Kit On-Device Translation for Flutter

Pub Version analysis Star on Github License: MIT

这是一个Flutter插件,用于在设备上使用Google的ML Kit进行文本翻译。该插件支持超过50种语言之间的动态翻译。

重要说明

  1. 平台支持:Google的ML Kit仅支持移动平台(iOS和Android应用)。Web或其他平台不受支持。
  2. 维护者:此插件不是由Google赞助或维护的。作者是热衷于机器学习的开发者,他们希望将Google的原生API暴露给Flutter。
  3. 平台通道:此插件使用Flutter平台通道来传递消息。所有机器学习处理都在原生平台上完成,而不是在Flutter/Dart中。

要求

iOS

  • 最低iOS部署目标:15.5.0
  • Xcode 15.3.0 或更新版本
  • Swift 5
  • ML Kit不支持32位架构(i386和armv7),只支持64位架构(x86_64和arm64)

在Xcode中排除armv7架构:

platform :ios, '15.5.0'

$iOSVersion = '15.5.0'

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=*]"] = "armv7"
    config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
  end

  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    target.build_configurations.each do |config|
      if Gem::Version.new($iOSVersion) > Gem::Version.new(config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'])
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
      end
    end
  end
end

Android

  • minSdkVersion: 21
  • targetSdkVersion: 33
  • compileSdkVersion: 34

使用指南

On-Device Translation

创建OnDeviceTranslator实例

import 'package:google_mlkit_translation/google_mlkit_translation.dart';

final TranslateLanguage sourceLanguage = TranslateLanguage.chinese;
final TranslateLanguage targetLanguage = TranslateLanguage.english;

final onDeviceTranslator = OnDeviceTranslator(
  sourceLanguage: sourceLanguage,
  targetLanguage: targetLanguage,
);

处理文本

String textToTranslate = "你好,世界!";
String translatedText = await onDeviceTranslator.translateText(textToTranslate);
print(translatedText); // 输出: Hello, world!

释放资源

await onDeviceTranslator.close();

管理远程模型

创建ModelManager实例

final modelManager = OnDeviceTranslatorModelManager();

检查模型是否已下载

bool isDownloaded = await modelManager.isModelDownloaded(TranslateLanguage.english.bcpCode);
print(isDownloaded); // 输出: true/false

下载模型

bool downloadSuccess = await modelManager.downloadModel(TranslateLanguage.english.bcpCode);
print(downloadSuccess); // 输出: true/false

删除模型

bool deleteSuccess = await modelManager.deleteModel(TranslateLanguage.english.bcpCode);
print(deleteSuccess); // 输出: true/false

示例应用

你可以在这里找到完整的示例应用:Example App

完整示例代码

以下是一个完整的示例代码,展示了如何使用google_mlkit_translation插件进行文本翻译:

import 'package:flutter/material.dart';
import 'package:google_mlkit_translation/google_mlkit_translation.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TranslationScreen(),
    );
  }
}

class TranslationScreen extends StatefulWidget {
  @override
  _TranslationScreenState createState() => _TranslationScreenState();
}

class _TranslationScreenState extends State<TranslationScreen> {
  final TextEditingController _textEditingController = TextEditingController();
  String _translatedText = '';

  final TranslateLanguage sourceLanguage = TranslateLanguage.chinese;
  final TranslateLanguage targetLanguage = TranslateLanguage.english;

  late OnDeviceTranslator _onDeviceTranslator;

  @override
  void initState() {
    super.initState();
    _initializeTranslator();
  }

  Future<void> _initializeTranslator() async {
    _onDeviceTranslator = OnDeviceTranslator(
      sourceLanguage: sourceLanguage,
      targetLanguage: targetLanguage,
    );

    // 检查并下载模型
    final modelManager = OnDeviceTranslatorModelManager();
    bool isDownloaded = await modelManager.isModelDownloaded(sourceLanguage.bcpCode);
    if (!isDownloaded) {
      await modelManager.downloadModel(sourceLanguage.bcpCode);
    }
    isDownloaded = await modelManager.isModelDownloaded(targetLanguage.bcpCode);
    if (!isDownloaded) {
      await modelManager.downloadModel(targetLanguage.bcpCode);
    }
  }

  Future<void> _translateText() async {
    String textToTranslate = _textEditingController.text.trim();
    if (textToTranslate.isNotEmpty) {
      try {
        String translatedText = await _onDeviceTranslator.translateText(textToTranslate);
        setState(() {
          _translatedText = translatedText;
        });
      } catch (e) {
        print('Error translating text: $e');
      }
    }
  }

  @override
  void dispose() {
    _onDeviceTranslator.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Google ML Kit Translation Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _textEditingController,
              decoration: InputDecoration(labelText: 'Enter text to translate'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _translateText,
              child: Text('Translate'),
            ),
            SizedBox(height: 20),
            Text(
              'Translated Text:',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 10),
            Text(
              _translatedText,
              style: TextStyle(fontSize: 16),
            ),
          ],
        ),
      ),
    );
  }
}

这个示例展示了如何创建一个简单的Flutter应用程序,用户可以在其中输入文本并点击按钮进行翻译。翻译结果会显示在界面上。希望这个示例能帮助你更好地理解和使用google_mlkit_translation插件。


更多关于Flutter谷歌机器学习翻译插件google_mlkit_translation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter谷歌机器学习翻译插件google_mlkit_translation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用google_mlkit_translation插件来实现谷歌机器学习翻译功能的代码案例。这个插件允许你使用谷歌的ML Kit进行文本翻译。

首先,你需要在你的Flutter项目中添加google_mlkit_translation依赖。打开你的pubspec.yaml文件,并添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  google_mlkit_translation: ^0.x.x  # 请使用最新版本号

然后,运行flutter pub get来安装依赖。

接下来,你需要在你的Android项目中添加一些配置以启用ML Kit翻译功能。打开android/app/src/main/AndroidManifest.xml文件,并添加以下权限(如果尚未添加):

<uses-permission android:name="android.permission.INTERNET"/>

然后,在你的Flutter代码中,你可以按照以下步骤使用google_mlkit_translation插件:

import 'package:flutter/material.dart';
import 'package:google_mlkit_translation/google_mlkit_translation.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TranslationScreen(),
    );
  }
}

class TranslationScreen extends StatefulWidget {
  @override
  _TranslationScreenState createState() => _TranslationScreenState();
}

class _TranslationScreenState extends State<TranslationScreen> {
  final TextEditingController _textController = TextEditingController();
  String _translatedText = '';

  void _translateText() async {
    String sourceText = _textController.text;
    if (sourceText.isEmpty) {
      return;
    }

    // 配置翻译选项
    final TranslationOptions options = TranslationOptions(
      sourceLanguage: TranslationLanguage.english, // 源语言
      targetLanguage: TranslationLanguage.spanish,  // 目标语言
    );

    try {
      // 执行翻译
      final TranslationResult result = await TranslationTranslator.translate(sourceText, options);
      setState(() {
        _translatedText = result.translatedText;
      });
    } catch (e) {
      print("Translation failed: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Google ML Kit Translation Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              controller: _textController,
              decoration: InputDecoration(labelText: 'Enter text to translate'),
              maxLines: 4,
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _translateText,
              child: Text('Translate'),
            ),
            SizedBox(height: 16),
            Text(
              'Translated Text:',
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            Text(_translatedText),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它包含一个文本输入框用于输入要翻译的文本,一个按钮用于触发翻译,以及一个文本显示区域用于显示翻译后的文本。

  • TextEditingController用于管理文本输入。
  • TranslationOptions用于指定源语言和目标语言。
  • TranslationTranslator.translate方法用于执行翻译操作。

请确保你使用的是最新版本的google_mlkit_translation插件,因为API和插件的功能可能会随时间变化。你可以通过查看插件的官方文档来获取最新的信息和示例。

回到顶部