GenAI Speech Recognition API

API распознавания речи на основе генеративного ИИ в ML Kit позволяет преобразовывать аудиоконтент в текст. Этот API поддерживает следующие режимы:

  • Базовый. Speech Recognition API использует традиционную модель распознавания речи на устройстве, похожую на SpeechRecognizer API.
    • Доступно на большинстве устройств Android с API уровня 31 и выше
  • Расширенный. API распознавания речи использует модель GenAI, которая обеспечивает более широкую языковую поддержку и более высокое качество.
    • Доступно на устройствах Pixel 10 и Pixel 11. Поддержка других устройств будет добавлена позже.

Основные возможности

  • Захватывает потоковый ввод с микрофона или аудиофайла.
  • Расшифровка предоставляется в виде непрерывного потока, который изначально может быть неполным (и может меняться), а затем становится окончательным.

Пример результатов

Аудио Режим Региональные настройки Расшифровка
audio_1 Основные en-US "Это короткое сообщение".
audio_2 Расширенные es-ES "Este es un mensaje corto."

Сравнение с платформенным API распознавания речи

В базовом режиме API распознавания речи ML Kit предлагает те же основные функции, что и API распознавания речи платформы. Ключевое преимущество ML Kit – поддержка более широкого диапазона версий платформы Android (требуется API уровня 31 или выше), чем у некоторых API платформы.

Кроме того, в API распознавания речи ML Kit в расширенном режиме используется модель Gemini на устройстве, что позволяет поддерживать больше языков.

Начать

Добавьте ML Kit Speech Recognition API в качестве зависимости в конфигурацию build.gradle.

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

Чтобы интегрировать Speech Recognition API в приложение, создайте клиента SpeechRecognizer. Проверьте статус необходимых функций на основе модели устройства и скачайте модель, если ее ещё нет на устройстве. Подготовив аудиовход в SpeechRecognizerRequest, запустите инференс с помощью клиента, чтобы получить потоковый вывод из Kotlin flow. Наконец, не забудьте закрыть клиент, чтобы освободить ресурсы.

// 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()
}

Требования к аудиовходу

GenAI Speech Recognition API поддерживает ввод данных с микрофона или из пользовательского источника через дескриптор файла.

Если вы используете AudioSource.fromPfd(parcelFileDescriptor), входной аудиофайл должен соответствовать следующим строгим требованиям:

  • Формат: необработанный 16-битный PCM без заголовка.
  • Каналы: моно (один канал).
  • Частота дискретизации: 16 кГц.

В большинстве случаев рекомендуется использовать AudioSource.fromMic(), поскольку он автоматически обрабатывает эти ограничения.

Поддерживаемые языки и устройства

Режим Локали
Основные en-US, fr-FR (бета), it-IT (бета), de-DE (бета), es-ES (бета), hi-IN (бета), ja-JP (бета), pt-BR (бета), tr-TR (бета), pl-PL (бета), cmn-Hans-CN (бета), ko-KR (бета), cmn-Hant-TW (бета), ru-RU (бета), vi-VN (бета)
Расширенные Языки с высокой точностью: английский (США), корейский (Южная Корея), испанский (Испания), французский (Франция), немецкий (Германия), итальянский (Италия), португальский (Португалия), китайский (упрощенный, Китай), китайский (традиционный, Тайвань), японский (Япония), тайский (Таиланд), русский (Россия), нидерландский (Нидерланды, бета), датский (Дания, бета), шведский (Швеция, бета), польский (Польша, бета), хинди (Индия, бета), вьетнамский (Вьетнам, бета), индонезийский (Индонезия, бета), арабский (Саудовская Аравия, бета), турецкий (Турция, бета).

Поддерживаемые устройства

Режим Поддерживаемые устройства
Основные Устройства Android с API уровня 31 и выше.
Расширенные Pixel 10, Pixel 11

Распространенные проблемы с настройкой

API GenAI ML Kit используют приложение Android AICore для доступа к Gemini Nano. Если устройство только что настроено (в том числе после сброса) или приложение AICore только что сброшено (например, удалены данные, а затем приложение удалено и установлено заново), у приложения AICore может не быть достаточно времени для завершения инициализации (включая скачивание последних конфигураций с сервера). В результате API GenAI в ML Kit могут работать неправильно. Ниже приведены распространенные сообщения об ошибках, которые могут появляться при настройке, и способы их устранения.

Пример сообщения об ошибке Как действовать
AICore не удалось запустить из-за ошибки типа 4 (CONNECTION_ERROR) и кода ошибки 601 (BINDING_FAILURE): не удалось привязать сервис AICore. Это может произойти, если вы установите приложение с помощью ML Kit GenAI API сразу после настройки устройства или если AICore будет удален после установки приложения. Обновите приложение AICore, а затем переустановите свое приложение.
AICore не удалось запустить из-за ошибки типа 3 (PREPARATION_ERROR) и кода ошибки 606 (FEATURE_NOT_FOUND): функция "..." недоступна. Это может произойти, если AICore ещё не скачал последние конфигурации. Если устройство подключено к интернету, обновление обычно занимает от нескольких минут до нескольких часов. Перезагрузка устройства может ускорить обновление.

Обратите внимание, что если загрузчик операционной системы устройства разблокирован, вы также увидите эту ошибку. API не поддерживает устройства с разблокированными загрузчиками операционной системы.
Ошибка AICore типа 1 (DOWNLOAD_ERROR) с кодом ошибки 0 (UNKNOWN): функция ... не выполнена со статусом 0 и ошибкой esz: UNAVAILABLE: не удается разрешить хост ... Сохраните подключение к сети, подождите несколько минут и повторите попытку.

Образец кода

  • Посмотреть пример кода ML Kit Speech Recognition API на сайте GitHub