API de GenAI Speech Recognition

Dentro de la API de Speech Recognition de GenAI de ML Kit, puedes transcribir contenido de audio a texto. Esta API admite los siguientes modos:

  • Básico: La API de Speech Recognition usa el modelo tradicional de reconocimiento de voz integrado en el dispositivo similar a la API de SpeechRecognizer
    • Por lo general, está disponible en la mayoría de los dispositivos Android con el nivel de API 31 y versiones posteriores.
  • Avanzado: La API de Speech Recognition usa el modelo de GenAI, que produce una cobertura de idiomas más amplia y una mejor calidad general
    • Está disponible en los dispositivos Pixel 10 y Pixel 11, y se están desarrollando más dispositivos.

Funciones clave

  • Captura la entrada de transmisión desde el micrófono o el archivo de audio.
  • El texto transcrito se proporciona como una transmisión continua, que puede ser parcial al principio (y sujeta a cambios) antes de convertirse en el contenido final.

Resultados de ejemplo

Audio Modo Configuración regional Transcripción
audio_1 Básico en-US "This is a short message"
audio_2 Avanzado es-ES "Este es un mensaje corto."

Comparación con la API de Speech Recognition de la plataforma

Cuando se usa el modo básico, la API de Speech Recognition de ML Kit ofrece una funcionalidad principal similar a la API de Speech Recognition de la plataforma. Una ventaja clave de ML Kit es su compatibilidad con una gama más amplia de versiones de la plataforma de Android, que requieren el nivel de API 31 o versiones posteriores, que es más amplio que algunas APIs de la plataforma.

Además, la API de reconocimiento de voz de ML Kit usa el modelo de Gemini integrado en el dispositivo en el Modo avanzado, lo que proporciona una cobertura de idiomas más amplia.

Comenzar

Agrega la API de Speech Recognition de ML Kit como una dependencia en tu configuración build.gradle.

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

Para integrar la API de Speech Recognition en tu app, crea un cliente SpeechRecognizer. Verifica el estado de las funciones necesarias del modelo integrado en el dispositivo y descarga el modelo si aún no está en el dispositivo. Después de preparar la entrada de audio en un SpeechRecognizerRequest, ejecuta la inferencia con el cliente para recibir la salida de transmisión del flujo de Kotlin. Por último, recuerda cerrar el 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 audio

La API de Speech Recognition de GenAI admite la entrada desde el micrófono o una fuente personalizada a través de un descriptor de archivo.

Si usas AudioSource.fromPfd(parcelFileDescriptor), el audio de entrada debe cumplir con los siguientes requisitos estrictos:

  • Formato: PCM de 16 bits sin procesar y sin encabezado
  • Canales: Mono (canal único).
  • Tasa de muestreo: 16 kHz

En la mayoría de los casos de uso, se recomienda AudioSource.fromMic() porque controla estas restricciones automáticamente.

Lenguajes y dispositivos compatibles

Modo Configuración regional
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)
Avanzado Configuración regional que suele tener alta precisión: 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 compatibles

Modo Dispositivos compatibles
Básico Dispositivos Android con el nivel de API 31 y versiones posteriores
Avanzado Pixel 10, Pixel 11

Problemas comunes de configuración

Las APIs de IA generativa de ML Kit dependen de la app de Android AICore para acceder a Gemini Nano. Cuando se configura un dispositivo (incluido el restablecimiento) o se restablece la app de AICore (p.ej., borrar datos, desinstalar y volver a instalar), es posible que la app de AICore no tenga suficiente tiempo para finalizar la inicialización (incluida la descarga de las configuraciones más recientes del servidor). Como resultado, es posible que las APIs de GenAI de ML Kit no funcionen según lo esperado. A continuación, se muestran los mensajes de error de configuración comunes que puedes ver y cómo controlarlos:

Ejemplo de mensaje de error Cómo controlarlo
AICore failed with error type 4-CONNECTION_ERROR and error code 601-BINDING_FAILURE: AICore service failed to bind. Esto puede suceder cuando instalas la app con las APIs de GenAI de ML Kit inmediatamente después de la configuración del dispositivo o cuando se desinstala AICore después de instalar la app. Actualizar la app de AICore y, luego, volver a instalar la app debería solucionar el problema.
AICore failed with error type 3-PREPARATION_ERROR and error code 606-FEATURE_NOT_FOUND: Feature ... is not available. Esto puede suceder cuando AICore no terminó de descargar las configuraciones más recientes. Cuando el dispositivo está conectado a Internet, suele tardar unos minutos o unas horas en actualizarse. Reiniciar el dispositivo puede acelerar la actualización.

Ten en cuenta que, si el bootloader del dispositivo está desbloqueado, también verás este error. Esta API no admite dispositivos con bootloaders desbloqueados.
AICore failed with error type 1-DOWNLOAD_ERROR and error code 0-UNKNOWN: Feature ... failed with failure status 0 and error esz: UNAVAILABLE: Unable to resolve host ... Mantén la conexión de red, espera unos minutos y vuelve a intentarlo.

Código de muestra

  • Explora la muestra de código de la API de Speech Recognition de ML Kit en GitHub.