Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Comparación del uso del reconocimiento de voz en Android: por Intent o on-thread?

Introducción

Android ofrece dos formas de utilizar el reconocimiento de voz.

La primera forma es por un Intent , como en esta pregunta: Ejemplo de intención . Una nueva Activity es empujada a la parte superior de la pila que escucha al usuario, oye un discurso, intenta transcribirlo (normalmente a través de la nube) y luego devuelve el resultado a mi aplicación, a través de una llamada onActivityResult .

El segundo es conseguir un SpeechRecognizer , como el código aquí: ejemplo de SpeechRecognizer . Aquí, parece que el discurso se graba y se transcribe en otro hilo, luego las devoluciones me traen los resultados. Y esto se hace sin dejar mi Activity .

Me gustaría entender los pros y los contras de estas dos maneras de hacer reconocimiento de voz .

Lo que tengo hasta ahora

Usando el Intent :

  • Es simple de codificar
  • Evita reinventar la rueda
  • Proporciona una experiencia de usuario consistente de reconocimiento de voz a través del dispositivo

pero

  • Puede ser lento para la creación de una nueva actividad con su propia ventana

Uso de SpeechRecognizer :

  • Me permite mantener el control de la interfaz de usuario en mi aplicación
  • Me da más posibilidades de las cosas para responder a ( documentación )

pero

  • Está limitado a ser llamado desde el hilo principal
  • Más control requiere más comprobación de errores.

  • ¿Cómo acceder a la API de Letter Recognizer en Android?
  • ¿Cómo puedo detectar formas geométricas 2D básicas (por ejemplo, cuadrado, triángulo, círculo) en una imagen JPEG?
  • Error ERROR_RECOGNIZER_BUSY con reconocimiento de voz sin conexión
  • 3 Solutions collect form web for “Comparación del uso del reconocimiento de voz en Android: por Intent o on-thread?”

    Además de todo esto, añadiría al menos este punto:

    SpeechRecognizer es mejor para las interfaces de usuario manos libres, ya que su aplicación realmente llega a responder a condiciones de error como "Sin coincidencias" y tal vez reiniciar a sí mismo. Cuando utiliza el Intent , la aplicación emite un pitido y muestra un diálogo que el usuario debe presionar para continuar.

    Mi resumen es el siguiente:

    SpeechRecognizer

    • Mostrar diferentes IU o ninguna interfaz de usuario en absoluto. ¿De verdad quieres que la interfaz de usuario de tu aplicación emita un pitido? ¿Realmente desea que su interfaz de usuario muestre un diálogo cuando haya un error y espere a que el usuario haga clic?

    • La aplicación puede hacer algo más mientras se está realizando el reconocimiento de voz

    • Puede reconocer el habla mientras se ejecuta en segundo plano o desde un servicio

    • Puede manejar mejor los errores

    • Puede acceder a material de voz de bajo nivel como el audio sin procesar o el RMS. Analiza ese audio o utiliza el volumen para hacer algún tipo de luz intermitente para indicar que la aplicación está escuchando

    Intención

    • Interfaz de usuario coherente y fácil de usar para los usuarios
    • Fácil de programar

    La diferencia principal es UI. SpeechRecognizer no lo tiene, así que usted es responsable de crear uno.
    Yo uso para escribir un prototipo donde tengo receptor para escuchar el botón del auricular, luego activar el reconocimiento de voz para escuchar algunos comandos. La pantalla no estaba activada así que tuve que usar SpeechRecognizer (mi UI era algunos sonidos pregrabados y Text To Speech).

    La segunda diferencia es que SpeechRecognizer tiene capacidad para escuchar constantemente. La versión de intención terminará siempre la exacción después de cierto período. Por ejemplo SpeechRecognizer es utilizado por el reconocimiento de voz "teclado" para que pueda dictar un SMS.
    En tal caso, sólo recibirá resultados parciales (en modo normal, SpeechRecognizer sólo proporciona resultados finales).

    Una cosa que las otras respuestas no han mencionado: si se instalan varios reconocedores de voz en el dispositivo, el cambio de usuario entre ellos es diferente dependiendo de si se utiliza "Intent" o SpeechRecognizer .

    • En caso de "Intención", el diálogo de selección de actividad estándar aparece. El usuario puede elegir el reconocedor que se utilizará y, opcionalmente, establecerlo globalmente como el reconocedor predeterminado, para evitar el diálogo en el futuro.
    • En el caso de SpeechRecognizer el usuario puede configurar y configurar el reconocedor predeterminado en la configuración global ( Language and input -> Voice recognizer en ICS).

    Por lo tanto, dependiendo de qué interfaz se utiliza la documentación acerca de la configuración del reconocedor predeterminado y el cambio entre los reconocimientos debe ser diferente. (En la mayoría de los casos, aunque sólo hay un reconocedor, Google Voice Search, por lo que esto podría no ser un gran problema en la práctica.)

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.