GenAI Speech Recognition API

W interfejsie GenAI Speech Recognition API w ML Kit możesz transkrybować treści audio na tekst. Ten interfejs API obsługuje te tryby:

  • Podstawowy: interfejs Speech Recognition API korzysta z tradycyjnego modelu rozpoznawania mowy na urządzeniu, podobnie jak interfejs SpeechRecognizer API.
    • Dostępne na większości urządzeń z Androidem z interfejsem API na poziomie 31 lub wyższym
  • Zaawansowane: interfejs Speech Recognition API korzysta z modelu GenAI, który zapewnia szerszy zakres języków i lepszą ogólną jakość.
    • Dostępne na urządzeniach Pixel 10, a wkrótce na kolejnych

Najważniejsze funkcje

  • Przechwytywanie strumieniowego wejścia z mikrofonu lub pliku audio
  • Transkrypcja jest dostarczana jako ciągły strumień, który początkowo może być niepełny (i podlegać zmianom), zanim stanie się ostateczną treścią.

Przykładowe wyniki

Audio Tryb Język Transkrypcja
audio_1 Podstawowe en-US „To krótka wiadomość”
audio_2 Zaawansowane es-ES "Este es un mensaje corto."

Porównanie z interfejsem API rozpoznawania mowy na platformie

W trybie podstawowym interfejs ML Kit Speech Recognition API oferuje podobne podstawowe funkcje jak interfejs Speech Recognition API platformy. Kluczową zaletą ML Kit jest obsługa szerszego zakresu wersji platformy Androida, ponieważ wymaga on interfejsu API na poziomie 31 lub wyższym, co jest szerszym zakresem niż w przypadku niektórych interfejsów API platformy.

Interfejs ML Kit Speech Recognition API w trybie zaawansowanym korzysta z modelu Gemini na urządzeniu, co zapewnia szerszy zakres języków.

Rozpocznij

Dodaj interfejs ML Kit Speech Recognition API jako zależność w konfiguracji build.gradle.

implementation("com.google.mlkit:genai-speech-recognition:1.0.0-alpha1")

Aby zintegrować interfejs Speech Recognition API z aplikacją, utwórz klienta SpeechRecognizer. Sprawdź stan niezbędnych funkcji modelu na urządzeniu i pobierz model, jeśli nie jest jeszcze dostępny na urządzeniu. Po przygotowaniu danych wejściowych audio w SpeechRecognizerRequest uruchom wnioskowanie za pomocą klienta, aby otrzymać dane wyjściowe przesyłane strumieniowo z procesu Kotlin. Na koniec pamiętaj, aby zamknąć klienta, aby zwolnić zasoby.

// 1. Create a SpeechRecognizer with desired options.
val options: SpeechRecognizerOptions =
    speechRecognizerOptions {
        locale = Locale.US
        preferredMode = SpeechRecognizerOptions.Mode.MODE_ADVANCED
    }
val speechRecognizer: SpeechRecognizer = SpeechRecognition.getClient(options)

// 2. Check if the recognition model is available or needs downloading.
launch {
    val status: Int = speechRecognizer.checkStatus()
    if (status == FeatureStatus.DOWNLOADABLE) {
        // 3. If needed, download the model and monitor progress.
        speechRecognizer.download.collect { downloadStatus ->
            when (downloadStatus) {
                is DownloadStatus.DownloadCompleted -> {
                    // Model is ready, start recognition.
                    startMyRecognition(speechRecognizer)
                }
                is DownloadStatus.DownloadFailed -> {
                    // Handle download failure (e.g., inform the user).
                }
                is DownloadStatus.DownloadProgress -> {
                    // Handle download progress (e.g., update a progress bar).
                }
            }
        }
    } else if (status == FeatureStatus.AVAILABLE) {
        // Model is already ready, start recognition immediately.
        startMyRecognition(speechRecognizer)
    } else {
        // Handle other statuses (e.g., DOWNLOADING, UNAVAILABLE).
    }
}

