Android 語言偵測指南

MediaPipe 語言偵測器工作可讓您識別一段文字的語言。以下操作說明將說明如何搭配使用語言偵測器與 Android 應用程式。如需這些操作說明中提及的程式碼範例,請前往 GitHub

如要查看這項工作的運作情形,請查看示範。如要進一步瞭解這項工作的功能、模型和設定選項,請參閱總覽

程式碼範例

語言偵測工具的範例程式碼提供這項工作的簡易實作方式。這段程式碼可協助您測試這項工作,並開始建構自己的語言偵測功能。您可以瀏覽 GitHub 上的語言偵測器範例程式碼

下載程式碼

以下說明如何使用 git 版本控制指令列工具建立範例程式碼的本機副本。

如要下載範例程式碼,請按照下列步驟操作:

  1. 使用下列指令複製 Git 存放區:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. 您可以選擇將 Git 執行個體設為使用稀疏檢查,因此只有語言偵測工具範例應用程式的檔案:
    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 Language Detector 工作需要使用與這項工作相容的已訓練模型。如要進一步瞭解語言偵測器的可用已訓練模型,請參閱工作總覽「模型」一節

選取並下載模型,然後將其儲存在專案目錄中:

<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);

您可以在程式碼範例 LanguageDetectorHelper 類別 initDetector() 函式中查看如何建立工作的範例。

設定選項

這項工作的 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)
    }
}

您可以在 LanguageDetectorHelper 類別 detect() 函式的程式碼範例中查看如何執行工作的範例。

處理並顯示結果

語言偵測工具會輸出 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 內部類別中顯示結果。