Przewodnik wykrywania języka w Androidzie

Zadanie Wykrywacz języka MediaPipe pozwala określić język tekstu. Poniżej znajdziesz instrukcje, jak używać Wykrywacza języka w aplikacjach na Androida. Przykładowy kod opisany w tych instrukcjach jest dostępny na GitHub.

Aby zobaczyć, jak działa to zadanie, obejrzyj prezentację. Więcej informacji o możliwościach, modelach i opcjach konfiguracji tego zadania znajdziesz w sekcji Omówienie.

Przykładowy kod

Przykładowy kod narzędzia do wykrywania języka zawiera proste wdrożenie tego zadania. Ten kod pomoże Ci przetestować to zadanie i rozpocząć tworzenie własnej funkcji wykrywania języka. Przykładowy kod narzędzia do wykrywania języka możesz przejrzeć na GitHubie.

Pobieranie kodu

Z instrukcji poniżej dowiesz się, jak utworzyć lokalną kopię przykładowego kodu za pomocą narzędzia wiersza poleceń git do kontroli wersji.

Aby pobrać przykładowy kod:

  1. Sklonuj repozytorium git za pomocą tego polecenia:
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. Opcjonalnie skonfiguruj instancję git tak, aby używała rozproszonego procesu płatności, aby mieć tylko pliki dla przykładowej aplikacji do wykrywania języka:
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/languagedetector/android
    

Instrukcje konfigurowania i uruchamiania przykładowego kodu w Android Studio znajdziesz w przewodniku konfiguracji na Androida.

Kluczowe elementy

Te pliki zawierają kluczowy kod aplikacji przykładowej do klasyfikacji tekstu:

Konfiguracja

W tej sekcji opisujemy najważniejsze czynności, jakie należy wykonać, aby skonfigurować środowisko programistyczne i projekty kodu z myślą o wykrywaniu języka. Ogólne informacje o konfigurowaniu środowiska programistycznego na potrzeby zadań MediaPipe, w tym o wymaganiach dotyczących wersji platformy, znajdziesz w przewodniku konfiguracji na Androida.

Zależności

Funkcja do wykrywania języka korzysta z bibliotek com.google.mediapipe:tasks-text. Dodaj tę zależność do pliku build.gradle swojego projektu na Androida. Możesz zaimportować wymagane zależności za pomocą tego kodu:

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

Model

Zadanie MediaPipe Language Detector wymaga wytrenowanego modelu, który jest zgodny z tym zadaniem. Więcej informacji o dostępnych wytrenowanych modelach dotyczących funkcji wykrywania języka znajdziesz w sekcji omawiającej zadania w sekcji na temat modeli.

Wybierz i pobierz model, a następnie zapisz go w katalogu projektu:

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

Podaj ścieżkę modelu w parametrze ModelName.

Tworzenie zadania

Aby utworzyć zadanie, możesz użyć jednej z funkcji createFrom...(). Funkcja createFromOptions() akceptuje opcje konfiguracji wzorca do wykrywania języka. Możesz też zainicjować zadanie za pomocą funkcji fabrycznej createFromFile(). Funkcja createFromFile() akceptuje ścieżkę względną lub bezwzględną do wytrenowanego pliku modelu. Więcej informacji o konfigurowaniu zadań znajdziesz w artykule o opcjach konfiguracji.

Poniższy kod pokazuje, jak utworzyć i skonfigurować to zadanie.

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

Przykład tworzenia zadania znajdziesz w przykładowej funkcji LanguageDetectorHelper w klasie initDetector().

Opcje konfiguracji

To zadanie ma te opcje konfiguracji aplikacji na Androida:

Nazwa opcji Opis Zakres wartości Wartość domyślna
maxResults Określa opcjonalną maksymalną liczbę prognozowanych języków o najwyższych wynikach do zwrócenia. Jeśli ta wartość jest mniejsza niż 0, zwracane są wszystkie dostępne wyniki. Dowolne liczby dodatnie -1
scoreThreshold Ustawia próg wyniku prognozy, który zastępuje próg podany w metadanych modelu (jeśli istnieją). Wyniki poniżej tej wartości zostały odrzucone. Dowolna liczba zmiennoprzecinkowa Nie ustawiono
categoryAllowlist Ustawia opcjonalną listę dozwolonych kodów języków. Jeśli nie będzie pusty, podpowiedzi języka, których kodu języka nie ma w tym zestawie, zostaną odfiltrowane. Ta opcja wzajemnie się wyklucza categoryDenylist i korzystanie z obu daje błąd. Dowolne ciągi Nie ustawiono
categoryDenylist Ustawia opcjonalną listę niedozwolonych kodów języków. Jeśli nie są puste, prognozy języka, których kod języka jest w tym zbiorze, zostaną odfiltrowane. Ta opcja wzajemnie się wyklucza z categoryAllowlist, a korzystanie z obu daje błąd. Dowolne ciągi Nie ustawiono

Przygotuj dane

Wykrywacz języka obsługuje dane tekstowe (String). To zadanie obsługuje wstępne przetwarzanie danych wejściowych, w tym tokenizację i wstępne przetwarzanie tensorów. Przetwarzanie wstępne jest realizowane w ramach funkcji detect(). Nie ma potrzeby wcześniejszego wstępnego przetwarzania tekstu wejściowego.

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

Uruchamianie zadania

Wykrywacz języka wykorzystuje metodę LanguageDetector.detect() do przetwarzania tekstu wejściowego i przewidywania jego języka. Do wykrywania treści należy użyć osobnego wątku wykonania, aby uniknąć zablokowania wątku interfejsu użytkownika Androida z aplikacją.

Poniższy kod pokazuje, jak wykonać przetwarzanie za pomocą modelu zadań za pomocą osobnego wątku wykonywania.

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

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

Przykład uruchamiania zadania możesz zobaczyć w przykładowej funkcji LanguageDetectorHelper w klasie detect().

Obsługa i wyświetlanie wyników

Wykrywacz języka generuje element LanguageDetectorResult zawierający listę przewidywanych języków wraz z prawdopodobieństwem tych prognoz. Kategorie języków są zdefiniowane w modelu. Więcej informacji o używanym modelu znajdziesz w sekcji poświęconej modelom w omówieniem zadania.

Poniżej znajdziesz przykład danych wyjściowych z tego zadania:

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

Wynik jest uzyskany przez uruchomienie modelu na tekście wejściowym: "Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent.".

Przykład wyświetlania wyników znajdziesz w przykładowej klasie ResultsAdapter i klasie wewnętrznej ViewHolder.