// 4. Define your recognition logic using a suspend function.
suspend fun startMyRecognition(recognizer: SpeechRecognizer) {
    // Create a request (e.g., specifying audio source).
    val request: SpeechRecognizerRequest
        = speechRecognizerRequest { audioSource = AudioSource.fromMic() }
    // Start recognition and process the continuous stream of responses.
    recognizer.startRecognition(request).collect {
        // Process the SpeechRecognitionResponse data here.
    }
}

// 5. Stop recognition and clean up resources when the session is complete.
launch {
    recognizer.stopRecognition()
    recognizer.close()
}

Obsługiwane języki i urządzenia

Tryb Języki
Podstawowe en-US, fr-FR (beta), it-IT (beta), de-DE (beta), es-ES (beta), hi-IN (beta), ja-JP (beta), pt-BR (beta), tr-TR (beta), pl-PL (beta), cmn-Hans-CN (beta), ko-KR (beta), cmn-Hant-TW (beta), ru-RU (beta), vi-VN (beta)
Zaawansowane Języki, w przypadku których dokładność jest zwykle wysoka: en-US, ko-KR, es-ES, fr-FR, de-DE, it-IT, pt-PT, cmn-Hans-CN, cmn-Hant-TW, ja-JP, th-TH, ru-RU, nl-NL (beta), da-DK (beta), sv-SE (beta), pl-PL (beta), hi-IN (beta), vi-VN (beta), id-ID (beta), ar-SA (beta), tr-TR (beta)

Obsługiwane urządzenia

Tryb Obsługiwane urządzenia
Podstawowe Urządzenia z Androidem korzystające z poziomu interfejsu API 31 lub nowszego.
Zaawansowane Pixel 10

Typowe problemy z konfiguracją

Interfejsy ML Kit GenAI API korzystają z aplikacji Android AICore, aby uzyskać dostęp do Gemini Nano. Gdy urządzenie jest dopiero konfigurowane (w tym resetowane) lub aplikacja AICore jest dopiero resetowana (np. czyszczenie danych, odinstalowanie i ponowne zainstalowanie), może nie mieć wystarczająco dużo czasu na zakończenie inicjowania (w tym pobierania najnowszych konfiguracji z serwera). W związku z tym interfejsy ML Kit GenAI API mogą nie działać zgodnie z oczekiwaniami. Oto typowe komunikaty o błędach konfiguracji, które możesz zobaczyć, oraz sposoby postępowania z nimi:

Przykładowy komunikat o błędzie Jak sobie z tym poradzić
Usługa AICore nie działa z powodu błędu typu 4-CONNECTION_ERROR i kodu błędu 601-BINDING_FAILURE: nie udało się powiązać usługi AICore. Może się to zdarzyć, gdy zainstalujesz aplikację za pomocą interfejsów ML Kit GenAI API natychmiast po skonfigurowaniu urządzenia lub gdy po zainstalowaniu aplikacji odinstalujesz AICore. Zaktualizowanie aplikacji AICore, a następnie ponowne zainstalowanie aplikacji powinno rozwiązać ten problem.
Usługa AICore zakończyła się niepowodzeniem z błędem typu 3-PREPARATION_ERROR i kodem błędu 606-FEATURE_NOT_FOUND: funkcja ... jest niedostępna. Może się tak zdarzyć, gdy AICore nie zakończyło pobierania najnowszych konfiguracji. Gdy urządzenie jest połączone z internetem, aktualizacja trwa zwykle od kilku minut do kilku godzin. Ponowne uruchomienie urządzenia może przyspieszyć aktualizację.

Pamiętaj, że ten błąd pojawi się też, jeśli program rozruchowy urządzenia jest odblokowany – to API nie obsługuje urządzeń z odblokowanymi programami rozruchowymi.
Usługa AICore nie działa z błędem typu 1-DOWNLOAD_ERROR i kodem błędu 0-UNKNOWN: funkcja ... nie działa ze stanem błędu 0 i błędem esz: UNAVAILABLE: nie można rozpoznać hosta ... Utrzymuj połączenie z siecią, poczekaj kilka minut i spróbuj ponownie.

Przykładowy kod

  • Zapoznaj się z przykładowym kodem interfejsu Speech Recognition API w ML Kit na GitHub