API GenAI Speech Recognition

Na API Speech Recognition do Kit de ML GenAI, é possível transcrever conteúdo de áudio para texto. Essa API oferece suporte aos seguintes modos:

  • Básico: a API Speech Recognition usa o modelo tradicional de reconhecimento de fala no dispositivo semelhante à API SpeechRecognizer
    • Geralmente disponível na maioria dos dispositivos Android com o nível da API 31 e mais recentes
  • Avançado: a API Speech Recognition usa o modelo GenAI, que produz uma cobertura de linguagem mais ampla e uma qualidade geral melhor
    • Disponível em dispositivos Pixel 10, com mais dispositivos em desenvolvimento

Principais recursos

  • Captura a entrada de streaming do microfone ou do arquivo de áudio
  • O texto transcrito é fornecido como um fluxo contínuo, que pode ser parcial (e sujeito a mudanças) antes de se tornar o conteúdo final.

Resultados de exemplo

Áudio Modo Localidade Transcrição
audio_1 Básico en-US "This is a short message"
audio_2 Avançado es-ES "Este es un mensaje corto."

Comparação com a API Speech Recognition da plataforma

Ao usar o modo básico, a API Speech Recognition do Kit de ML oferece uma funcionalidade principal semelhante à API Speech Recognition da plataforma. Uma das principais vantagens do Kit de ML é o suporte a uma variedade maior de versões da plataforma Android, exigindo a API de nível 31 ou mais recente, que é mais ampla do que algumas APIs da plataforma.

Além disso, a API Speech Recognition do Kit de ML usa o modelo do Gemini no dispositivo no modo avançado, oferecendo uma cobertura de linguagem mais ampla.

Primeiros passos

Adicione a API Speech Recognition do Kit de ML como uma dependência na configuração build.gradle

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

Para integrar a API Speech Recognition ao seu app, crie um cliente SpeechRecognizer. Verifique o status dos recursos necessários do modelo no dispositivo e faça o download do modelo se ele ainda não estiver no dispositivo. Depois de preparar a entrada de áudio em um SpeechRecognizerRequest, execute a inferência usando o cliente para receber a saída de streaming do fluxo Kotlin. Por fim, lembre-se de fechar o cliente para liberar recursos.

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

Requisitos de entrada de áudio

A API Speech Recognition do GenAI oferece suporte à entrada do microfone ou de uma fonte personalizada por meio de um descritor de arquivo.

Se você usar AudioSource.fromPfd(parcelFileDescriptor), o áudio de entrada precisará atender aos seguintes requisitos rigorosos:

  • Formato: PCM bruto de 16 bits sem cabeçalho.
  • Canais: mono (canal único).
  • Taxa de amostragem: 16 kHz.

Para a maioria dos casos de uso, recomendamos AudioSource.fromMic(), porque ele processa essas restrições automaticamente.

Linguagens e dispositivos compatíveis

Modo Localidades
Básico 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)
Avançado Localidades que normalmente têm alta precisão: 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)

Dispositivos compatíveis

Modo Dispositivos compatíveis
Básico Dispositivos Android que usam a API de nível 31 e mais recentes.
Avançado Pixel 10

Problemas comuns de configuração

As APIs GenAI do Kit de ML dependem do app AICore do Android para acessar o Gemini Nano. Quando um dispositivo é configurado (incluindo a redefinição) ou o app AICore é redefinido (por exemplo, dados limpos, desinstalados e reinstalados), o app AICore pode não ter tempo suficiente para concluir a inicialização (incluindo o download das configurações mais recentes do servidor). Como resultado, as APIs GenAI do Kit de ML podem não funcionar como esperado. Confira as mensagens de erro de configuração comuns que podem aparecer e como lidar com elas:

Exemplo de mensagem de erro Como lidar
O AICore falhou com o tipo de erro 4-CONNECTION_ERROR e o código de erro 601-BINDING_FAILURE: falha na vinculação do serviço AICore. Isso pode acontecer quando você instala o app usando as APIs GenAI do Kit de ML imediatamente após a configuração do dispositivo ou quando o AICore é desinstalado após a instalação do app. Atualizar o app AICore e reinstalar o app deve corrigir o problema.
O AICore falhou com o tipo de erro 3-PREPARATION_ERROR e o código de erro 606-FEATURE_NOT_FOUND: o recurso ... não está disponível. Isso pode acontecer quando o AICore não terminou de fazer o download das configurações mais recentes. Quando o dispositivo está conectado à Internet, geralmente leva alguns minutos a algumas horas para atualizar. Reiniciar o dispositivo pode acelerar a atualização.

Observação: se o carregador de inicialização do dispositivo estiver desbloqueado, você também vai receber esse erro. Essa API não oferece suporte a dispositivos com carregadores de inicialização desbloqueados.
O AICore falhou com o tipo de erro 1-DOWNLOAD_ERROR e o código de erro 0-UNKNOWN: o recurso ... falhou com o status de falha 0 e o erro esz: UNAVAILABLE: não foi possível resolver o host ... Mantenha a conexão de rede, aguarde alguns minutos e tente novamente.

Exemplo de código

  • Confira o exemplo de código da API Speech Recognition do Kit de ML no GitHub