Android 语言检测指南

MediaPipe Language Detector 任务可让您识别一段文本所用的语言。以下说明介绍了如何在 Android 应用中使用语言检测器。GitHub 上提供了这些说明中介绍的代码示例。

您可以观看演示,了解此任务的实际运用。如需详细了解此任务的功能、模型和配置选项,请参阅概览

代码示例

Language Detector 的示例代码提供了此任务的简单实现,供您参考。此代码可帮助您测试此任务,并开始构建您自己的语言检测功能。您可以在 GitHub 上浏览语言检测器示例代码

下载代码

以下说明介绍了如何使用 git 版本控制命令行工具创建示例代码的本地副本。

如需下载示例代码,请执行以下操作:

  1. 使用以下命令克隆 Git 代码库:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. (可选)将您的 Git 实例配置为使用稀疏结账,这样您就只有 Language Detector 示例应用的文件:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/languagedetector/android
    

如需了解如何使用 Android Studio 设置和运行示例,请参阅 Android 设置指南中的示例代码设置说明。

关键组件

以下文件包含文本分类示例应用的关键代码:

初始设置

本部分介绍了专门针对使用语言检测器来设置开发环境和代码项目的关键步骤。如需了解如何为使用 MediaPipe 任务设置开发环境的一般信息(包括平台版本要求),请参阅 Android 设置指南

依赖项

语言检测器使用 com.google.mediapipe:tasks-text 库。将此依赖项添加到 Android 应用开发项目的 build.gradle 文件中。您可以使用以下代码导入所需的依赖项:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

模型

MediaPipe 语言检测器任务需要使用与此任务兼容的经过训练的模型。如需详细了解适用于语言检测器的经过训练的模型,请参阅任务概览“模型”部分

选择并下载模型,然后将其存储在项目目录中:

<dev-project-root>/src/main/assets

ModelName 参数中指定模型的路径。

创建任务

您可以使用其中一个 createFrom...() 函数来创建任务。createFromOptions() 函数接受语言检测器的配置选项。您还可以使用 createFromFile() 工厂函数初始化任务。createFromFile() 函数接受经过训练的模型文件的相对或绝对路径。如需详细了解如何配置任务,请参阅配置选项

以下代码演示了如何创建和配置此任务。

// For creating a language detector instance:
LanguageDetectorOptions options =
       LanguageDetectorOptions.builder()
       .setBaseOptions(
          BaseOptions.builder()
            .setModelAssetPath(modelPath)
            .build()
          )
       .build();
LanguageDetector languageDetector = LanguageDetector.createFromOptions(context, options);

您可以在代码示例 LanguageDetectorHelperinitDetector() 函数中查看创建任务的示例。

配置选项

此任务具有以下 Android 应用的配置选项:

选项名称 说明 值范围 默认值
maxResults 设置要返回的得分最高的语言预测结果(可选)上限。如果此值小于零,则返回所有可用的结果。 任何正数 -1
scoreThreshold 设置预测分数阈值,以替换模型元数据中提供的阈值(如果有)。低于此值的结果会被拒绝。 任意浮点数 未设置
categoryAllowlist 设置允许的语言代码的可选列表。如果为非空,则语言代码不在此集合之外的语言预测结果将被滤除。此选项与 categoryDenylist 互斥,同时使用这两者会导致错误。 任何字符串 未设置
categoryDenylist 设置不允许使用的语言代码的可选列表。如果非空,语言代码在此集合中的语言预测将被滤除。此选项与 categoryAllowlist 互斥,同时使用这两者会导致错误。 任何字符串 未设置

准备数据

语言检测器支持文本 (String) 数据。该任务会处理数据输入预处理,包括标记化和张量预处理。所有预处理都在 detect() 函数中处理。无需事先对输入文本进行额外的预处理。

String inputText = "Some input text for the language detector";

运行任务

语言检测器使用 LanguageDetector.detect() 方法处理输入文本并预测文本的语言。您应使用单独的执行线程来执行检测,以免您的应用阻塞 Android 界面线程。

以下代码演示了如何使用单独的执行线程通过任务模型执行处理。

// Predict the language of the input text.
fun classify(text: String) {
    executor = ScheduledThreadPoolExecutor(1)

    executor.execute {
        val results = languageDetector.detect(text)
        listener.onResult(results)
    }
}

您可以在代码示例 LanguageDetectorHelperdetect() 函数中查看如何运行任务的示例。

处理和显示结果

语言检测器输出一个 LanguageDetectorResult,其中包含语言预测列表以及这些预测的概率。语言类别在模型中定义,请参阅任务概览的“模型”部分,详细了解您使用的模型。

下面显示了此任务的输出数据示例:

LanguageDetectorResult:
  LanguagePrediction #0:
    language_code: "fr"
    probability: 0.999781

通过对输入文本运行模型可获得此结果:"Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent."

您可以查看代码示例 ResultsAdapter 类和 ViewHolder 内部类,查看如何显示结果的示例。